Hallo, für die Übertragung von Daten soll das ESP-NOW Protokoll eingesetzt werden. Dazu habe ich 2 ESP32 Evaluationboards. Auf deim einen Evaluationboard ist aktuell der Sender implementiert. Sobald ein Taster betätigt wird, soll ein Datenpacket via ESP-NOW an den Emfänger übertragen werden. Danach geht der ESP32 in den Tiefschlafmodus. Nach 5 Sekunden wird der ESP32 wieder aufgeweckt. Nun ist es so, dass auf der EMpfängerseite keine Nachricht ankommt. Ich habe die beiden Anwendungen mit PlattformIO entwickelt. Für jegliche Hilfe wäre ich sehr dankbar.
:
Bearbeitet durch User
Funktioniert es denn ohne Sleep? Ansonsten könnte der Fehler in Zeile 275 liegen ;-) Die Vcc Leitung ist am Empfänger nicht richtig angeschlossen, sagt meine Glaskugel.
Ja das Senden und Empfangen funktioniert nun. Ich habe vor deep Sleep eine kleine Verzögerung eingebaut.
Obelix X. schrieb: > Ansonsten könnte der Fehler in Zeile 275 liegen ;-) Unwahrscheinlich. Ich glaube an Zeile 42! Aber ohne irgendwelchen Kot (äh code) ist das Kaffeesatzleserei.
Ich habe aktuell eine andere Konstellation. Der ESP32 soll beim Start (Power On) in den DeepSleep gehen. Nur durch einen Taster (GPIO Pin 9 - BOOT Taster) soll der ESP32 aufgeweckt und eine gewisse Zeit was tun. Danach soll der ESP32 wieder in den DeepSleep gehen. Aktuell drehe ich mich im Kreis.
1 | #include <esp_now.h> |
2 | #include <WiFi.h> |
3 | #include <esp_wifi.h> |
4 | |
5 | #define BOOT_PIN 9 // Der Pin für den BOOT-Taster, hier GPIO9
|
6 | |
7 | // Struktur für Daten
|
8 | typedef struct struct_message |
9 | {
|
10 | uint8_t status; |
11 | uint8_t data[10]; |
12 | } struct_message; |
13 | |
14 | struct_message outgoingData; |
15 | |
16 | void print_wakeup_reason() |
17 | {
|
18 | esp_sleep_wakeup_cause_t wakeup_reason; |
19 | |
20 | wakeup_reason = esp_sleep_get_wakeup_cause(); |
21 | |
22 | switch(wakeup_reason) |
23 | {
|
24 | case ESP_SLEEP_WAKEUP_GPIO: Serial.println("Aufgewacht durch GPIO-Signal!"); break; |
25 | case ESP_SLEEP_WAKEUP_TIMER: Serial.println("Aufgewacht durch Timer!"); break; |
26 | default: Serial.println("Anderer Aufwachgrund."); |
27 | }
|
28 | }
|
29 | |
30 | |
31 | void setup() |
32 | {
|
33 | Serial.begin(115200); |
34 | |
35 | pinMode(BOOT_PIN, INPUT_PULLUP); |
36 | |
37 | delay(2000); // Zeit für Debugging |
38 | |
39 | esp_deep_sleep_enable_gpio_wakeup(BOOT_PIN, ESP_GPIO_WAKEUP_GPIO_LOW); |
40 | delay(200); |
41 | esp_deep_sleep_start(); |
42 | }
|
43 | |
44 | void loop() |
45 | {
|
46 | delay(1000); |
47 | print_wakeup_reason(); |
48 | }
|
:
Bearbeitet durch User
Was gibt
> print_wakeup_reason();
bei dir aus?
Solltest du nicht vor "esp_deep_sleep_start();" prüfen, was
"wakeup_reason = esp_sleep_get_wakeup_cause();" macht?
:
Bearbeitet durch User
Ja da kommt keine Daten über die serielle Schnittstelle raus. irgendwie habe ich ein komisches Verhalten beim ESP32.
In der setup Routine werden keine Informationen über den serial Port ausgegeben. Wenn ich das Programm auf minimum reduziere (keinen externen PIN benutzt und keine deep sleep funktionen) wird auch in der loop Daten über den serial Port ausgegeben. Einmal hatte ich eine Ausgabe: E (5114) sleep: gpio 9 is an invalid deep sleep wakeup IO Ich vermute ich muss dafür einen anderen GPIO Pin für mein Vorhaben nutzen.
:
Bearbeitet durch User
Der ESP32 geht nicht in den DeepSleep und auch keine seriellen Daten kann ich loggen.
1 | #include <esp_now.h> |
2 | #include <WiFi.h> |
3 | #include <esp_wifi.h> |
4 | |
5 | #define BOOT_PIN 9 // Der Pin für den BOOT-Taster, hier GPIO9
|
6 | |
7 | // Struktur für Daten
|
8 | typedef struct struct_message |
9 | {
|
10 | uint8_t status; |
11 | uint8_t data[10]; |
12 | } struct_message; |
13 | |
14 | struct_message outgoingData; |
15 | |
16 | void print_wakeup_reason() |
17 | {
|
18 | esp_sleep_wakeup_cause_t wakeup_reason; |
19 | |
20 | wakeup_reason = esp_sleep_get_wakeup_cause(); |
21 | |
22 | switch(wakeup_reason) |
23 | {
|
24 | case ESP_SLEEP_WAKEUP_GPIO: Serial.println("Aufgewacht durch GPIO-Signal!"); break; |
25 | case ESP_SLEEP_WAKEUP_TIMER: Serial.println("Aufgewacht durch Timer!"); break; |
26 | default: Serial.println("Anderer Aufwachgrund."); |
27 | }
|
28 | }
|
29 | |
30 | |
31 | void setup() |
32 | {
|
33 | Serial.begin(115200); |
34 | |
35 | pinMode(BOOT_PIN, INPUT_PULLUP); |
36 | |
37 | Serial.println("Gehe in den Tiefschlaf..."); |
38 | delay(5000); // Zeit für Debugging |
39 | |
40 | esp_deep_sleep_enable_gpio_wakeup((1ULL << 9),ESP_GPIO_WAKEUP_GPIO_HIGH); |
41 | delay(200); |
42 | |
43 | print_wakeup_reason(); |
44 | delay(1000); // Zeit für Debugging |
45 | esp_deep_sleep_start(); |
46 | }
|
47 | |
48 | void loop() |
49 | {
|
50 | |
51 | }
|
Pin 9 ist keine RTC pin, und ist forgesehen fur das onboard Flash. Da soll ich eine andere Pin suchen : https://randomnerdtutorials.com/esp32-pinout-reference-gpios/
Ok habs nun in der Doku auch finden können. Hab jetzt den GPIO Pin 5 benutzt. Siehe da es funktioniert.
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.