ESP32-NOW Verbindungen

Zur Erweiterung meines WiFI Projektes würde ich gerne 2 (oder mehr??) ESP's zur Steuerung miteinander drahtlos verbinden. ESP32-NOW viel mir hier ins Auge.
Damit ich nicht wieder zuviel Zeit mit Versuchen an den beiden funktionierenden "standalone" ESP32 zu verbringen, hab ich mit erst einmal eine einfache Verbindung mit einem Sender und Empfänger erstellt. Zumindest war das Hochladen bei diesen Sketchen erfolgreich.
Leider wird aber kein Text (Hi.... ) vom Sender zum Empfänger übertragen.
Die MAC-Adresse vom Empfänger passt auf jeden Fall. Mache ich auch da wieder was falsch??

Hier der Sender-Sketch:

#include <esp_now.h>
#include <WiFi.h>
uint8_t receiverAddress[] = {0xec, 0xe3, 0x34, 0xb4, 0x50, 0xc3};
esp_now_peer_info_t peerInfo;
void setup(){
    Serial.begin(115200);
    // delay(1000); // uncomment if your serial monitor is empty
    WiFi.mode(WIFI_STA);
    
    esp_now_init();
    
    memcpy(peerInfo.peer_addr, receiverAddress, 6);
    peerInfo.channel = 0;
    peerInfo.encrypt = false;
    esp_now_add_peer(&peerInfo);
}
 
void loop(){
    char message[] = "Hi, this is a message from the transmitting ESP";
    esp_now_send(receiverAddress, (uint8_t *) message, sizeof(message)-1); // -1 to not send the NULL terminator
    delay(5000);
}

Hier die Ausgabe nach dem Hochladen:

ets Jul 29 2019 12:21:46
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4980
load:0x40078000,len:16612
load:0x40080400,len:3480
entry 0x400805b4

Hier nun der Empfänger-Sketch:

#include <esp_now.h>
#include <WiFi.h>
void messageReceived(const esp_now_recv_info *info, const uint8_t* incomingData, int len){
    for(int i=0; i<len; i++){
        Serial.print((char)incomingData[I]);
    }
    Serial.println();
}
void setup(){
    Serial.begin(115200);
    // delay(1000); // uncomment if your serial monitor is empty
    WiFi.mode(WIFI_STA);
    esp_now_init();
    esp_now_register_recv_cb(messageReceived);
}
void loop(){}

Auch hier die Hochladedaten vom Empfänger:

ets Jul 29 2019 12:21:46
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4980
load:0x40078000,len:16612
load:0x40080400,len:3480
entry 0x400805b4

Dieses Beispiel aus dem Netz schien mir am Einfachsten (ohne Fehlermeldung) um auf eine drahtlose Kommunikation und Erweiterung mit den ESPs zu setzen.
Leider fehlt sogar der einfachste Text beim Empfänger ..

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

>Hier< ist das gut erklärt

Hier auf Deutsch.

Die Programme in #1 sind von Wolle kopiert. Gerade nochmal probiert, bei mir funktioniert das auch :innocent:

Hallo Community,

beeindruckend. Noch fast keine Frage gestellt und schon Antworten bekommen!
Danke für die Unterstützung und den Link zu der hervorragenden Dokumentation.

Bemerkung:
Wenn ich die Receiver MAC-Adresse "für alle" auf dem Kanal (FF,FF,....) setze, funktioniert es. D.h. der Text kommt beim Receiver an.

Ich bin mir sicher, dass ich die richtige MAC-Adresse eingegeben habe.
Ich habe sie auch über die FRITZBOX verifiziert.

Hast du dir denn schon mal darüber Gedanken gemacht, deine Kommunikation über UDP oder TCP aufzubauen ?
UDP ist sehr einfach zu realisieren und TCP ähnlich nur mit dem Vorteil, dass du automatisch eine Quittung bekommst, wenn die Daten fehlerfrei angekommen sind.
Für diese Verbindung wird nur die IP des jeweiligen Gerätes benötigt.

