Tut01: ESP8266 mit Arduino – Installation

  1. Windows 7 Image installieren (4GB-RAM, 2 CPUs)
  2. Arduino downloaden und installieren
  3. Arduino starten und unter „Voreinstellungen“ bei „Zusätzliche Boardverwalter-URLs“ folgende eintragen:
    http://arduino.esp8266.com/stable/package_esp8266com_index.json
    Hintergrund siehe: https://github.com/esp8266/Arduino
  4. Unter „Werkzeuge“, „Board…“, „Boardverwalter“ bei der Suche „ESP8266“ eingeben und Ergebnis installieren (150MByte, das dauert etwas).
  5. Unter „Werkzeuge“ „Board…“ das Brett „NodeMCU 1.0 (ESP-12E-Module“) auswählen
  6. ESP8266 an USB-Port einstecken
  7. USB-Port in VirtualBox durchreichen: Unter „Geräte“, „USB“, „Silicon-Labs CP2102…“ auswählen.
  8. Unter „Werkzeuge“, „Port“ „Com3“ auswählen
  9. Das „Hallo Welt“ bei Arduino heisst „blink“ und zwar die Leuchtdiode auf dem Brett.
    „Datei“ , „Beispiele“, „ESP8266“, „Blink“ und dieses einfach an ESP8266 übertragen.
  10. Werte für „delay“ ändern (delay in ms)  und wieder übertragen.
    delay(100); // Wait for 0,1 second
    digitalWrite(LED_BUILTIN, HIGH); // Turn the LED off by making the voltage HIGH
    delay(200);
  11. Glückwunsch zum ersten Arduinosketch.Grossartiges Buch über den ESP8266
    http://neilkolban.com/tech/esp8266/

Tut02: ESP8266 mit Arduino – Externe LED mit Vorwiderstand schalten

Pinbegelung NodeMCU

Vorsicht! USB-Port unten, betrachtet von oben!

nodemcu_pinout_700.png

Zur Adressierung von Ausgängen:

  1. Die bereits genutzte blaue interne LED hängt an D0 (Ausgang Digital 0)
    Diese wird im Beispielsketch automatisch über „LED_BUILTIN“ adressiert, da wir der Arduino-IDE gesagt haben, welches Brett da vor ihr liegt.
  2. Sauber wäre diese über z.B. digitalWrite(D0, HIGH); zu adressieren.
  3. Weg 3 für maximale Verwirrung:
    digitalWrite(16,HIGH);
    zur direkten Adressierung von  GPIO16 geht ebenfalls.Das Vermischen dieser drei Möglichkeiten hat schon viele in den Wahnsinn getrieben, Psychiatrie!

Aufgabe:
Hängen Sie eine externe LED mit Vorwiderstand an D1 (GPIO0) gegen GND (langes Beinchen D1, kurzes an GND und lassen Sie dieses blinken.

 

externediode

Tut03: ESP8266 mit Arduino – LED schalten über Webserver

Vorsicht, dieser Sketch dient nur zum Einstieg und ist nicht für den langfristigen Produktiveinsatz gedacht, der ESP8266 hängt sich immer mal wieder auf, manchmal nach 10 Minuten, manchmal schon schneller. Der Resetbutton bringt Abhilfe.

Als Vorlage dient:
http://www.instructables.com/id/Quick-Start-to-Nodemcu-ESP8266-on-Arduino-IDE/

#include <ESP8266WiFi.h>
 
const char* ssid = "Magesh";
const char* password = "jayakumar";
 
int ledPin = 13; // GPIO13
WiFiServer server(80);
 
void setup() {
  Serial.begin(115200);
  delay(10);
 
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
 
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
 
  // Start the server
  server.begin();
  Serial.println("Server started");
 
  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
 
}
 
void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
 
  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
 
  // Match the request
 
  int value = LOW;
  if (request.indexOf("/LED=ON") != -1)  {
    digitalWrite(ledPin, HIGH);
    value = HIGH;
  }
  if (request.indexOf("/LED=OFF") != -1)  {
    digitalWrite(ledPin, LOW);
    value = LOW;
  }
 
// Set ledPin according to the request
//digitalWrite(ledPin, value);
 
  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
 
  client.print("Led pin is now: ");
 
  if(value == HIGH) {
    client.print("On");
  } else {
    client.print("Off");
  }
  client.println("<br><br>");
  client.println("<a href=\"/LED=ON\"\"><button>Turn On </button></a>");
  client.println("<a href=\"/LED=OFF\"\"><button>Turn Off </button></a><br />");  
  client.println("</html>");
 
  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
 
}

Vorsicht im Schulungsbereich: Einige TP-Link-APs lassen nicht mehr als 16 Teilnehmer zu.

