Me demoré en escribir debido a las pruebas realizadas, les comento que se realizaron unos cambios por otras sugerencias incluido además de las tuyas agregar un borrado de memoria al final del código.
Este código llegó a 10.834 inserciones de información en la base de datos cada 8 segundos aproximadamente y volvió a mi temible
, luego se detuvo, solo con reset manual retoma el proceso, ningún reset programado me ha funcionado en otras pruebasQuery:
Código usado:
Código: Seleccionar todo
#include <TimeLib.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <WiFiClient.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2// DS18B20 Data Pin
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// MySQL
IPAddress server_addr(XXX,XX,XX,XXX); // MySQL SERVER
char user[] = "USERNAME"; // MySQL USERNAME
char password[] = "PASWWW"; // MySQL PASSWORD
char INSERT_DATA[] = "INSERT INTO mibasededatos.mitabla (valor1, valor2, tiempo) VALUES (%s, %s, NOW() + INTERVAL 1 HOUR)";
char query[200]; //aumenté de 128 a 200 por recomendación
char temperatura1[10];
char temperatura2[10];
//inicionuevo con millis y reset
//unsigned long previousMillis = 0;
// WiFi
char ssid[] = "RED WIFI"; // SSID NAME
char pass[] = "Clave wifi"; // SSID PASSWORD
WiFiClient client;
MySQL_Connection conn((Client *)&client);
void conectarWifi(){
// wi fi
WiFi.begin(ssid, pass);
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() );
}
void setup() {
Serial.begin(115200);
conectarWifi();
sensors.begin();
}
void saveTempData() {
if(WiFi.status() != WL_CONNECTED) conectarWifi();
Serial.println("DB - Connecting...");
while (conn.connect(server_addr, 3306, user, password) != true) {
delay(1000);
Serial.print (".");
}
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
// Sensores
sensors.requestTemperatures();
//Serial.print("Temp 1: ");
//Serial.println(temperatura1); //Serial.println(sensors.getTempCByIndex(0));
//Serial.print("Temp 2: ");
//Serial.println(temperatura2); //Serial.println(sensors.getTempCByIndex(1));
Serial.print("Query: ");
dtostrf(sensors.getTempCByIndex(0), 4, 2, temperatura1);
dtostrf(sensors.getTempCByIndex(1), 4, 2, temperatura2);
sprintf(query, INSERT_DATA, temperatura1, temperatura2);
cur_mem->execute(query);
Serial.println(query);
delete cur_mem;
Serial.println("Datos Almacenados!");
delay(3000);
}
void loop() {
//if (millis() > 3600000) { // 3600000 * 1 = 1h
// ESP.reset();
// }
saveTempData();
Serial.print(F("Memoria libre: "));
Serial.print(ESP.getFreeHeap() / 1024);
Serial.println("KB");
}