Aktuell habe ich in meinem Heimnetz 12 ESP32 bzw. ESP8266 die auch per UDP miteinander kommunizieren.

Es gibt Sketche zum Auslesen der Mac.

Wird bei Wolle auch gezeigt. Hast du dies getan? Du musst die Adresse des Empfängers beim Sender angeben.

Ich bin mir nicht sicher, ob es eine Rolle spielt. In deinem Sketch sind die HEX Buchstaben Klein geschrieben. In den Beispielen Groß.

Ja. Ich habe den Sketch zum Auslesen der MAC-Adresse von Wolle auch benutzt. Funktionierte auch gut.
Bei den Hex-Buchstaben habe ich für den Broadcast alles in Großbuchstaben (FF,FF..) geschrieben. für den einzelnen Empfänger hatte ich die ausgegebenen Kleinbuchstaben verwendet.
Ich werde die Groß-Kleinschreibungen und das Ergebnis nochmal testen

Falls das alles nicht hilft, gibt es hier noch eine weitere deutschsprachige Seite mit hilfreichen Erläuterungen und Beispielen

https://elektro.turanis.de/html/prj412/index.html

Wenn der Broadcast ankommt, die direkte MAC Adressierung es jedoch nicht tut, dann liegt der Verdacht nahe, dass es an der ermittelten Adresse liegt... Du könntest vielleicht einmal Wolles Beispiel für das temporäre Setzen einer (weitgehend) beliebigen MAC Adresse ausprobieren, die Du dann verwendest, und die rückgemeldete aktuelle Adresse ausgeben lassen, um ganz sicher zu gehen (Entwickler-Paranoia;-) )

Viel Erfolg!
ec2021

Ich habe mir noch keine Gedanken über UDP und TCP gemacht. Ich werde mich hier mal einlesen.

Mein Ziel:
Ich habe derzeit 2 ESP32 für unterschiedliche Funktionen in meinem Trainingsraum.

Der eine ESP32 zeigt mit LED's an, ob mein Mikro und Musik an/aus ist und über Taster/Relais kann eine Lampe und und die WEB-Cam eingeschaltet werden.
Die Steuerung kann ich auch über eine HTML-Seite z.B. an meinem iPhone steuern.
Bem.: Ohne eure Hilfe hätte ich damals aufgegeben.

Falls der Stromlauf Jemanden interessiert:

Hier die Bedienelemente:

Der zweite ESP32 kam mit dem Appetit vom ersten dazu und ist eigentlich nur kopiert und angepasst.
Der Schwerpunkt ist die Umschaltung von 2 unterschiedlichen Lautsprechern an einem großen Bildschirm. Wichtig auch hier, die Steuerung lokal und übers WEB vorzunehmen.

Hier beim 2. ESP32 bin ich bei der Hardware die ich in ein Tupperware-Gehäuse eingebaut habe noch mehr im "Labor"-Zustand

Mit einer provisorischen Aluplatte sieht es schon besser aus.

Die Idee war mit "NOW" die räumliche Distanz für die Steuerung von Relais zu überbrücken. Also Taster an ESP1 soll zum Schalten eines Relais am ESP2 benutzt werden.

Leider bin ich hier schon fast wieder am Ende meiner Fähigkeiten, da zwar der Text in meinem letzten Versuch von Wolle Beispiel endlich übertragen wurde, aber ich bis jetzt nicht im Stande war wenigstens eine einfache LED mit einem Taster über NOW zum Leuchten zu bringen.
Ich hatte ein Beispiel auf der Seite von https://draeger-it.blog genommen.

Ob es mit UDP/TCP bei meinen Fähigkeiten besser wird wage ich um die Mitternachtsstunde zumindest zu bezweifeln.

1 Like

