Programmierung des ESP8266-12E NodeMCU mit der Arduino IDE

Hier wird ein einfacher Echo-Server gezeigt. Als Server werkelt ein Java-Programm. Der ESP8266 arbeitet als Echo-Client. Das Programm dient zum Verständnis vom Senden und Empfangen über Java-Sockets bzw. auf ESP-Seite über die Klasse WiFiClient.

Für Neulinge lohnt es sich zunächst einen Blick auf folgende Seiten zu werfen:

Auf diesen Seiten lernt man, wie die Arduino-IDE für den ESP einzurichten ist, welche Spannungspegel zu beachten sind und außerdem wird ein kleines Blink- und Temperaturmess-Programm präsentiert.

 

Den Quelltext für das Client-Server-Programm finden Sie hier:

ESP8266-Echo-Client



#include <ESP8266WiFi.h>

const char* ssid = "deineSSID";
const char* password = "deinPW";
const char* host = "192.168.178.106"; //IP des Java-Servers
const int serverPort = 50000; //Port des Java-Servers (ServerSocket)

void setup() {
  Serial.begin(115200); //Kontrollausgabe aktivieren
  delay(800);

  Serial.println();
  Serial.print("Versuche Verbindung zum AP mit der SSID=");
  Serial.print(ssid);
  Serial.println(" herzustellen");
  
  WiFi.begin(ssid, password);

  /*Solange keine Verbindung zu einem AccessPoint (AP) aufgebaut wurde*/
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println();
  Serial.print("Verbunden mit IP ");
  Serial.println(WiFi.localIP());
  /*Signalstärke des AP*/
  long rssi = WiFi.RSSI();
  Serial.print("Signalstaerke(RSSI) des AP:");
  Serial.print(rssi);
  Serial.println(" dBm");
}


void loop() {

  WiFiClient client;
  
  if (!client.connect(host, serverPort)) {
    Serial.print("X");
    return;
  }
  
  Serial.println();
  Serial.print("Verbunden mit ");
  Serial.println(host);

  Serial.print("Nachricht an Java-Server senden: ");
  Serial.println("Nachricht vom ESP8266");
  client.println("Nachricht vom ESP8266");
  delay(100);

  /*Echo vom Java-Server lesen und ausgeben*/
  String line = client.readStringUntil('\n');
  Serial.print(line);

  Serial.println();
  /*Verbindung zum Java-Server schliessen*/
  Serial.println("Verbindung schliessen");
  client.flush();
  client.stop();
  Serial.println("Verbindung geschlossen"); 
}   

   
   
  

Java-Echo-Server


   
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class EchoServerESP8266 {

  public static void main(String[] args) throws IOException {
    System.out.println("Server wird gestartet!!!");
    
    ServerSocket einSS = new ServerSocket(50000);
    // Ein ArbeitsSocket erzeugen, wenn sich ein Client am Server meldet
    Socket einAS = einSS.accept();  
    BufferedReader vomClient = new BufferedReader(
                               new InputStreamReader(einAS.getInputStream()));
    BufferedWriter zumClient = new BufferedWriter(
                               new OutputStreamWriter(einAS.getOutputStream()));
    System.out.println("Client angemeldet!!!");
    String s;
    try {  
      while((s = vomClient.readLine())!= null){
        System.out.println("> " + s);
        zumClient.write("Echo vom Java-Server: " + s);
        zumClient.newLine();
        zumClient.flush();
      }
      
    } catch (Exception e) { }
    System.out.println("Client abgemeldet!!!");
    vomClient.close();
    einAS.close();
    einSS.close();
  }

}


    

Übungsaufgabe

Erstellen Sie auf der Serverseite einen Toggle-Button, über den Sie die interne LED des ESP8266 ein- bzw. ausschalten können. Nachfolgend finden Sie bereits eine Konsolenlösung. Beachten Sie die Unterschiede zum vorhergehenden Echo-Programm. Z.B. ist der WiFiClient jetzt global deklariert.