He estado haciendo un proyecto para poder ver desde una página web las temperaturas de dos sensores desde cualquier parte, se muy poco sobre programación y comprenderán mi titánica idea de modificar cualquier código...
El sistema se compone de:
1 módulo ESP8266
2 Sensores DS18B20
1 Elevador de potencia (ya que si conectas más de 1 sensor directamente desde la salida ESP, surgen mediciones erradas)
Los problemas encontrados durante el desarrollo han sido varios (debido a mi desconocimiento), el más relevantes son:
Cuando usé el primer sketch funcional, si la red WIFi se reiniciaba o simplemente se cambiaba la IP dinámica, no ingresaba más info a la base de datos
Solución temporal: este lo solucioné con el siguiente código, que es el que llevo por el momento.
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,xxx,xx,xx); // MySQL SERVER
char user[] = "USERNAME"; // MySQL USERNAME
char password[] = "Passw"; // MySQL PASSWORD
char INSERT_DATA[] = "INSERT INTO database.tabla (valor1, valor2, tiempo) VALUES (%s, %s, NOW() + INTERVAL 1 HOUR)";
char query[128];
char temperatura1[10];
char temperatura2[10];
// WiFi
char ssid[] = "Nombre de red WIFI"; // SSID NAME
char pass[] = "Clave de red WIFI"; // SSID PASSWORD
WiFiClient client;
MySQL_Connection conn((Client *)&client);
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, pass);
sensors.begin();
}
void saveTempData() {
// wi fi
WiFi.begin(ssid, pass);
sensors.begin();
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() );
Serial.println("DB - Connecting...");
while (conn.connect(server_addr, 3306, user, password) != true) {
delay(500);
Serial.print ( "." );
}
// Sensores
sensors.requestTemperatures();
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
Serial.print("Temp 1: ");
Serial.println(sensors.getTempCByIndex(0));
Serial.print("Temp 2: ");
Serial.println(sensors.getTempCByIndex(1));
Serial.print("Query: ");
dtostrf(sensors.getTempCByIndex(0), 2, 2, temperatura1);
dtostrf(sensors.getTempCByIndex(1), 2, 2, temperatura2);
sprintf(query, INSERT_DATA, temperatura1, temperatura2);
cur_mem->execute(query);
Serial.println(query);
delete cur_mem;
Serial.println("Data stored!");
delay(3000);
}
void loop() {
saveTempData();
}
Investigué y parece que debo usar alguna de las dos opciones que siguen:Connected
IP address: XXX.XXX.X.X
DB - Connecting...
Connected to server version 5.6.41-84.1
Temp 1: 19.81
Temp 2: 19.75
Query: INSERT INTO basededatos.tabla (valor1, valor2, tiempo) VALUES (19.81, 19.75, NOW() + INTERVAL 1 HOUR)
Data stored!
Connected
IP address: XXX.XXX.X.X
DB - Connecting...
Connected to server version 5.6.41-84.1
Temp 1: 19.81
Temp 2: 19.75
Query:
1. Usar Mode Sleep Mode, o Light Sleep Mode (sin embargo para ciclos cortos de recolección de info no lo veo viable)
2. Resetear con ESP.reset(); para que por ejemplo reinicie cada 4 horas o algo así
Mi problema es que no sé como usar este código, como dije mi conocimiento es mínimo
Por último, favor recomendarme un curso arduino on line, me cansé de hacer Frankenstein's (copiar y pegar partes de código para lograr que me funcionen mis proyectos) pero entendiendo muy poco la lógica de los mismos