Tengo un esp8266 D1 mini con un relay 5vdc de 1 canal y un sensor de temperatura ds18b20.
el relay esta conectado de esta forma:
Señal: D1
Positivo: 5V
GND: G
sensor de temperatura
Señal: D2
positivo: 3v3
Gnd: G (junto con el gnd de relay)
mi objetivo es controlar el relay por medio de wifi y hacerlo desde cualquier sitio con puertos abiertos desde mi router
el sensor de temperatura debe analizar cada minuto y enviar los datos a thingspeak para luego monitorear desde mi telefono.
tengo el siguiente codigo en arduino, no soy tan bueno es mi primer proyecto y al momento de compilar no arroja ningun error, pero al subir el codigo a la placa esp8266 tira errores en el monitor de serial, el sensor lo tenia conectado en D6 de la placa, pero me tiró error asi que lo cambié a D2 y levantó en primera instancia luego quizé probar nuevamente y me tira error, voy a adjuntar el codigo y posteriormente el error que me da en el monitor de serial
la api key es publico, no hay problema con ello. lo que necesito es saber como solucionar el problema de que se resetea a veces dando loop de codigo inentendible
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <OneWire.h>
#include <DallasTemperature.h>
String apiKey = "YZHH259D230T6I1L"; // Poner la apikey que te da ThingSpeak
const char* ssid = "WIRELESS"; // WRITE YOUR WIFI SSID
const char* password = "XXXXXXXXX"; // WRITE YOUR WIFI PASSWORD
const char* web_password = "XXXXX"; // WRITE SOMETHING SECURE AND RANDOM
// Pin definitions
const int temperaturePin = D2; // Pin where the DS18B20 is connected
const int relayPin = D1;
byte mac[6]; // the MAC address of your Wifi shield
IPAddress ip(172, 16, 1, 176);
IPAddress subnet(255, 255, 255, 0);
IPAddress gateway(172, 16, 1, 1);
IPAddress dns(8, 8, 8, 8); // Dirección DNS de Google
ESP8266WebServer server(8085);
const int led = 13;
#define ONE_WIRE_BUS D2 // D2 es el pin donde se conecta el sensor DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
WiFiClient client;
float tempC = 0; // Variable to hold temperature in Celsius
void handleRoot() {
digitalWrite(led, 1);
server.send(200, "text/plain", "hello from esp8266!");
digitalWrite(led, 0);
}
void handleNotFound(){
digitalWrite(led, 1);
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i=0; i<server.args(); i++){
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
digitalWrite(led, 0);
}
void setup(void){
pinMode(led, OUTPUT);
pinMode(relayPin, OUTPUT);
digitalWrite(led, 0);
Serial.begin(115200);
sensors.begin();
WiFi.mode(WIFI_STA);
WiFi.config(ip, gateway, subnet, dns);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
WiFi.macAddress(mac);
Serial.print("MAC: ");
Serial.print(mac[5],HEX);
Serial.print(":");
Serial.print(mac[4],HEX);
Serial.print(":");
Serial.print(mac[3],HEX);
Serial.print(":");
Serial.print(mac[2],HEX);
Serial.print(":");
Serial.print(mac[1],HEX);
Serial.print(":");
Serial.println(mac[0],HEX);
if (MDNS.begin("PowerComp")) {
Serial.println("MDNS responder started");
}
server.on("/", handleRoot);
server.on("/shortpresspowerbutton", [](){
if(server.arg(0) == web_password) {
digitalWrite(relayPin, HIGH); // turn on relay with voltage HIGH
delay(200); // pause
digitalWrite(relayPin, LOW); // turn off relay with voltage LOW
delay(500); // pause
server.send(200, "text/plain", "Button pressed");
} else {
server.send(200, "text/plain", "Button not pressed");
}
});
server.on("/longpresspowerbutton", [](){
if(server.arg(0) == web_password) {
digitalWrite(relayPin, HIGH); // turn on relay with voltage HIGH
delay(5000); // pause
digitalWrite(relayPin, LOW); // turn off relay with voltage LOW
delay(500); // pause
server.send(200, "text/plain", "Button pressed");
} else {
server.send(200, "text/plain", "Button not pressed");
}
});
server.on("/ultralongpresspowerbutton", [](){
if(server.arg(0) == web_password) {
digitalWrite(relayPin, HIGH); // turn on relay with voltage HIGH
delay(9000); // pause
digitalWrite(relayPin, LOW); // turn off relay with voltage LOW
delay(500); // pause
server.send(200, "text/plain", "Button pressed");
} else {
server.send(200, "text/plain", "Button not pressed");
}
});
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop(void){
server.handleClient();
// Read temperature data
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
// Check if readings are valid
if (temperature != -127.00) {
// Build the request string
String url = "/update?api_key=";
url += apiKey;
url += "&field1=";
url += String(temperature);
url += "&field2=";
// Make the HTTP request to ThingSpeak
if (client.connect("api.thingspeak.com", 80)) {
Serial.println("Sending data to ThingSpeak");
client.println("GET " + url + " HTTP/1.1");
client.println("Host: api.thingspeak.com");
client.println("Connection: close");
client.println();
delay(1000);
}
else {
Serial.println("Failed to connect to ThingSpeak");
}
// Print values to serial monitor
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
}
else {
Serial.println("Error reading sensor data");
}
// Wait for 1 minute before sending the next request
delay(60000);
}
la api key es publico, no hay problema con ello. lo que necesito es saber como solucionar el problema de que se resetea a veces dando loop de codigo inentendible
wdt reset
load 0x4010f000, len 3424, room 16
tail 0
chksum 0x2e
load 0x3fff20b8, len 40, room 8
tail 0
chksum 0x2b
csum 0x2b
v00050a00
~ld
n r n| l l`bbrl nB nl` rl l
ets Jan 8 2013,rst cause:4, boot mode:(3,6)
wdt reset
load 0x4010f000, len 3424, room 16
tail 0
chksum 0x2e
load 0x3fff20b8, len 40, room 8
tail 0
chksum 0x2b
csum 0x2b
v00050a00
~ld
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x4010f000, len 3424, room 16
tail 0
chksum 0x2e
load 0x3fff20b8, len 40, room 8
tail 0
chksum 0x2b
csum 0x2b
v00050a00
~ld
--------------- CUT HERE FOR EXCEPTION DECODER ---------------
Exception (2):
epc1=0x3ffe9148 epc2=0x00000000 epc3=0x00000000 excvaddr=0x3ffe9148 depc=0x00000000
>>>stack>>>
ctx: sys
sp: 3fffee20 end: 3fffffb0 offset: 0150
3fffef70: 40000e19 000509f7 bff00000 0000bfff
3fffef80: 00000005 aa55aa55 000000ed 401055dd
3fffef90: 401055e3 bff00000 0000bfff 2c000000
3fffefa0: 4010000d bff00000 000509f7 401000ab
3fffefb0: 40232688 3fffef4c 40232641 3ffffee8
3fffefc0: 3fffffd0 00000000 00000000 feefeffe
3fffefd0: feefeffe feefeffe feefeffe feefeffe
3fffefe0: feefeffe feefeffe feefeffe feefeffe
3fffeff0: feefeffe feefeffe feefeffe feefeffe
3ffff000: feefeffe feefeffe feefeffe feefeffe
tengo los baudios a 115200 tanto el arduino como en el codigo.
agradecería su ayuda