Hemos hecho un programa con Arduino IDE para la ESP-32 WROOM-32. El código es el siguiente:
//Programa adaptado del original https://youtu.be/LMTtIC2jKUg?feature=shared del canal Ingeniero en casa
#include "ThingSpeak.h"
#include "WiFi.h"
#include "DHT.h"
#include "Adafruit_BMP085.h"
#define pin1 13 //Pin del DHT11.
const char* ssid = "Andared_IoT"; //SSID de vuestro router.
const char* password = ""; //Contraseña de vuestro router.
unsigned long channelID = 2900930; //ID de vuestro canal.
const char* WriteAPIKey = "CTPDCV8GLHVK9RP5"; //Write API Key de vuestro canal.
WiFiClient cliente;
DHT dht1(pin1, DHT11); //El azul.
Adafruit_BMP085 bmp;
unsigned long previousMillis = 0; //variables de tiempo
unsigned long interval = 30000;
void setup() {
Serial.begin(115200);
Serial.println("Test de sensores:");
dht1.begin();
bmp.begin();WiFi.begin(ssid,password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Wifi conectado!");
ThingSpeak.begin(cliente);
}
void loop() {
//Instrucciones añadidas la programa original para solucionar el problema de la desconexión
unsigned long currentMillis = millis();
if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
Serial.println("Reconnecting to WiFi...");
WiFi.disconnect();
WiFi.reconnect();
previousMillis = currentMillis;
}
delay(2000);
leerdht1();
delay(2000);
leerbmp();
ThingSpeak.writeFields(channelID,WriteAPIKey);
Serial.println("Datos enviados a ThingSpeak!");
delay(60000);
}
void leerdht1() {
float t1 = dht1.readTemperature();
float h1 = dht1.readHumidity();
while (isnan(t1) || isnan(h1)){
Serial.println("Lectura fallida en el sensor DHT11, repitiendo lectura...");
delay(2000);
t1 = dht1.readTemperature();
h1 = dht1.readHumidity();
}
Serial.print("Temperatura DHT11: ");
Serial.print(t1);
Serial.println(" ºC.");
Serial.print("Humedad DHT11: ");
Serial.print(h1);
Serial.println(" %.");
Serial.println("-----------------------");
ThingSpeak.setField (1,t1);
ThingSpeak.setField (2,h1);
}
void leerbmp() {
float presion = bmp.readPressure();
Serial.print("Presión bmp: ");
Serial.print(presion);
Serial.println(" Pa.");
Serial.println("-----------------------");
ThingSpeak.setField (3,presion);
}