Kommunikation zwischen zwei ESP8266-Modulen

Dieses Handbuch zeigt Ihnen, wie Sie eine Verbindung zwischen zwei ESP8266-Geräten über TCP/IP über WLAN herstellen und Daten austauschen. Ein ESP8266 wird als TCP-Client fungieren, während der andere als TCP-Server agiert. Wir erläutern diesen Prozess anhand eines Beispiels:

Erforderliche Hardware

2×ESP8266 NodeMCU
2×Micro-USB-Kabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP8266
1×(Empfohlen) Stromverteiler für ESP8266 Typ-C

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Kommunikation zwischen zwei ESP8266 – Überblick

Betrachten wir ein konkretes Beispiel: ESP8266 Nr. 1 interagiert mit ESP8266 Nr. 2. Es gibt zahlreiche Möglichkeiten, die Kommunikation zwischen den beiden ESP8266 zu ermöglichen. Wir können eine davon je nach Reichweite der Kommunikation auswählen. Die untenstehende Tabelle zeigt einige Methoden und deren jeweilige Reichweite.

Methods Range
I2C very short
SPI very short
UART (TTL) very short
UART (RS-232/485/422) short
Bluetooth short
LoRa long
Ethernet/WiFi unlimited(*)

※ Notiz:

  • Wenn zwei ESP8266 mit dem Internet verbunden sind, ist die Reichweite der Kommunikation uneingeschränkt.
  • Wenn zwei ESP8266 jedoch nicht mit dem Internet verbunden sind, sondern im selben LAN-Netzwerk verbunden sind, ist ihre Kommunikationsreichweite auf dieses lokale Netzwerk beschränkt.

Unter den oben genannten Methoden verwendet dieses Tutorial WiFi, um die Kommunikation zwischen zwei ESP8266 zu ermöglichen, da es eine uneingeschränkte Reichweite der Kommunikation bietet.

Kommunikation zwischen zwei ESP8266 über lokales LAN oder Internet

Zwei ESP8266 können über WLAN miteinander kommunizieren, wenn:

  • Sie befinden sich im selben lokalen Netzwerk (LAN) und eine Internetverbindung ist nicht erforderlich.
  • Sie befinden sich in verschiedenen LANs und eine Internetverbindung ist erforderlich.

Ganz gleich, ob zwei ESP8266 über ein lokales Netzwerk oder über das Internet verbunden sind, gibt es zwei Kommunikationswege:

Wenn es um direkte Kommunikation geht, ist in der Regel ein ESP8266 der TCP-Client und der andere der TCP-Server.

Im Fall der Nutzung eines zentralen Servers für die Kommunikation agieren typischerweise beide ESP8266 als TCP-Clients.

Bei der Festlegung eines Anwendungsprotokolls für die Kommunikation zwischen zwei ESP8266-Modulen haben wir mehrere Optionen zur Auswahl:

  • Selbst definiertes Protokoll über rohes TCP
  • Modbus TCP
  • HTTP
  • Telnet
  • SSH
  • MQTT (das einen zentralen Server erfordert)

Beispielanwendung

Lassen wir das folgende Programm Wirklichkeit werden: Ein an ESP8266 #1 angeschlossener Knopf oder Schalter wird verwendet, um eine LED, die mit ESP8266 #2 verbunden ist, über WiFi ein- und auszuschalten.

Kommunikation zwischen zwei ESP8266 NodeMCU-Modulen

Wie bereits erwähnt, gibt es einige Anwendungsprotokolle. Um dieses Beispiel zu vereinfachen, werden wir unser eigenes Protokoll erstellen (ein selbst definiertes Protokoll).

Selbstdefiniertes Protokoll