ganz nachvollziehen kann ich es nicht.
Wenn auf beiden ESPs bereits ein Webserver läuft - und vermutlich im gleichen Wlan hängen - warum schickst du dann nicht einfach von einem ESP zum anderen einen HTTP request?!?

Auf der "Senderseite" nutzt du einen httpclient, auf der "Empfängseite" machst du am Server einen neuen Handle und wertest die Daten vom Sender aus.

Zumindest ist es mit UDP deutlich einfacher.
Wenn es mir später die Zeit erlaubt, werde ich ein einfaches Beispiel posten.
Aktuell bin ich noch unterwegs.

Oder Hier schon mal zum nachlesen. Bzw. Hier.

Wenn auf beiden ESPs bereits ein Webserver läuft - und vermutlich im gleichen Wlan hängen - warum schickst du dann nicht einfach von einem ESP zum anderen einen HTTP request?!?

Auf der "Senderseite" nutzt du einen httpclient, auf der "Empfängseite" machst du am Server einen neuen Handle und wertest die Daten vom Sender aus.

Hallo noiasca,
deine Lösungsansätze und Ausführungen klingen so einfach und trivial.

Hinter dem "mahowe" steht ein Programmierungslegasteniker der bastelt, versucht und gerade den funktionierenden WEB-Teil, der dir zu verdanken ist zu verstehen. OK, ich habe aber schon einiges gelernt und "dazugebaut" und erweitert. HTML und CSS werden auch etwas verständlicher.

Gibt es irgendwo ein Beispiel oder Nachschlagewerk, dass deinen Lösungsansatz beschreibt und vor allem zu meinen Lösungen passt ohne etwas unbeabsichtigt zu zerstören?

Ich muss mich ja nach meinen derzeitigen Fähigkeiten (die gering sind) richten.
ESP-übergreifende Funktionen sind schon eine echte Herausforderung. Nach "BLE für iPHONE" hat das gestern auch das Scheitern einer LED und Taster mit dem NOW-Protokoll gezeigt.
Vielleicht gibt es ja andere noch einfachere Lösungsvorschläge?

Ich lege die beiden Sketche gezippt (da mehrere Tabs) zu meinen gestrigen Hardwareaufbau nochmal bei. Vielleicht inspiriere ich auch jemanden damit?
Tu ich sicher nicht ...
ESP32_Lautsprecherumschaltung.zip (124,8 KB)
ESP_Mikrofon_Musik_Ueberwachung.zip (75,6 KB)

Gruß mahowe

Ja, in meinem Post #13 der zweite Link.
Da sind beide (Senderseite und Empfängerseite) ausführlich gezeigt und beschrieben.

Beschreib mal genau,
Ist der Taster ein hardware Taster - wenn ja auf welchem Pin?
An welchen Pin hängt das zu schaltende Relais am ESP2?
Was ist der ESP1? (welcher Sketch)
Was ist der ESP2? (welcher Sketch)

Hallo HotSystems,

tu ich. Ich habe schon einiges an Lektüren zu dem ESP32 gesammelt und endlich strukturiert abgelegt. Werde mir das mit UDP durchlesen. Ich hoffe, da beißt sich nichts mit meinem WEB-Zugriff.

Frage an die Community:
Ich benötige noch ein paar ESP32. Das sind ja richtige Alleskönner. Einige sind ja vor euren Sicherheitsvorschlägen (Widerstand, 3,3 V und 5 V , etc. ) im Sondermüll gelandet.

Was ist bei euren Erfahrungen denn als Lieferant Favorit?

Ach ja, ich habe mir jetzt auch nach Vorschlägen von euch, Fototransistoren bestellt um sie gegen Fotowiderstände, die ich ja auf MINI-LEDs zur Signalisierung geklebt habe (siehe meinen Stromlaufplan) auszutauschen. Die Fotowiderstände sind sehr träge. Glaube ich ...

