I have an ESP-01 that I want to measure pool temperature with. It will send the data over MQTT to the broker.
I have connected RST to GPIO16 so I can use the deep sleep functionality. Currently I am testing sending a "hello world" to the MQTT broker, and everything works fine when booting up the first time, but it seems like the ESP never wakes up correctly after the first deep sleep.
My script looks like this:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Set ADC mode
ADC_MODE(ADC_VCC);
// WiFi settings
const char* ssid = "Network";
const char* password = "Password";
IPAddress ip(192, 168, 0, 100);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
// MQTT settings
const char* mqtt_server = "192.168.0.110";
const int mqtt_port = 1883;
const char* mqtt_user = "User";
const char* mqtt_pass = "Password";
const char* mqtt_client_name = "poolsensor";
const char* mqtt_topic = "pool";
// Data wire plugged into D1 on the ESP8266 ESP-01 - GPIO 5
#define ONE_WIRE_BUS 5
// Setup OneWire instance to communicate with any device
OneWire oneWire(ONE_WIRE_BUS);
// Pass our OneWire reference to Dallas Temperature
DallasTemperature DS18B20(&oneWire);
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
delay(10);
// Annuonce connection
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
// Setup WiFi config and connect
WiFi.mode(WIFI_STA);
WiFi.config(ip, gateway, subnet);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
// Loop until we're connected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect(mqtt_client_name, mqtt_user, mqtt_pass)) {
// Success
Serial.println("connected");
} else {
// Fail
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
// Start WiFi setup
setup_wifi();
// Set MQTT server
client.setServer(mqtt_server, mqtt_port);
// Set resolution to 0.25
DS18B20.setResolution(10);
// Start sensor
DS18B20.begin();
}
void loop() {
if (!client.connected()) {
reconnect();
} else {
// Get temperature
/*
DS18B20.requestTemperatures();
float temp = DS18B20.getTempCByIndex(0);
if ((temp > -20) && (temp < 60)) {
client.publish("pool/temperature", String(temp).c_str(), true);
}
*/
client.publish("pool/temperature", "hello world");
Serial.println("published temperature");
delay(1000);
// Sleep
ESP.deepSleep(60 * 1000000);
delay(3000);
}
}
Everything looks good in the serial monitor when compiling and uploading code, as the code runs the first time:
Connecting to Network
......
Connected, IP address: 192.168.0.100
Attempting MQTT connection...connected
published temperature
And I can see in my MQTT debugger that it receives hello world
. After around 60 seconds, the following is shown in the serial monitor (lots of gibberish):
{l�l��|��d�|�d�b<����s�c$�#��ng�lgn���cxp��${$sd�s��'�c�ncp��
This is the last message I ever receive from the ESP, so I assume it never deep sleeps again and runs over the code again.
Anyone experienced the same, or see a bug in my code?
D1
??? that's wemos/nodemcu garbage (plus the ESP01 doesn't break out gpio 5 eitherets Jan 8 2013,rst cause:5, boot mode:(1,6) ets_main.c
but only once, and never more. @Juraj no, should I usepinMode(0, LOW);
?