NodeMCU Server

Board: ESP8266
Hinzugefügt: 15. April 2025
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.