Lassen Sie uns ein einfaches Protokoll aufsetzen:

  • Eine TCP-Verbindung zwischen ESP8266 #1 und ESP8266 #2 herstellen.
  • ESP8266 #1:
    • Verhalte dich als TCP-Client und initiiere die TCP-Verbindung zu ESP8266 #2.
    • Wenn der Schalter auf AN gestellt wird, sende ein Byte (Befehl) mit dem Wert 1 an ESP8266 #2.
    • Wenn der Schalter auf AUS gestellt wird, sende ein Byte (Befehl) mit dem Wert 0 an ESP8266 #2.
  • ESP8266 #2:
    • Als TCP-Server fungieren und Verbindungsanfragen von ESP8266 #1 entgegennehmen.
    • Wenn das empfangene Byte 1 ist, schalte die LED ein.
    • Wenn das empfangene Byte 0 ist, schalte die LED aus.

    Schaltplan

    • ESP8266 #1 - Verdrahtungsdiagramm zwischen ESP8266 und Taster
    ESP8266 NodeMCU-Taster-Verdrahtungsdiagramm

    Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

    Weitere Informationen finden Sie unter ESP8266-Pinbelegung und wie man ESP8266 und andere Komponenten mit Strom versorgt.

    • ESP8266 Nr. 2 - Schaltplan zwischen ESP8266 und LED
    ESP8266 NodeMCU LED-Schaltplan

    Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

    ESP8266-Code für ESP8266 Nr. 1

    /* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp8266/communication-between-two-esp8266 */ #include <ezButton.h> #include <ESP8266WiFi.h> #define BUTTON_PIN D7 // The ESP8266 pin connected to button #define SERVER_IP "192.168.0.180" #define SERVER_PORT 4080 ezButton button(BUTTON_PIN); // create ezButton attached to pin D7 const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD WiFiClient TCPclient; void setup() { Serial.begin(9600); button.setDebounceTime(50); // set debounce time to 50 milliseconds Serial.println("ESP8266 #1: TCP CLIENT + A BUTTON/SWITCH"); // Connect to WiFi WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); // Connect to TCP server (ESP8266 #2) if (TCPclient.connect(SERVER_IP, SERVER_PORT)) Serial.println("ESP8266 #1: Connected to TCP server"); else Serial.println("ESP8266 #1: Failed to connect to TCP server"); } void loop() { button.loop(); // MUST call the loop() function first if (!TCPclient.connected()) { Serial.println("ESP8266 #1: Connection is disconnected"); TCPclient.stop(); // Reconnect to TCP server (ESP8266 #2) if (TCPclient.connect(SERVER_IP, SERVER_PORT)) Serial.println("ESP8266 #1: Reconnected to TCP server"); else Serial.println("ESP8266 #1: Failed to reconnect to TCP server"); } if (button.isPressed()) { TCPclient.write('1'); TCPclient.flush(); Serial.println("ESP8266 #1: - The button is pressed, sent command: 1"); } if (button.isReleased()) { TCPclient.write('0'); TCPclient.flush(); Serial.println("ESP8266 #1: - The button is released, sent command: 0"); } }

    ESP8266-Code für ESP8266 #2

    /* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp8266/communication-between-two-esp8266 */ #include <ESP8266WiFi.h> #define LED_PIN D6 // The ESP8266 pin connected to LED #define SERVER_PORT 4080 const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD WiFiServer TCPserver(SERVER_PORT); void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); Serial.println("ESP8266 #2: TCP SERVER + AN LED"); // Connect to Wi-Fi WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); // Start the TCP server TCPserver.begin(); } void loop() { // Check if a client has connected WiFiClient client = TCPserver.available(); if (client) { // Read the command from the TCP client char command = client.read(); Serial.print("ESP8266 #2: - Received command: "); Serial.println(command); if (command == '1') digitalWrite(LED_PIN, HIGH); // Turn LED on else if (command == '0') digitalWrite(LED_PIN, LOW); // Turn LED off client.stop(); // Close the connection } }

    Schnelle Schritte

    Um mit dem ESP8266 in der Arduino-IDE zu beginnen, befolgen Sie diese Schritte:

    • Schauen Sie sich das Tutorial zur Einrichtung der Umgebung für ESP8266 in der Arduino IDE an, wenn Sie ESP8266 zum ersten Mal verwenden.
    • Verbinden Sie die Komponenten wie im Diagramm gezeigt.
    • Schließen Sie zwei ESP8266-Boards mit einem USB-Kabel an Ihren Computer an.
    • Öffnen Sie die Arduino IDE (genannt Arduino IDE #1).
    • Öffnen Sie die Arduino IDE (genannt Arduino IDE #2).
    • Wählen Sie das richtige ESP8266-Board aus, z. B. NodeMCU 1.0 (ESP-12E-Modul), und den entsprechenden COM-Port.
    • Installieren Sie die ezButton-Bibliothek in der Arduino IDE.
    • Kopieren Sie den ESP8266-1-Code, fügen Sie ihn in die Arduino IDE #1 ein und speichern Sie ihn (unter dem Namen ESP8266-1).
    • Kopieren Sie den ESP8266-2-Code, fügen Sie ihn in die Arduino IDE #2 ein und speichern Sie ihn (unter dem Namen ESP8266-2).
    • Laden Sie zunächst den ESP8266-2-Code auf ESP8266-2 hoch.
    • Öffnen Sie den Seriellen Monitor in der Arduino IDE #2 und ermitteln Sie die TCP-Server-IP-Adresse.
    COM6
    Send
    ARDUINO #2: TCP SERVER + AN LED TCP Server IP address: 192.168.0.2 -> Please update the serverAddress in ESP8266 #1 code
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  
    • Ändere die TCP-Server-IP-Adresse im Code von ESP8266 #1.
    • Lade den ESP8266 #1-Code auf den ESP8266 #1 hoch.
    • Öffne den Serial Monitor in der Arduino-IDE #1.
    • Drücke den Knopf auf dem ESP8266 #1, halte ihn gedrückt und beobachte den Zustand der LED auf dem ESP8266 #2 (sie sollte AN sein).
    • Lass den Knopf am ESP8266 #1 los und beobachte den Zustand der LED am ESP8266 #2 (sie sollte AUS sein).
    • Drücke den Knopf, halte ihn gedrückt und lasse ihn mehrmals los.
    • Überprüfe die Ausgabe im Serial Monitor #1:
    COM6
    Send
    ARDUINO #1: TCP CLIENT + A BUTTON/SWITCH Connected to TCP server ESP8266 #1: - The button is pressed, sent command: 1 ESP8266 #1: - The button is released, sent command: 0 ESP8266 #1: - The button is pressed, sent command: 1 ESP8266 #1: - The button is released, sent command: 0
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  
    • Überprüfen Sie die Ausgabe im Serial Monitor Nr. 2:
    COM6
    Send
    ARDUINO #2: TCP SERVER + AN LED TCP Server IP address: 192.168.0.2 -> Please update the serverAddress in ESP8266 #1 code ESP8266 #2: - Received command: 1 ESP8266 #2: - Received command: 0 ESP8266 #2: - Received command: 1 ESP8266 #2: - Received command: 0 ESP8266 #2: - Received command: 1 ESP8266 #2: - Received command: 0
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

Wie man zwei ESP8266 über das Internet verbindet

Es gibt zwei Arten von IP-Adressen: privat und öffentlich. Die im Heimnetzwerk üblicherweise verwendete IP-Adresse ist privat.

Es ist einfach, eine private IP-Adresse zu erkennen. Es gibt drei Formate privater IP-Adressen: 10.x.x.x, 172.16.x.x, 192.168.x.x

Es ist nicht wichtig, die private IP-Adresse in den folgenden Szenarien zu verwenden:

  • Wenn zwei ESP8266 sich im selben lokalen Netzwerk befinden, unabhängig davon, ob sie direkt kommunizieren oder über einen zentralen Server, und unabhängig davon, ob das LAN mit dem Internet verbunden ist oder nicht.
  • Wenn zwei ESP8266 sich in unterschiedlichen lokalen Netzwerken befinden und über einen zentralen Server miteinander kommunizieren.

Im Falle zweier ESP8266, die sich in unterschiedlichen LAN-Netzen befinden und direkt miteinander kommunizieren, kann der ESP8266 TCP-Client eine private IP-Adresse verwenden. Der ESP8266 TCP-Server muss jedoch entweder:

  • Eine öffentliche IP-Adresse
  • Eine private IP-Adresse mit Portweiterleitung am Router oder Zugangspunkt

Die Technik der Portweiterleitung variiert je nach Router bzw. Access Point. Dieses Tutorial behandelt dieses Thema nicht.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!