NodeMCU Server
cpp
#include
#include
#include
// WLAN-Konfiguration für den Access Point
const char* ssid = "NodeMCU-Server"; // Name des WLAN-Netzwerks
const char* password = "12345678"; // Passwort des WLAN-Netzwerks (mind. 8 Zeichen)
// Server auf Port 80 erstellen
ESP8266WebServer server(80);
// Variablen für Sensordaten oder Status
int sensorValue = 0;
bool ledStatus = false;
const int ledPin = D4; // Integrierte LED des NodeMCU (D4 = GPIO2)
void setup() {
// Serielle Kommunikation starten
Serial.begin(115200);
Serial.println("\n\nNodeMCU Server startet...");
// LED-Pin konfigurieren
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH); // LED ist LOW-aktiv, daher HIGH = aus
// Access Point konfigurieren und starten
WiFi.softAP(ssid, password);
// IP-Adresse des Access Points anzeigen
IPAddress IP = WiFi.softAPIP();
Serial.print("AP IP-Adresse: ");
Serial.println(IP);
// Routen für die Webserver-Anfragen definieren
server.on("/", handleRoot);
server.on("/status", HTTP_GET, handleGetStatus);
server.on("/control", HTTP_POST, handleControl);
server.onNotFound(handleNotFound);
// Webserver starten
server.begin();
Serial.println("HTTP-Server gestartet");
}
void loop() {
// Auf Client-Anfragen horchen
server.handleClient();
// Sensordaten simulieren (durch Inkrementieren)
if (millis() % 5000 == 0) { // Alle 5 Sekunden aktualisieren
sensorValue = random(0, 1024); // Zufallswert zwischen 0 und 1023
Serial.print("Neuer Sensorwert: ");
Serial.println(sensorValue);
delay(1); // Verhindern, dass es mehrmals pro Millisekunde ausgeführt wird
}
}
// Handler für die Wurzel-Seite
void handleRoot() {
String html = "";
html += "NodeMCU Server";
html += "Dies ist der NodeMCU Server.";
html += "Aktueller Sensorwert: " + String(sensorValue) + "";
html += "LED-Status: " + String(ledStatus ? "AN" : "AUS") + "";
html += "";
server.send(200, "text/html", html);
}
// Handler für Status-Abfragen (gibt JSON zurück)
void handleGetStatus() {
// JSON-Dokument erstellen
StaticJsonDocument<200> doc;
doc["sensorValue"] = sensorValue;
doc["ledStatus"] = ledStatus;
// JSON in String umwandeln
String jsonString;
serializeJson(doc, jsonString);
// JSON an Client senden
server.send(200, "application/json", jsonString);
}
// Handler für Steuerungsanfragen
void handleControl() {
// Prüfen, ob der Parameter "led" in der Anfrage vorhanden ist
if (server.hasArg("led")) {
String ledValue = server.arg("led");
if (ledValue == "1" || ledValue == "on" || ledValue == "true") {
ledStatus = true;
digitalWrite(ledPin, LOW); // LED einschalten (LOW-aktiv)
Serial.println("LED eingeschaltet");
} else {
ledStatus = false;
digitalWrite(ledPin, HIGH); // LED ausschalten
Serial.println("LED ausgeschaltet");
}
// Erfolg zurückmelden
server.send(200, "text/plain", "LED-Status geändert: " + String(ledStatus ? "AN" : "AUS"));
} else {
// Fehler zurückmelden, wenn der Parameter fehlt
server.send(400, "text/plain", "Fehler: Parameter 'led' fehlt");
}
}
// Handler für nicht gefundene Seiten
void handleNotFound() {
server.send(404, "text/plain", "404: Nicht gefunden");
}
Informationen zum Code
Wofür ist dieser Code?
Dieser Code lässt einen NodeMCU als Server fungieren um mit einem zweiten NodeMCU (Client) zu Kommunizieren. Dieser Code ist Bestandteil eines Artikels um mehrere NodeMCU miteinander zu verbinden.