Hallo, ich habe mehrere ESP01S im Einsatz und möchte eine Erweiterung einführen, bin aber nicht sicher ob das funktioniert. Bisher betreibe ich die WiFi Module einfach via TCP Server(CIPSERVER). Das alles via AT+ Kommandos mit kleinen MSP430. Klappt soweit einwandfrei. Mittlerweile habe ich im lokalen Netzwerk mehrere Geräte die sich mittels Multicast miteinander unterhalten. Es wäre schön, wenn ich mit den ESP01S einige dieser Datensätze mit verwenden könnte. Bin quasi Neuling mit dem ESP01S und habe jetzt folgende Frage: könnte der ESP01S meinen TCP Server bedienen wie bis jetzt, aber gleichzeitig auf einem anderen Port UDP Multicast Message mitlesen? Danke für sachdienliche Hinweise.
Auf dem ESP01S Modul sitzt ein ESP8266. Also gib mal bei Google "ESP8266 UDP Example" ein. Bot N. schrieb: > Bisher betreibe ich die WiFi Module einfach via TCP Server(CIPSERVER). > Das alles via AT+ Kommandos mit kleinen MSP430. Klappt soweit > einwandfrei. Schmeiß den MSP430 raus und programmiere den ESP direkt.
Zeig mir mal bei Google wo man da was über Multicast beim ESP8266 mit AT-Kommandos findet, was funktioniert!!! Ich werde nicht auf den MSP430 verzichten , da ich so viel HW und SW dazu habe die für mich ideal arbeitet!
:
Bearbeitet durch User
Bot N. schrieb: > Zeig mir mal bei Google wo man da was über Multicast beim > ESP8266 mit AT-Kommandos findet, was funktioniert!!! Ich weiß nicht, ob es funktioniert, aber es kommt vom Controller-Hersteller: https://www.espressif.com/sites/default/files/4b-esp8266_at_command_examples_en_v1.3.pdf
:
Bearbeitet durch User
Rahul D. schrieb: > Bot N. schrieb: >> Zeig mir mal bei Google wo man da was über Multicast beim >> ESP8266 mit AT-Kommandos findet, was funktioniert!!! > > Ich weiß nicht, ob es funktioniert, aber es kommt vom > Controller-Hersteller: > https://www.espressif.com/sites/default/files/4b-esp8266_at_command_examples_en_v1.3.pdf Rahul, in dem von dir verlinkten Espressiv-Dokument ist UDP Multicast allerdings nicht erwähnt ... LG, Sebastian
Sebastian W. schrieb: > Rahul, in dem von dir verlinkten Espressiv-Dokument ist UDP Multicast > allerdings nicht erwähnt ... Multicast ist doch nichts anderes als ein Broadcast in die eine Richtung und eine Peer-to-peer in die andere.
Danke für die Rückmeldungen. Wenn es so einfach wäre. Die Dokumente kenne ich alle. Bin kein Experte aber meine Experimente mit dem ESP01S zeigen, dass einfaches UDP sicher kein Problem ist, aber Multicast scheint anscheinend doch etwas komplizierter zu sein. Im Moment suche ich nach einer Möglichkeit "to Join the Multicast group" mit AT Commandos meiner AT-FW (1.7.5) zu bewerkstelligen. Irgendwie muss man wohl eine IGMPv2 "Membership report message" schicken um an der Multicast Gruppe teilzunehmen.
:
Bearbeitet durch User
Bot N. schrieb: > Irgendwie muss > man wohl eine IGMPv2 "Membership report message" schicken > um an der Multicast Gruppe teilzunehmen. Ich bin ebenfalls kein kein großartiger Experte auf diesem Gebiet, aber so wie ich Multicast bisher verstanden habe, ist die "Membership report message" nur für die Router auf dem Wege bis zu den Sendern wichtig, damit sie die Pakete weiterleiten und nicht verwerfen. Die Sender von Multicastmessages haben ja keine Ahnung davon, wer alles diese Pakete empfängt, die senden blind an eine Port/Class-D-Adress-Kombi. Da aber die Teilnehmer alle innerhalb Deines Subnetzes liegen und kein Router durchquert werden muß, braucht es m.M.n diese Anmeldung nicht. Es muß lediglich ein UDP-Socket auf dem benutzten Port und der benutzten Class-D-Adresse aufgemacht werden. Dafür gibt es wohl auch Protokolle, aber ein wiresharc-mitschnitt sollte die ebenso sichtbar machen. (Mein Stand des Wissens ohne jede Garantie) Gruß Klaus (der soundsovielte)
Danke für den Hinweis, dann brauche ich in diese Richtung nicht weiter zu suchen. Hatte nur in Wireshark besagte Message gelegentlich von meinem PC als Sender gesehen. Irgendwie klappt es aber nicht mit dem passenden Setup beim ESP01S. Irgendwie sehe ich schon was multicastmäßiges, aber das ist eben nur eine Teil dessen was man sehen müsste. Da gibt auch für mich Wireshark nicht viel mehr her. Vermute immer mehr, dass die AT-FW das doch nicht unterstützt. Werde mich mal bei AI-Thinker erkundigen.
Als ich vor ein paar Jahren Multicast probiert habe ging es auf dem ESP8266 nicht. Weder mit der AT Firmware noch mit Arduino. Inzwischen gibt es jedoch einige Arduino Beispiel Sketche im Netz, die angeblich funktionieren. Vielleicht musst du dich von der AT Firmware lösen oder zu einem ESP32 wechseln.
:
Bearbeitet durch User
Stefan F. schrieb: > Als ich vor ein paar Jahren Multicast probiert habe ging es auf dem > ESP8266 nicht. Weder mit der AT Firmware noch mit Arduino. Das wäre wirklich schade! Will aber im Moment noch nicht aufgeben. Zumal ich vielleicht nahe dran bin. Die Multicast Message die ich beim ESP01S sehe,ist die gleiche die ich auch in Wireshark sehe, bevor ich am PC ein bestimmtest Programm starte. Danach sind in Wireshark alle gewünschten Messages sichtbar. Also muss beim ESP8266 noch irgend was fehlen, denke ich. Stefan F. schrieb: > Vielleicht musst du dich von der AT Firmware lösen oder zu einem ESP32 > wechseln. Müsste ich dann wohl, aber ungern!!
:
Bearbeitet durch User
Bot N. schrieb: > Will aber im Moment noch nicht aufgeben. Dann mach doch eine eigene Firmware für den ESP, die nur die Kommunikation macht, und vorverarbeitet an den MSP weiterleitet. Dann hast du auf dem ESP alle Freiheiten bzgl. TCP, UDP, Multicast, kannst evtl. auch noch HTTP oder Modbus/UDP dahin auslagern, aber behältst die eigentliche Logik im MSP. Protokoll zwischen ESP und MSP kannst du dann frei wählen, entweder an das AT-Kommand-Set angelehnt oder was eigenes, für den Anwendungsfall effizienteres...
Bot N. schrieb: > Zumal ich vielleicht nahe > dran bin. Interessant. Einmal das Thema UDP Multicast auf dem ESP8266, und darüber hinaus das Thema UDP Multicast auf WiFi. Denn du wirst js zwischen PC und ESP01S noch einen AP haben, oder? Und die haben so ihre eigenen Schwierigkeiten mit echtem Multicast über Funk. Zum Beispiel, mit welcher Rate sie senden sollen ... LG, Sebastian
Sebastian W. schrieb: > Interessant. Einmal das Thema UDP Multicast auf dem ESP8266, und darüber > hinaus das Thema UDP Multicast auf WiFi. Denn du wirst js zwischen PC > und ESP01S noch einen AP haben, oder? Und die haben so ihre eigenen > Schwierigkeiten mit echtem Multicast über Funk Bin nicht sicher ob ich verstehe was damit gemeint ist. Grundsätzlich muss MUlticast mit dem ESP funktionieren, zumindest nach AT-Command Doku: "If the remote host over the UDP is an IPv4 multicast address (224.0.0.0 ~ 239.255.255.255), the ESP device will send and receive the UDPv4 multicast." Kann aber sein, dass meine AT-FW etwas anders draus macht! Meine Idee ist, Multicast Messages von Geräten in meinem Netzwerk (SMA Wechslerichter, SMA HomeManager, SMA-Energy Meter) nur mithören und nur bestimmte Daten daraus für eigene Zwecke zu verwerten. Selber "reden" möchte ich nicht. Es hat mit dem PC eigentlich nichts zu tun. Der fungiert im Moment nur als Wireshark Host zum Verfolgen des ETH Datenstroms und gleichzeitig ist da mittels USB-Adapter der ESP01S angeschlossen via Terminalprogram.
:
Bearbeitet durch User
Bot N. schrieb: > Grundsätzlich muss MUlticast mit dem ESP funktionieren, zumindest nach > AT-Command Doku: Bist du sicher dass du diese Version der Firmware verwendest? Die AT Firmware vom ESP8266 wird (soweit ich das sehen kann) seit 2020 nicht mehr weiter entwickelt! Aktuelle Version vom ESP32 ist 3.2, währen der ESP8266 bei 2.2 hängen geblieben ist. https://docs.espressif.com/projects/esp-at/en/latest/esp32/index.html Links oben kannst du die Version der Doku auswählen. Die 1.7.5 steht dort leider nicht zur Verfügung. Im oben verlinkten Dokument von Version 1.3 steht jedenfalls nichts von multicast.
:
Bearbeitet durch User
Stefan F. schrieb: > Bist du sicher dass du diese Version der Firmware verwendest? Sicher bin ich mir nicht, denn soweit ich das gesehen habe gibt es eigene Versionen für den ESP01S (auch älter). In der Doku sehe ich aber keinen Unterschied was Multicast betrifft zu der die ich als gültig für mich erachte. Die entsprechenden AT Kommandos werden auch vom Modul akzeptiert. Allein das Ergebnis gefällt mir nicht. Ich warte jetzt mal ab was AI-Thinker sagt.
Gemäß https://www.sigmdel.ca/michel/ha/esp8266/ESP01_AT_Firmware_en.html ist das die Doku die am ehesten zur Version 1.7.5 passt: https://www.espressif.com/sites/default/files/documentation/4a-esp8266_at_instruction_set_en.pdf Da steht nichts von multicast. Die Version 2.2 kann es angeblich lässt sich aber nicht erfolgreich installieren/ausführen.
:
Bearbeitet durch User
Bot N. schrieb: > Ich warte jetzt mal ab was AI-Thinker sagt. Dafür ist es zu spät. Du hast ihre Produkte schon bezahlt, alles andere ist denen egal. (ist meine Erfahrung mit chinesischen Marken)
Bot N. schrieb: > Meine Idee ist, Multicast Messages von Geräten in meinem Netzwerk > (SMA Wechslerichter, SMA HomeManager, SMA-Energy Meter) nur mithören > und nur bestimmte Daten daraus für eigene Zwecke zu verwerten Sowas in der Art dachte ich mir schon. Funktioniert am PC problemlos, müsste ich mit dem ESP mal ausprobieren... am PC in etwa: (nodejs)
1 | const dgram =require('node:dgram'); |
2 | |
3 | const server = dgram.createSocket({ type: 'udp4', reuseAddr: true }); |
4 | |
5 | server.bind(9522,"239.12.255.254"); |
6 | |
7 | server.addMembership("239.12.255.254"); |
8 | |
9 | server.on('message', (msg, rinfo) => {... |
Falls du Beispiel-Code zum Parsen Speedwire (EnergyMeter) -> OBIS-Kennzahlen brauchst, hab ich auch noch rumfliegen, aber ebenfalls NodeJS. Ist aber auch kein Hexenwerk.
:
Bearbeitet durch User
So, am ESP32 ausprobiert (lag grad am Tisch): Klappt problemlos, der kriegt die Broadcasts vom SMA-EM.
1 | void setup() { |
2 | Serial.begin(115200); |
3 | Serial.println(""); |
4 | |
5 | initWiFi(); |
6 | |
7 | Udp.begin(multicastPort); |
8 | Udp.beginMulticast(multicastIP, multicastPort); |
9 | }
|
10 | |
11 | void loop() { |
12 | uint8_t buffer[1024]; |
13 | int packetSize = Udp.parsePacket(); |
14 | if (packetSize){ |
15 | Serial.print("RECEIVED: "); |
16 | Serial.print(packetSize); |
17 | Serial.println(" bytes"); |
18 | int rSize=Udp.read(buffer,1024); |
19 | if (rSize != 600) { |
20 | Serial.println("Not an SMA packet?"); |
21 | return; |
22 | }
|
23 | Serial.print("First 3 Bytes: "); |
24 | Serial.println(String(buffer,3)); |
25 | } else { |
26 | delay(1000); |
27 | Serial.println("."); |
28 | }
|
29 | }
|
Ausgabe auf der Seriellen:
1 | RECEIVED: 600 bytes |
2 | First 3 Bytes: SMA |
Ich kompilier das gleich nochmal für ESP8266. Nachtrag: Läuft am ESP8266 genauso, kleine Code-Änderung:
1 | #ifdef ESP8266
|
2 | Udp.beginMulticast(WiFi.localIP(), multicastIP, multicastPort); |
3 | #else
|
4 | Udp.beginMulticast(multicastIP, multicastPort); |
5 | #endif
|
und es gibt dort scheinbar keinen String-Konstruktor von Char* und Länge... d.H. dort das Speedwire-Parsen ergänzen, und schon kriegt dein MSP auf der seriellen z.B. schön vorbereitete und leicht zu verabeitende Datenhäppchen "<OBIS-Kennziffer>=<Wert>\n"
:
Bearbeitet durch User
Εrnst B. schrieb: > Läuft am ESP8266 genauso Gut zu wissen. Thumbs up, Ernst! LG, Sebastian PS: Über was für einen AP läuft das bei dir?
:
Bearbeitet durch User
Rahul D. schrieb: > Multicast ist doch nichts anderes als ein Broadcast in die eine Richtung > und eine Peer-to-peer in die andere. Wenn du das denkst, solltest du dich mal über IGMP snooping und Multicast groups informieren: https://en.wikipedia.org/wiki/IGMP_snooping Michael
:
Bearbeitet durch User
> Bot N. schrieb: >> Irgendwie muss >> man wohl eine IGMPv2 "Membership report message" schicken >> um an der Multicast Gruppe teilzunehmen. Korrekt. Klaus S. schrieb: > Da aber die Teilnehmer alle innerhalb Deines Subnetzes liegen und kein Router > durchquert werden muß, braucht es m.M.n diese Anmeldung nicht. Das stimmt nicht, selbst ein Switch muss die UDP Pakete für die Multicast Group Membership auswerten (IGMP snooping). Das klingt erstmal strange, da ein Switch normalerweise nur auf Layer 2 arbeitet, aber wenn es um Performance und Resource usage geht, dann wird das Layering eben manchmal durchbrochen. Michael
:
Bearbeitet durch User
Sebastian W. schrieb: > PS: Über was für einen AP läuft das bei dir? Der Stromzähler (im Keller) über Wlan an einem AmpliFi-Repeater (Consumer-Marke von Ubiquiti), Switch, langes Kabel, TP-Link-Router mit OpenWRT am Arbeitsplatz, dem ich auf die Schnelle noch eine SSID für das VLan gegeben habe an dem auch der AP im Keller hängt. Wenn bei dir Stromzähler und ESP im selben Wlan hängen, darauf achten dass da keine "Client Isolation" konfiguriert ist. Wenn der Stromzähler per LAN-Kabel dran hängt, ist das natürlich egal. Nachtrag, wg. dem IGMP-Snooping Hinweis: Der Switch ist auch nix besonderes, nicht managebar, irgendein Plaste-Consumer-Krempel eben. Ob der das macht oder nicht, kann ich nicht sagen.
:
Bearbeitet durch User
Michael D. schrieb: > Wenn du das denkst, solltest du dich mal über IGMP snooping und > Multicast groups informieren: > https://en.wikipedia.org/wiki/IGMP_snooping > > Michael Ja, meine Aussage war etwas zu allgemein.
Recht herzlichen Dank für die unterschiedlichen interessanten Beiträge zu meinem Problem. Da ich paar Tag mit anderen Dingen beschäftigt bin und deshalb mein Hobbyprojekt zur Seite legen muss, komme ich Mitte nächste Woche wieder darauf zurück und bitte speziell Εrnst B. mir dann paar Fragen zu seiner Lösung zu beantworten. Mir fehlen da noch paar Randbedingen. Danke nochmals vorerst.
:
Bearbeitet durch User
Durch Zufall habe ich jetzt eine Lösung für mein Problem gefunden, dass möglicherweise weitere Nachfragen hier bei den Experten nicht mehr nötig macht. Bei folgendem Link gibt es eine programmierbare AT-FW Version 2.2.0 . Sie lies sich sofort programmieren und liefert die Mulicast-Daten die ich erwarte. https://github.com/CytronTechnologies/esp-at-binaries/blob/main/images/ESP8266_Download_Tool_ESP01.png Habe aber nur kurz getestet und übernehme keine Garantie. Meine Testkommandos musste ich etwas umstellen, da es anscheinend die "..._CUR" AT-Kommandos nicht mehr gibt. Werde weiter testen ob meine SW noch zu den anderen AT Kommandos passt. Vielleicht hilft das anderen Interessierten weiter.
Bot N. schrieb: > Bin quasi Neuling mit dem ESP01S und habe jetzt folgende Frage: > könnte der ESP01S meinen TCP Server bedienen wie bis jetzt, aber > gleichzeitig auf einem anderen Port UDP Multicast Message mitlesen? Der ESP ist auch schon bald 10 Jahre auf dem Markt. Unter welchem Stein warste die letzte Zeit? Jo, erstemal das Rad neu erfinden.
@botnec: Ich pack dir mal meinen Test-Source hier rein, da haben ggfs. mehr Leute was davon als das per PN durchzugehen. Ist "Arduino"-Sourcecode, würde aber empfehlen den per Platformio zu compilieren. Ordner anlegen, platformio.ini reinlegen, src-Unterordner anlegen, main.cpp reinlegen. dann "pio run" zum kompilieren, "pio run -t upload" zum Installieren auf dem ESP. Oder, falls du platformio als VSCode-Plugin benutzt, einfach die entsprechenden Knöpfchen drücken. Source passt noch nicht 100%ig, Debugausgaben könnten den MSP430 stören, und die int64-Rechnung hat wohl noch irgendein Problem.
@Ernst B. Vielen Dank für die Antwort!! Habe alles mal schnell probiert und ich denke ich konnte das Firmware.elf File erzeugen. Aber noch eine dumme Frage: wie und wo muss ich den ESP01S anschließen zum Programmieren der Firmware? Geht das mit dem USB Adapter ? Nachtrag: Hat schon geklappt !! Dank , prima.
:
Bearbeitet durch User
Bot N. schrieb: > Geht das mit dem USB Adapter Entweder so ein Programmierstöpsel wie im Anhang, oder du verbindest RX, TX, GND mit einem USB->Seriell(TTL) Wandler, und stellst die nötigen Brücke zum Start im Bootloader-Modus her (GPIO0 auf LOW) https://www.diyhobi.com/flash-program-esp-01-using-usb-serial-adapter/
:
Bearbeitet durch User
Es hat schon geklappt mit dem USB Adapter. Ich bekommen schon die Punkte angezeigt. Da stimmt wohl was noch nicht mit dem Netzwerk Login bzw. möchte ich eine fixe IP vergeben. Vielen Dank erst mal. Komme aber evtl. nochmals mit paar Fragen.
:
Bearbeitet durch User
Bot N. schrieb: > bzw. möchte ich eine fixe IP vergeben. Entweder am DHCP-Server so einstellen, oder im Quelltext im setup() zwischen "WiFi.mode" und "WiFi.begin" eine Zeile einfügen:
1 | WiFi.config(IPAddress(192,168,55,42), IPAddress(192,168,55,1), IPAddress(255,255,255,0), IPAddress(192,168,55,1),IPAddress(8,8,8,8)); |
(lokale ip, Gateway, Netmask, erster DNS, zweiter DNS)
Bot N. schrieb: > Aber noch eine dumme Frage: wie und wo muss ich den ESP01S anschließen > zum Programmieren der Firmware? Geht das mit dem USB Adapter ? http://stefanfrings.de/esp8266/index.html#fwupdate Ernst hat dir einen Adapter gezeigt, den ich auch gerne benutze. Da sind nur zwei Haken (nicht immer aber oft): 1) Dem Adapter fehlt der "Flash" Button an GPIO0. Denn kann man aber ganz leicht auf der Rückseite der Buchsenleiste nachrüsten. 2) Der Spannungswandler ist oft zu schwach, um WLAN (stabil) zu nutzen. Aber für einen kurzen Firmware-Upload reicht es.
Danke, aber den Adapter benutze ich auch schon länger für meine AT-FW Versuche. Bisher alles in Ordnung.
Jetzt muss ich doch nochmals um Hilfe bitten. Ich habe mittels Platformio einmal ein File erzeugt und mit UPLOAD in den ESP8266 programmiert. Wenn ich jetzt am Programm Änderungen durchführe wird zwar mit BUILD das File fehlerfrei compiliert, aber beim UPLOAD ist wieder das alte File programmiert. Ich habe nur zwei Print-Kommandos eingefügt für MAC und IP. Diese werden aber anscheinend nicht ausgeführt. Muss ich da noch was machen dass das neue File übernommen wird? Plattformio ist absolut neu für mich!!
Eigentlich sollte das upload-target auch neu Kompilieren, wenn nötig. Zeig mal die Ausgabe vom upload.
Ist dass das was gewünscht war? NACHTRAG: Fehler gefunden!! Hatte main.cpp zweimal im PIO Verzeichnis. Kompiliert wurde das File im Verzeichnis SRC, editiert aber das File im Verzeichnis über SRC. Typische Anfängerfehler. Jetzt funktioniert alles soweit. Danke sehr nochmals.
:
Bearbeitet durch User
Noch eine Frage bitte: Wo finde ich den die Beschreibung der z.B. WiFi Kommandos die hier verwendet werden? Ich habe zwar Dokumentation gefunden, aber die passt irgendwie nicht zu dem Code. z.B. Code: wifi.config(ip, gateway, netmask, dns, dns2); Doku: wifi.config(ip, dns, gateway, netmask);
Bot N. schrieb: > Ich habe zwar Dokumentation gefunden, aber die > passt irgendwie nicht zu dem Code. https://arduino-esp8266.readthedocs.io/en/3.1.2/esp8266wifi/station-class.html#config >> WiFi.config(local_ip, gateway, subnet, dns1, dns2) Die Arduino-Header/Schnittstellen/API ist zwar meistens zwischen verschiedenen µCs kompatibel, zumindest ist das die Idee, aber eben doch nicht immer. Im Source hast du sicher auch die "#ifdef ESP8266" gesehen: Arduino für ESP32 ist halt wieder etwas anders.
:
Bearbeitet durch User
Danke, alles klar. Sieht soweit ganz gut aus. Könnte mich daran gewöhnen!!
Aus aktuellem Anlass: Ich habe den Code oben "als Gag" auf eine Viertelstunde zusammengestöpselt, und dabei einige JS->C++ Übersetzungsschritte per KI erledigen lassen. Ich selber benutze keinen ESP zum Mitlesen von Speedwire, und habe es auch nicht vor. Ich selber habe weder einen SMA Homemanger noch Ladesäule, nur einen "SMA EnergyMeter"-kompatiblen Stromzähler, der scheinbar manche Details doch anders macht. Ich leiste keinen persönlichen Support für das Beispielprogramm oder SMA Anlagen. Nicht per PN, nicht per EMail, auch nicht gegen Geld. Wenn ihr Fragen zum Code habt, stellt sie hier im Forum, und sendet mir Keine PN. Danke. Und vorher hier vorbeischauen, das Problem mit komischen Feldbezeichnern nach dem 144er-Versionsfeld ist da schon gelöst. Beitrag "SMA Home-Manager Multicast-Messages Auswertung"
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.