Inhaltsverzeichnis:

ESP8266 Direkte Datenkommunikation - Gunook
ESP8266 Direkte Datenkommunikation - Gunook

Video: ESP8266 Direkte Datenkommunikation - Gunook

Video: ESP8266 Direkte Datenkommunikation - Gunook
Video: Revolution Pi : Tutorial 20 - Modbus TCP Master 2024, November
Anonim
ESP8266 Direkte Datenkommunikation
ESP8266 Direkte Datenkommunikation

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

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
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: