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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren