Hola a todos! Soy nuevo en el foro y hace meses vengo con problema que no logro resolver.
Tengo conectado un módulo esp8266 a arduino uno. La idea es que el esp lee datos de mi servidor web y transmite esos datos al arduino. Luego de que el arduino procesa dichos datos devuelve una respuesta al servidor a través del módulo. Mi problema es que luego de un rato de estar funcionando a la perfección el módulo se queda "colgado" y debo resetearlo para que comience a funcionar nuevamente.
Tengo alimentado al módulo con una fuente externa de 3.3V.
Éste es el scketch del módulo:
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#define DEBUG(a) Serial.println(a);
ESP8266WiFiMulti WiFiMulti;
String valor;
String post;
void setup() {
Serial.begin(9600);
// Serial.setDebugOutput(true);
Serial.printf("Desconectando WiFi");
WiFi.disconnect();
delay(5000);
Serial.printf("Conectando WiFi");
WiFi.mode(WIFI_STA);
WiFiMulti.addAP("Fibertel WiFi895 2.4GHz", "00428447850");
}
void loop() {
// wait for WiFi connection
if ((WiFiMulti.run() == WL_CONNECTED)) {
WiFiClient client;
HTTPClient http;
// Serial.print("[HTTP] begin...\n");
if (http.begin(client, "http://mi_web/index.php")) { // HTTP
// Serial.print("[HTTP] GET...\n");
// start connection and send HTTP header
int httpCode = http.GET();
// httpCode will be negative on error
if (httpCode > 0) {
String data = http.getString();
//manipulamos la string data
int index = data.indexOf("\"estatus\"");
if (index !=-1){
index +=28;
int index2 = data.indexOf("\"", index);
valor = data.substring(index, index2);
}
//Serial.print("El valor es:");
Serial.println(valor);
} else {
Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
exit(0);
}
http.end();
} else {
Serial.printf("[HTTP} Unable to connect\n");
}
}
delay(5000);
// Respuesta de arduino
lectura_serial();
delay(5000);
}
void lectura_serial(){
if(Serial.available() >0)
{
char c; int n; String dato;
while(Serial.available() > 0)
{
c = Serial.read();
n = c;
if(n >13){dato += c;}
delay (10);
}
if(dato == "Led1On")
{
post = "Led1On";
POST();
}
if(dato == "Led1OFF")
{
post = "Led1OFF";
POST();
}
if(dato == "Led2On")
{
post = "Led2On";
POST();
}
if(dato == "Led2OFF")
{
post = "Led2OFF";
POST();
}
if(dato == "AutomaticoOn")
{
post = "AutomaticoOn";
POST();
}
}
}
void POST(){
WiFiClient client;
HTTPClient http;
Serial.print("[HTTP] begin...\n");
// configure traged server and url
http.begin(client, "http://my_web/accion.php"); //HTTP
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
String datos_a_enviar = "nombre=" + post;
Serial.print(datos_a_enviar);
Serial.print("[HTTP] POST...\n");
// start connection and send HTTP header and body
int httpCode = http.POST(datos_a_enviar);
// httpCode will be negative on error
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
Serial.printf("[HTTP] POST... code: %d\n", httpCode);
// file found at server
if (httpCode == HTTP_CODE_OK) {
const String& payload = http.getString();
Serial.println("received payload:\n<<");
Serial.println(payload);
Serial.println(">>");
}
} else {
Serial.printf("[HTTP] POST... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
Alguna sugerencia para resolver mi problema? Gracias!!!