Wakeup funktioniert nur am Rechner

Hallo,

Ich habe auf meinem Lilygo T3 einen Sketch laufen, der Sensorwerte von einem DS18B20 ausliest und per MQTT verschickt. Soweit alles gut.

Nun habe ich den DeeSleep aktiviert und lege das Board für 10 Minuten schlafen. Mir ist klar, dass dies bei dem Board nicht viel bringt. Es soll eher die Machbarkeit zeigen.

Solange das Board per USB-C am Rechner hängt, funktioniert das schlafen gehen und aufwachen wie gewünscht. Wenn ich das Board nun allerdings mit einem Akku betreibe, startet es einmal, sendet die Daten, legt sich schlafen und wacht nicht wieder auf. Wenn ich entweder kurz den Akku trenne, oder den Reset Button am Board drücke, das gleiche Spiel. Aufwachen, schlafen gehen und nicht wieder aufwachen.

Hat jemand eine Idee, wo ich nach dem Fehler suchen kann?

Grüße

im Setup().

Sicher? wurde sagen in Zeile 42 :thinking:
Nehme zurück die ist ja im Setup :wink:

Vermutlich fängt das setup() da an :slight_smile:

Hier meine setup(). Überflüssige Serial.print-Zeilen habe ich mal entfernt:

void setup() {

#include <OneWire.h>
  Serial.begin(115200);
  delay(200);
  ++bootCount;
  Serial.println("Boot number: " + String(bootCount));

  //Print the wakeup reason for ESP32
  print_wakeup_reason();

  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
  Serial.println("Setup ESP32 to sleep for every " + String(TIME_TO_SLEEP) +
  " Seconds");

  Serial.println(" setup ");
  delay(200);
  sensors.begin();

  WiFi.begin(ssid, pass);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("Connection to MQTT ");
  client.setServer(mqtt_server, mqtt_port);

  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    
    // Attempt to connect
    if (client.connect(DEVICE_NAME.c_str())) {
      Serial.println("connected");
      //Once connected, publish an announcement...
      client.publish(MQTT_PUBLISH_TOPIC, "new device connected");
      // ... and resubscribe
      client.subscribe(MQTT_SUBSCRIBE_TOPIC);
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
  
  Serial.print("Locating devices...");
  Serial.print("Found ");
  deviceCount = sensors.getDeviceCount();
  Serial.print(deviceCount);
  Serial.println(" devices.");
  
}

Du verstehst nicht den Witz mit Zeile 42 und Setup :joy:
Das sollte Dir sagen ohne Sketch keine Hilfe wie auch?
Alle Glaskugel sind kapott ausgeleiert.

Was Wikipedia zu 42 sagt

Wieso ein Include im setup()?

Grüße Uwe

Das habe ich so aus einem Beispiel genommen. Ich werde es mal nach oben schieben.

Hier der komplette Sketch:

#include <DallasTemperature.h>
#include <WiFi.h>
#include <PubSubClient.h>

char ssid[] = "";
char pass[] = "";

// MQTT Settings
const char* mqtt_server = "192.168.0.222";
#define mqtt_port 1883
#define MQTT_PUBLISH_TOPIC "/iot/test"
#define MQTT_SUBSCRIBE_TOPIC "/iot/test"
const String DEVICE_NAME = "mqttTester";

WiFiClient wifiClient;
PubSubClient client(wifiClient);

OneWire oneWire(21);  //the pin you want to use
DallasTemperature sensors(&oneWire);

int deviceCount = 0;
float temperatureC;
float fahrenheit;

// DeepSleep Settings
#define uS_TO_S_FACTOR 1000000ULL  /* Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP  600        /* Time ESP32 will go to sleep (in seconds) */
RTC_DATA_ATTR int bootCount = 0;

/*
Method to print the reason by which ESP32
has been awaken from sleep
*/
void print_wakeup_reason(){
  esp_sleep_wakeup_cause_t wakeup_reason;

  wakeup_reason = esp_sleep_get_wakeup_cause();

  switch(wakeup_reason)
  {
    case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
    case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
    case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
    case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
    case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
    default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
  }
}

void setup() {

#include <OneWire.h>
  Serial.begin(115200);
  delay(200);
  ++bootCount;
  Serial.println("Boot number: " + String(bootCount));

  //Print the wakeup reason for ESP32
  print_wakeup_reason();

  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
  Serial.println("Setup ESP32 to sleep for every " + String(TIME_TO_SLEEP) +
  " Seconds");

  Serial.println(" setup ");
  delay(200);
  sensors.begin();

  WiFi.begin(ssid, pass);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  delay(3000);

  Serial.println("Connection to MQTT ");
  client.setServer(mqtt_server, mqtt_port);

  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    
    // Attempt to connect
    if (client.connect(DEVICE_NAME.c_str())) {
      Serial.println("connected");
      //Once connected, publish an announcement...
      client.publish(MQTT_PUBLISH_TOPIC, "new device connected");
      // ... and resubscribe
      client.subscribe(MQTT_SUBSCRIBE_TOPIC);
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
  
  Serial.print("Locating devices...");
  Serial.print("Found ");
  deviceCount = sensors.getDeviceCount();
  Serial.print(deviceCount);
  Serial.println(" devices.");
  
}

void loop() {
  sensors.requestTemperatures();
  // Display temperature from each sensor
  for (int i = 0;  i < deviceCount;  i++)
  {
    temperatureC = sensors.getTempCByIndex(i);
    fahrenheit = (temperatureC * 9.0 / 5.0) + 32.0;
    Serial.print("Sensor ");
    Serial.print(i+1);
    Serial.print(" : ");
    Serial.print(temperatureC);
    Serial.println("ºC");
    Serial.println("   ");

    String topic = "sensor" + String(i+1);
    String payload = String(temperatureC);
    client.publish(topic.c_str(), payload.c_str());
  }
  String topic = "status/Bootcount";
  String payload = String(bootCount);
  client.publish(topic.c_str(), payload.c_str());

  delay(2000);
  Serial.println("Going to sleep now");
  Serial.flush(); 
  esp_deep_sleep_start();
}

welcher Akku?
Wenn das eine USB Akkubank ist, dann kann diese komplett abschalten und der ESP nicht mehr aufmachen.
Zeig mal Fotos von deinem Aufbau.

Eine Powerbank ist nicht dran. Anbei mal zwei Fotos vom Aufbau.

Zwischen Solarzelle und Akku ist ein TC4056 verbaut. Von dem geht es dann weiter Richtung Lilygo.


Das Gewirr auf der linken Seite sind drei Temperatursensoren.

ich erkenne auf diesen Bildern nicht viel.

Welche Spannung misst du nun auf der VCC Rail die zum ESP geht OHNE USB?
Welche Spannung misst du nun auf der VCC Rail die zum ESP geht mit USB?
Auf welchen ESP Pin gehst du mit der Spannungsversorgung?
Detailfoto von deinen Lötarbeiten am TC4056?

Solarleitung würde ich fürs Gewissen isolieren, das schreit ja förmlich nach einem Kurzschluss.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.