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, si está en D4 es "ONE_WIRE_BUS 2", si está en D2 es "ONE_WIRE_BUS 4"
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// MySQL
IPAddress server_addr(XXX,XXX,XX,XXX); // MySQL SERVER
char user[] = "USERNAME"; // MySQL USERNAME
char password[] = "PSWW"; // MySQL PASSWORD
char INSERT_DATA[] = "INSERT INTO database.table (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[] = WIFI"; // SSID NAME
char pass[] = "CLAVEWIFI"; // SSID PASSWORD
WiFiClient client;
MySQL_Connection conn((Client *)&client);
// CAMBIO2, añado esta función:
void ftoa(char *a, double f, int precision)
{
long p[] = {0,10,100,1000,10000,100000,1000000,10000000,100000000};
long heiltal = (long)f;
itoa(heiltal, a, 10);
while (*a != '\0') a++;
*a++ = '.';
long desimal = abs((long)((f - heiltal) * p[precision]));
itoa(desimal, a, 10);
}
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();
}
void saveTempData() {
Serial.println("DB - Connecting...");
if (conn.connect(server_addr, 3306, user, password)) {
// delay(500); // CAMBIO! - comentado para que el delay se ejecute en el loop.
sensors.requestTemperatures();
Serial.print("Query: ");
ftoa(temperatura1, sensors.getTempCByIndex(0), 2); // CAMBIO2!
ftoa(temperatura2, sensors.getTempCByIndex(1), 2); // CAMBIO2!
sprintf(query, INSERT_DATA, temperatura1, temperatura2);
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);//nuevo sitio
if (!cur_mem->execute(query)){ // Si se resetease siempre, probar a quitar este IF.
ESP.reset();
}
Serial.println(query);
delete (cur_mem); // CAMBIO!
conn.close();
Serial.println("Datos Almacenados!");
delay(55000);
}
else {
Serial.println("No se conectó a DB");
}
}
void loop() {
if(WiFi.status() != WL_CONNECTED) conectarWifi();
sensors.begin();
saveTempData();
delay(1000); // CAMBIO!
Serial.print(F("Memoria libre: "));
Serial.print(ESP.getFreeHeap() / 1024);
Serial.println("KB");
}
Si no funciona o no compila te pasaría una manera mas ruprestre, pero mas eficiente y sencilla para tu caso.