Das NodeMCU
Das NodeMCU arbeitet mit einem ESP8266-Prozessor und verfügt über WiFi.
Board installieren
Trage unter Datei -> Einstellungen eine zusätzliche Boardverwalter-URL ein:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Board auswählen
Wenn das NodeMCU nicht automatisch erkannt wurde, klicke auf "Wähle ein anderes Board und einen anderen Port" und suche nach NodeMCU. Je nach Betriebssystem wird der USB-Port eine andere Bezeichnung haben.
Pinbelegung
I²C
D1 (GPIO5) -> SCL
D2 (GPIO4) -> SDA
SPI
D5 (GPIO14) -> SCK/SLCK
D6 (GPIO12) -> CIPO/SDI
D7 (GPIO13) -> COPI/SDO
D8 (GPIO15) -> CS
Digitale Pins
D0 (GPIO16)
D1 (GPIO5)
D2 (GPIO4)
D3 (GPIO0)
D4 (GPIO3)
D5 (GPIO14)
D6 (GPIO12)
D7 (GPIO13)
D8 (GPIO15)
RX (GPIO3)
Die Pins können mit ihrer Bezeichnung D0 bis D8 und mit ihrer Nummer angesprochen werden:
int LED = 5;
void setup()
{
pinMode(LED, OUTPUT);
}
void loop()
{
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);
delay(1000);
}
oder:
int LED = D1;
void setup()
{
pinMode(LED, OUTPUT);
}
void loop()
{
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);
delay(1000);
}
Analoger Pin
Das NodeMCU verfügt nur über einen analogen Pin.
Der Anolog-Digital-Wandler ermittelt Werte zwischen 0 und 1024.
WiFi
Beispiel:
Im Browser werden 6 Zufallszahlen angezeigt.
Im Seriellen Monitor wird die mit DHCP ermittelte IP des NodeMCU angezeigt.
client-Methode
#include "ESP8266WiFi.h"
// SSID und Passwort des Routers
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";
WiFiServer Server(80);
WiFiClient Client;
// Minimum und Maximum der Zufallszahlen
int Minimum = 1;
int Maximum = 49;
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial);
delay(500);
// WiFi starten
WiFi.begin(Router, Passwort);
// Verbindung herstellen
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
Serial.print(".");
}
Server.begin();
// SSID des Routers anzeigen
Serial.println();
Serial.print("Verbunden mit ");
Serial.println(WiFi.SSID());
// IP anzeigen
Serial.println(WiFi.localIP());
// Zufallsgenerator mit dem Signal an A0 starten
randomSeed(analogRead(A0));
}
void loop()
{
Client = Server.available();
if (Client)
{
// Seite aufbauen wenn SeiteAufbauen true ist
boolean SeiteAufbauen = true;
// solange der Client verbunden ist ...
while (Client.connected())
{
if (Client.available())
{
// Anforderung vom Clienten lesen ...
char Zeichen = Client.read();
// return (\n) gesendet
if (Zeichen == '\n')
{
// wenn SeiteAufbauen den Wert true hat
if (SeiteAufbauen)
{
/*
HTML-Seite aufbauen
die folgenden Anweisungen müssen
mit print oder println gesendet werden
println "verschönert" den Quelltext
(erzeugt einen Zeilenumbruch im Quelltext)
*/
// HTML-Seite aufbauen
Client.println("HTTP/1.1 200 OK");
Client.println("Content-type:text/html");
// Leerzeile zwingend erforderlich
Client.println();
Client.println("<!doctype html>");
Client.println("<html>");
Client.println("<body>");
// alle 60 Sekunden aktualisieren mit meta-Tag
Client.println("<meta http-equiv=\"refresh\" content=\"60\">");
// <h2> Überschrift H2
Client.println("<h2>Zufallszahlen</h2>");
// <hr> horizontale Linie
Client.println("<hr>");
// Zufallszahlen anzeigen
for (int i = 0; i < 6; i++ )
{
int Zahl = random(Minimum, Maximum);
Client.println(Zahl);
Client.println(" ");
}
Client.print("<hr>");
// IPs anzeigen
Client.print("Eigene IP (Server): ");
Client.print(Client.remoteIP());
// <br> break = neue Zeile
Client.print("<br>IP Adresse Klient DHCP ");
Client.print(WiFi.localIP());
// Seite schließen
Client.println("</body>");
Client.println("</html>");
// HTTP-Antwort endet mit neuer Zeile
Client.println();
// Seite vollständig geladen -> loop verlassen
break;
}
// wenn new line (\n) gesendet wurde -> Seite aufbauen
if (Zeichen == '\n') SeiteAufbauen = true;
else if (Zeichen != '\r') SeiteAufbauen = false;
delay(1);
Client.stop();
}
}
}
}
}
Server.on-Methode
#include "ESP8266WebServer.h"
// Router-SSID/Passwort anpassen
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxx";
ESP8266WebServer Server(80);
// LED beim Start ausgeschaltet
bool LEDStatus = false;
// statischeIP = false -> IP-Adresse über DHCP vergeben
// statischeIP = true -> statische IP festlegen
bool statischeIP = false;
// ip und gateway müssen an das lokale Netz angepasst werden
IPAddress ip(192, 168, 1, 100);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial);
delay(1000);
// WiFi starten
WiFi.begin(Router, Passwort);
// statische IP vergeben
if (statischeIP)
{
WiFi.config(ip, gateway, subnet);
Serial.print("Verbunden mit ");
Serial.println(Router);
// IP anzeigen
Serial.print("Statische IP: ");
}
// IP über DHCP ermitteln
else
{
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
Serial.print(".");
}
Serial.println();
Serial.print("Verbunden mit ");
Serial.println(Router);
Serial.print("IP über DHCP: ");
}
// IP anzeigen
Serial.println(WiFi.localIP());
// Webserver starten
// / -> Aufruf der URL, SeiteBauen -> Aufruf der Funktion
Server.begin();
Server.on("/", SeiteBauen);
// beim Aufruf der URL /LEDSchalten
// Funktion für die Schaltung der LED aufrufen
Server.on("/LEDSchalten", LEDSchalten);
}
void loop()
{
// auf Anfragen warten
Server.handleClient();
}
void SeiteBauen()
{
// Seite "zusammenbauen"
String Seite = "";
Seite += "<h1 align=\"left\">LED schalten</h1>";
// Link beim Anklicken des Buttons
// Aufruf der Funktion LEDSchalten
Seite += "<a href=\"/LEDSchalten\">";
// LED aus -> LEDStatus false -> gelber Hintergrund
if (LEDStatus) Seite += "<input style=\"background-color: blue;";
// LED an -> LEDStatus true -> weißer Hintergrund
else Seite += "<input style=\"background-color: white;";
Seite += " width:150px;height:150px; cursor:pointer;";
Seite += " border-radius:50%;border: 2px solid black;\"";
Seite += " type=\"button\">";
// Seite anzeigen
Server.send(200, "text/html", Seite);
}
void LEDSchalten()
{
// LEDStatus = false -> LED einschalten
// LOW -> einschalten
if (!LEDStatus) digitalWrite(LED_BUILTIN, LOW);
// LEDStatus = true -> LED ausschalten
// HIGH -> ausschalten
else digitalWrite(LED_BUILTIN, HIGH);
LEDStatus = !LEDStatus;
// Seite neu aufbauen
SeiteBauen();
}
Letzte Aktualisierung: