Inhaltsverzeichnis:
Video: ESP8266 Direkte Datenkommunikation - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:20
Einführung
Nachdem ich einige Projekte mit Arduinos und nRF24l01-Modulen durchgeführt hatte, fragte ich mich, ob ich mir durch die Verwendung eines ESP8266-Moduls etwas Mühe sparen könnte. Der Vorteil des ESP8266-Moduls besteht darin, dass es einen Mikrocontroller an Bord enthält, sodass kein zusätzliches Arduino-Board benötigt wird. Außerdem ist die Speichergröße des ESP8266 viel größer und in Bezug auf die Geschwindigkeit läuft der ESP8266 mit maximal 160MHz anstelle der 16MHz des Arduino. Natürlich gibt es einige negative Seiten.
Der ESP8266 läuft nur mit 3,3 V, hat weniger Pins und es fehlen die schönen analogen Eingänge des Arduino (er hat einen, aber nur für 1,0 V und nicht für 3,3 V). Darüber hinaus gibt es für den Arduino + nRF24l01 viele weitere Codebeispiele als für den ESP8266, insbesondere wenn es um die direkte Datenübertragung geht.
Mit einem Projekt im Hinterkopf habe ich mich also mit dem Thema der schnellen und leichten Datenübertragung zwischen zwei ESP8266 ohne all das WWW- und HTTP-Zeug beschäftigt.
Bei der Suche im Internet nach Beispielen (der größte Teil des folgenden Codes wurde an verschiedenen Stellen aus dem Netz geholt) stieß ich auf viele Fragen, wie man eine direkte Datenübertragung ohne die netten "mach es so"-Beispiele implementieren kann. Es gab einige Beispielcodes, aber meistens mit der Frage, warum es nicht funktionierte.
Nach einigem Lesen und Verstehen habe ich die folgenden Beispiele erstellt, die eine schnelle und einfache Übertragung von Daten zwischen zwei ESP8266 ermöglichen.
Schritt 1: Grenzen und Hintergründe (TCP vs. UDP)
Um dorthin zu gelangen, müssen im Vergleich zum nRF24l01 einige Grenzen geklärt werden.
Um den ESP8266 in der Arduino-Umgebung zu verwenden, ist die zu verwendende Basisbibliothek die ESP8266WiFi.h. Die mögen unterschiedlich sein, aber die meisten Beispiele verwenden die erwähnten auf. Wenn Sie dies verwenden, müssen Sie Ihre Kommunikation auf WiFi-Niveau bringen.
Um zu kommunizieren, muss es also mindestens einen Access Point (AP) / Server und einen Client geben. Der AP liefert den Namen des Netzwerks und die IP-Adressen und der Client verbindet sich mit diesem Server.
Im Vergleich zum nRF24l01, wo der Code an beiden Enden mehr oder weniger gleich ist (bis auf die Übertragungskanäle), ist der Code des ESP8266 grundlegend anders, da einer als AP und der andere als Client konfiguriert ist.
Das nächste Thema ist, dass anstatt nur einige Bytes an den nRF24l01 zu senden, für den ESP8266 Übertragungsprotokolle beachtet werden müssen.
Es gibt zwei häufig verwendete Protokolle: TCP und UDP.
Das TCP (Transmission Control Protocol) ist ein Protokoll, das eine verlustfreie Übertragung zwischen einem Server und einem Client ermöglicht. Das Protokoll beinhaltet „Handshakes“(viele Flags und Bestätigungen, die zwischen beiden Parteien gesendet werden) und Paketnummerierung und Erkennung, um verlorene Pakete zu identifizieren und erneut zu übertragen. Darüber hinaus verhindert das Protokoll durch die Verwendung all dieser Handshakes, dass Daten verloren gehen, weil viele Pakete gleichzeitig im Netzwerk gesendet werden. Datenpakete warten, bis sie empfangen werden können.
Dem UDP (User Datagram Protocol) fehlen alle Handshakes, Paketnummerierung und Neuübertragung. Der Overhead ist daher geringer und es sind nicht alle Handshakes erforderlich, um eine Verbindung aufrechtzuerhalten. UDP enthält einige grundlegende Fehlererkennung, aber keine Korrektur (das beschädigte Paket wird einfach gelöscht). Daten werden gesendet, ohne zu wissen, ob es dem Empfänger freisteht, die Daten zu empfangen. Gleichzeitig können mehrere Pakete kollidieren, da jeder Teilnehmer die Daten sendet, wann immer er benötigt wird. Durch das Weglassen aller Handshakes gibt es eine zusätzliche nette Funktion von UDP namens „Multicast“und „Broadcast“. Im Fall „Multicast“werden Datenpakete an eine vordefinierte Gruppe von Mitgliedern gesendet, im Fall „Broadcast“werden Datenpakete an alle angeschlossenen Mitglieder gesendet. Dadurch wird die Datenübertragung bei Streams, die von mehreren Teilnehmern zu empfangen sind, erheblich reduziert (z. B. durch Senden eines Video-Feeds an mehrere Empfänger oder durch Senden der aktuellen Uhrzeit an mehrere angeschlossene Geräte).
Es gibt einige gute Videos auf Youtube, die es noch besser erklären.
Beim Versenden von Daten ist es daher wichtig, Ihre Bedürfnisse zu kennen:
- unverfälschte Daten, Verwaltung mehrerer Peers durch Handshakes → TCP
- Echtzeitdaten, schnelle Verbindung → UDP
Ich begann zunächst mit der Implementierung einer TCP-basierten Kommunikation (zwischen einem Server und einem Client). Beim Testen hatte ich Probleme mit der Übertragung. Am Anfang wurden die Daten schnell ausgetauscht, dann ging die Geschwindigkeit nach einiger Zeit dramatisch zurück. Ich kam zu dem Schluss, dass dies ein typisches Problem des TCP-Ansatzes war (was falsch war!), und wechselte dann zu einer auf UDP basierenden Lösung. Endlich habe ich beides an die Arbeit herangeführt. Es werden also beide Lösungen bereitgestellt.
Die folgenden Skizzen haben für TCP und UDP gemeinsam, dass sie:
- sind unabhängig von einem bestehenden WiFi-Netzwerk. Es funktioniert also überall weit weg vom Internet und verbundenen Routern.
- senden ASCII-Daten zum Drucken über den seriellen Monitor.
- senden Daten, die von der millis()-Funktion erhalten wurden, um die Geschwindigkeit der Übertragung zu analysieren.
- werden nicht für mehrere Clients getestet (da die Hardware zum Einrichten des Netzwerks gerade vorhanden ist)
Schritt 2: Hardware
Um das gesamte Setup zu testen, habe ich zwei ESP8266-Module verwendet. Ein Modul ist ein ESP-01 + USB-zu-UART-Adapter. Das andere Modul ist ein ESP-12-basiertes Modul, das den USB-Anschluss, den Spannungsregler und einige lustige Dinge wie Schalter, LDR und mehrfarbige LED enthält.
Das USB-to-UART-Modul für das ESP-01 musste ein wenig modifiziert werden, um es als Programmierer verwenden zu können (wieder Youtube von Csongor Varga).
Um die Sketche ausführen zu können, müssen Sie die ESP8266-Bibliotheken installieren (wie an vielen Stellen im Internet beschrieben). In beiden Fällen (TCP und UDP) gibt es jeweils eine Server- und Clientskizze. Welcher Sketch in welches Modul geladen wird, spielt keine Rolle.
Danksagung
Wie bereits erwähnt, basieren die Skizzen auf vielen Kleinigkeiten, die ich im Internet gefunden habe. Ich weiß nicht mehr, wo ich was gefunden habe und was Originalcode ist oder was ich geändert habe. Also wollte ich der großen Community im Allgemeinen für die Veröffentlichung all der großartigen Beispiele danken.
Schritt 3: Die Skizzen
Der Code besteht aus jeweils zwei Sketches (wie erklärt), einem Server-Sketch und einem Client-Sketch, jeweils für TCP und UDP.
Empfohlen:
2020 ESP8266: 3 Schritte
2020 ESP8266: Also schrieb dieser Lazy Old Geek (LOG) einige Instructables auf ESP8266-Modulen: https://www.instructables.com/id/ESP8266-as-Arduin … https://www.instructables.com/id/ ESP8266-as-Arduin … Ich habe noch mehrere ESP-01s und ESP-03s und habe versucht, sie zum Wo
ESP8266 - Tür- und Fenstersensoren - ESP8266. Hilfe für ältere Menschen (Vergesslichkeit): 5 Schritte
ESP8266 - Tür- und Fenstersensoren - ESP8266. Hilfe für ältere Menschen (Vergesslichkeit): ESP8266 - Tür- / Fenstersensoren mit GPIO 0 und GPIO 2 (IOT). Es kann im Web oder im lokalen Netzwerk mit Browsern angezeigt werden. Auch sichtbar über die "HelpIdoso Vxapp" Anwendung. Verwendet eine 110/220 VAC-Versorgung für 5 VDC, 1 Relais / Spannung
Sauerteigsensor (ESP8266): 4 Schritte
Sauerteigsensor (ESP8266): Ich bin immer noch da draußen, um zu versuchen, die Fermentation meines Sauerteigstarters zu messen und wollte diese Lösung mit einem Sharp-Sensor ausprobieren. Der Sensor misst den Abstand zur Oberfläche der Zubereitung. Je höher es geht, desto fermentierter ist der p
ESP8266 mit Thingspeak und DHT11 Tutorial - Webserver: 7 Schritte
ESP8266 mit Thingspeak und DHT11 Tutorial | Webserver: Hey, was ist los, Leute! Akarsh hier von CETech. Dieses Projekt von mir ist eher eine Lernkurve, um die Thingspeak-Plattform zusammen mit der Idee von MQTT zu verstehen und dann Thingspeak mit einem ESP8266 zu verwenden. Gegen Ende des Artikels werden wir co
ESP8266 Netzwerkuhr ohne RTC - Nodemcu NTP-Uhr Keine RTC - INTERNET-UHR-PROJEKT: 4 Schritte
ESP8266 Netzwerkuhr ohne RTC | Nodemcu NTP-Uhr Keine RTC | INTERNET-UHRPROJEKT: Im Projekt wird ein Uhrenprojekt ohne RTC erstellt, es wird Zeit vom Internet über WLAN benötigt und auf dem st7735-Display angezeigt