Das tut es def. nicht.
Bei mir läuft auf jedem ESP ein Webserver und UDP ohne Probleme zusammen.

ich habe einen groben Überblick von UDP, TCP, HTTP und ESP NOW:

In deinem Fall würde ich eben den existierenden Webserver wiederverwenden.
Daher eine HTTP Kommunikation.
So wie es zwischen Browser und ESP funktioniert, ähnlich funktioniert es zwischen zwei ESP.

Hier ein HTTP Beispiel:

wie gesagt du brauchst eigentlich am ESP2 nur einen handle der das Kommando vom ESP1 entgegen nimmt
am ESP1 (der nun in die Rolle eins "browsers + Mensch") schlüpft, brauchst du einen webclient.

Hallo noiasca,

wieder mal sehr "unprofesionell" meine Anforderungsbeschreibung.
Ich werde (versuchen) mich zu bessern. Zu deinen Fragen:

Wer ESP Sender oder ESP Empfänger ist habe ich noch nicht festgelegt.
Notwendige Taster sind auch physisch am Gerät(ESP= vorhanden
ESP1 ist ESP_Mikrofon_Musik_Ueberwachung, dessen Funktion ich unten kurz beschreibe. Im Post #11 ist es die erste Verdrahtungsübersicht
ESP2 ist ESP32 Lautsprecherumschaltung. Von der Steuerung ähnlich wie der erste. Es ist der 2. Stromlauf im Post #11

Ein fast geniales Beispiel für die derzeitige fast vollautomatischen Lösung mit dem ESP1:
Ich möchte eine Trainingsstunde abhalten. Das neue Notebook im Kursraum wird von mir nur geöffnet und damit automatisch eingeschaltet

  • Der ESP32 am USB-Ausgang vom NB wird eingeschaltet
  • WEB-Cam und Lampe werden über Relais mit 220 V automatisch eingeschaltet
  • Die LEDs "Kamera" und "Lampe" leuchten am Tableau.
  • Taster "Kamera" und "Lampe" am Tableau schalten diese bei Bedarf aus/an
  • Funkmikrofon-Eingangssignal* und das Musik-Signal* werden vom ESP geprüft und die LEDs grün eingeschaltet (rot = ausgeschaltet) Ich höre es ja nicht
  • LED Wifi gelb leuchtet bei vorhandenem WLAN wegen der WEB-Steuerung.
  • Die Steuerung des ESP kann zudem über die WEB-Seite erfolgen (siehe Bild gestern)
  • Zusätzlich wird auf dieser WEB-Seite auch die Raumluft-Temperatur vom DHT22 angezeigt

In der Zwischenzeit läuft das Notebook (ohne Passwort!! ) direkt in den Firefox (oder Chrome) und öffnet dort die Anwendung zur Auswahl der Übungsstunde Vorort und zur Onlineübertragung ins Netz. Wow und ich muss mich um fast nichts kümmern ausser Turnschuhe binden.

*Die eigentliche Herausforderung am Anfang war, den eingeschalteten Zustand des Funkmikrofon sichtbar zu machen. Nach dem Einlegen des Akku und Einschalten des Funkmikros wird über den Verstärker das LED-Empfangssignal vom Mikrovon mir über einen Fotowiderstand abgefragt an den ESP weiter gegeben und bei einem bestimmten Wert eine grüne LED eingeschaltet. Das Gleiche geschieht bei einer Musik die womöglich im Raum läuft.

Jetzt zu meiner Idee/Wunsch:
Von diesem ESP (Taster und/oder WEB-Seite den 2. ESP mit der Lautsprecheranschaltung einzuschalten (der hat einen Ein/Ausschalter) und evtl. die Lautsprecher über die WEB-Seite dort umschalten). Dies ist ja nur als ein Beispiel für weitere Wunschträume gedacht.

Ideal wäre die Steuerung aus einer WEB-Seite..

mahowe