Deep Sleep stopped working

Hi All
I had this code working perfectly yesterday on a ESP32 dev board and battery out in the yard. For what ever reason it disconnected, possibly a flat battery. Now it can get the unit into deep sleep mode.

I haven't changed anything hardware or software wise.

I have charged the battery and the readings are there but it won't sleep now. I have reloaded the code and tried the second code which puts it into deep sleep.

Any ideas?


#include <HX711.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DHT.h>

#define calibration_factor -21500.0 
#define zero_factor 8364129

#define LOADCELL_SCK_PIN  23

#include <WiFi.h>
#include <HTTPClient.h>

// Replace with your network credentials
const char* ssid     = "";
const char* password = "";

// REPLACE with your Domain name and URL path or IP address with path
const char* serverName = "";

// Keep this API Key value to be compatible with the PHP code provided in the project page. 
// If you change the apiKeyValue value, the PHP file /post-data.php also needs to have the same key 
String apiKeyValue = "";

#define DHTPIN 4     // Digital pin connected to the DHT sensor

#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

#define ONE_WIRE_BUS 15 // Data wire is connected to GPIO15

HX711 scale;

// Setup a oneWire instance to communicate with a OneWire device
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature sensor 
DallasTemperature sensors(&oneWire);

DeviceAddress sensor1 = { 0x28, 0x6A, 0x48, 0x7C, 0x0C, 0x00, 0x00, 0xC4 }; // long
DeviceAddress sensor2 = { 0x28, 0xFA, 0x14, 0x7B, 0x0C, 0x00, 0x00, 0x47 }; //short


// Time to sleep
uint64_t uS_TO_S_FACTOR = 1000000;  // Conversion factor for micro seconds to seconds
// sleep for 30 minutes = 1800 seconds
uint64_t TIME_TO_SLEEP = 1800;

// Get Sensor Readings 
String getSensorReadings(){
void setup() {
  scale.set_scale(calibration_factor); //This value is obtained by using the SparkFun_HX711_Calibration sketch
  scale.set_offset(zero_factor); //Zero out the scale using a previously known zero_factor

  WiFi.begin(ssid, password);
  while(WiFi.status() != WL_CONNECTED) { 
  Serial.print("Connected to WiFi network with IP Address: ");

#ifdef ESP32
    // enable timer deep sleep
    esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);    
    Serial.println("Going to sleep now");
    // start deep sleep for 3600 seconds (60 minutes)
    // Deep sleep mode for 3600 seconds (60 minutes)
//    Serial.println("Going to sleep now");
    ESP.deepSleep(TIME_TO_SLEEP * uS_TO_S_FACTOR); 

void loop(){ 
//Check WiFi connection status
  if(WiFi.status()== WL_CONNECTED){
    HTTPClient http;
    // Your Domain name with URL path or IP address with path
    // Specify content-type header
    http.addHeader("Content-Type", "application/x-www-form-urlencoded");
    // Prepare your HTTP POST request data
    String httpRequestData = "api_key=" + apiKeyValue + "&value1=" + String(dht.readTemperature())
                           + "&value2=" + String(dht.readHumidity()) + "&value3=" + String(sensors.getTempC(sensor1)) + "&value4=" + String(sensors.getTempC(sensor2))+ "&value5=" + String(scale.get_units(), 1) +"";
    Serial.print("httpRequestData: ");
    // Send HTTP POST request
    int httpResponseCode = http.POST(httpRequestData);
    // If you need an HTTP request with a content type: text/plain
    //http.addHeader("Content-Type", "text/plain");
    //int httpResponseCode = http.POST("Hello, World!");
    // If you need an HTTP request with a content type: application/json, use the following:
    //http.addHeader("Content-Type", "application/json");
    //int httpResponseCode = http.POST("{\"value1\":\"19\",\"value2\":\"67\",\"value3\":\"78\"}");
    if (httpResponseCode>0) {
      Serial.print("HTTP Response code: ");
    else {
      Serial.print("Error code: ");
    // Free resources
  else {
    Serial.println("WiFi Disconnected");
//  //Send an HTTP POST request every 30 seconds
//  delay(30000);  
//   // Wait a few seconds between measurements.
//  delay(20000);
  //Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
 // Serial.println("DONE");
  Serial.print("8 Frame Hive: ");
  Serial.print("°C:    ");
  Serial.print("10 Frame Hive: ");
  Serial.print("°C:    ");

  Serial.print("Weight ");
  Serial.print(scale.get_units(), 1);
  Serial.print(" Kgs      "); 

   // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t)) {
    Serial.println(F("Failed to read from DHT sensor!"));

  Serial.print(F("8 Frame Roof Temp: "));
  Serial.print(F("°C   "));
  Serial.print(F("8 Frame Roof Humidity: "));
  Serial.print(F("%   "));
  Serial. print('\n');

  Serial.println("Going to sleep now");
    // start deep sleep for 1800 seconds (30 minutes) 

#include <Arduino.h> 

#define uS_TO_S_FACTOR 1000000  /* Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP  10        /* Time ESP32 will go to sleep (in seconds) */

void setup(){

  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("Going to sleep now");
  Serial.println("This message will never be printed");

void loop(){ 

Have you tried a much simpler bit of code, without the WiFi and sensor stuff ?

Does the ESP32 go into deep sleep then ?

yes as per the second bit of code. And yes it works. But the bigger code was working fine up until yesterday...

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