Lösung: vernuenftige Hardware nutzen, der TP-Link 841 hat anscheinend ein „hard limit“, auch mit OpenWRT ist bei um die 15 Schluss.
Mikrotik tut.

Tut04:ESP8266 MAC-Adresse auslesen

Mit folgendem Sketch können Sie Ihre MAC-Adresse über die serielle Konsole auslesen, wichtig für SSID der APs und für manuelle Einträge im DHCP-Server.

#include <ESP8266WiFi.h>

//const char* ssid = "ssid";
//const char* password = "password";
byte mac[6];

void setup() {
  Serial.begin(115200);
  //WiFi.begin(ssid, password);

  Serial.print("\nStart...\n");
  WiFi.macAddress(mac);
  Serial.print("MAC: ");
  Serial.print(mac[0],HEX);
  Serial.print(":");
  Serial.print(mac[1],HEX);
  Serial.print(":");
  Serial.print(mac[2],HEX);
  Serial.print(":");
  Serial.print(mac[3],HEX);
  Serial.print(":");
  Serial.print(mac[4],HEX);
  Serial.print(":");
  Serial.println(mac[5],HEX);
}

void loop() {
  // put your main code here, to run repeatedly:

}

Tut05: ESP8266 mit Arduino – Temperatur und Luftfeuchtemessung mit DHT11/DHT22

  • „Bibliothek einbinden“ -> „Bibliothek verwalten“ -> „dht11“ suchen -> installieren
  • Beispiel laden: „SimpleDHT“ -> „DHT11_Default“
  • Richtig anschliessen und Testen

weiter mit Webserveranzeige Temperatur und Luftfeuchte, Google ist Dein Freund.
Empfehlung:

Wir schliessen den DHT11 ohne (111!!) Widerstand an, also NICHT so wie im Link. Lehrer erklärt das nochmal an der Tafel!


http://randomnerdtutorials.com/esp8266-dht11dht22-temperature-and-humidity-web-server-with-arduino-ide/

Vorsicht: Problem mit aktuellen Adafruit-DHT-Lib,
Version 1.3 (Februar 2017) macht Probleme beim Kompilieren
Lösung: Version 1.2.3 über die Bibliotheksverwaltung installieren, siehe oben oder zu 1.3 Adafruit Unified Sensor (ganz unten in der Bibliotheksverwaltung) installieren.


Vorsicht Spannungspin an DHT11 an Vin ESP8266 tötet den ESP bei falscher Verkabelung, 5 tote Schottkeydioden in einer Klasse deuten zumindest darauf hin. Wir nutzen Vcc und nicht Vin!!1111!!!
Nach Reparatur (Lötbatzen über Schottky) abzwicken von Vin (5V-Pin) für die Schulungs-ESPs.
Problem: 5V-Sensoren muss man anders mit Spannung versorgen.

Tut08: Mosquitto als MQTT-Datenbroker

MQTT-Broker aufsetzen, Phant verworfen, da fehlende Visualisierung.

Gute Präsentation zu MQTT (Folie 1 bis 21)

Gute Einstiegsartikel zu MQTT

Einstiegsübung in MQTT

  • Chatserver per MQTT abwickeln (FB nutzt MQTT für den Messenger)
    Aufbau, jeder zwei Terminalfenster
    Voraussetzung Lehrer: mosquitto
    Schüler: mosquitto-clients
    Lehrer installiert Broker mosquitto,  durch erstes „subcribe“ wird topic-klassenchat angelegt:

    mosquitto_sub -h 10.0.0.252 -v -t "klassenchat"
     

    Jeder abonniert topic in einem Fenster:

    mosquitto_sub -h 10.0.0.252 -v -t "klassenchat"

    Jeder füttert das topic („message queue“)

    mosquitto_pub -h 10.0.0.252 -t "klassenchat" -m "Jessie is in da house, mf!"

    Danach eigenen Broker mit Daten vom ESP8266 füttern

  • MQTT mit Passwort und ACLs: https://www.auxnet.de/verschluesseltes-mqtt-vom-und-zum-mosquitto-server/
  • Um mal eben den Broker mit Temperaturdaten zu füttern, lässt sich folgendes Shellskript nutzen:
    #!/bin/bash
    while true
    do
    
    i=0
    while [ $i -lt 100 ]
    do
     mosquitto_pub -h 10.16.225.225 -t "temperatur" -m $i
     echo $i
     let i=$i+1
    sleep 4
    done
    
    i=100
    while [ $i -ne 0 ]
    do
     mosquitto_pub -h 10.16.225.225 -t "temperatur" -m $i
     echo $i
     let i=$i-1
    sleep 4
    done
    done

mosquitto_sub mit Zeitstempel:
apt install moreutils

mosquitto_sub -v -t /# | ts

 

Grossartige Android-APP für MQTT: MQTT Dasboard
https://play.google.com/store/apps/details?id=net.routix.mqttdash&hl=de