cc13com
February 11, 2024, 5:15pm
1
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
fony
February 11, 2024, 5:45pm
3
my_xy_projekt:
im Setup().
Sicher? wurde sagen in Zeile 42
Nehme zurück die ist ja im Setup
Vermutlich fängt das setup() da an
cc13com
February 11, 2024, 6:12pm
5
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.");
}
fony
February 11, 2024, 6:20pm
6
Du verstehst nicht den Witz mit Zeile 42 und Setup
Das sollte Dir sagen ohne Sketch keine Hilfe wie auch?
Alle Glaskugel sind kapott ausgeleiert.
uwefed
February 11, 2024, 8:02pm
8
cc13com:
#include <OneWire.h>
Wieso ein Include im setup()?
Grüße Uwe
cc13com
February 12, 2024, 6:05am
9
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();
}
noiasca
February 12, 2024, 8:31am
10
cc13com:
Wenn ich das Board nun allerdings mit einem Akku betreibe, startet es einmal, sendet die Daten, legt sich schlafen und wacht nicht wieder auf.
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.
cc13com
February 15, 2024, 11:52am
11
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.
noiasca
February 15, 2024, 5:11pm
12
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.
system
Closed
August 13, 2024, 5:11pm
13
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.