esp32: deep sleep + esp-now

OP #7822852
Lesenswert?
• ▲
▼

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.

OP #7823247
Lesenswert?
• ▲
▼

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
}
OP #7823251
Lesenswert?
• ▲
▼

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.

OP #7823255
Lesenswert?
• ▲
▼

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
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.