/**
ESP32 + DHT22 Example for Wokwi
https://wokwi.com/arduino/projects/322410731508073042
*/
#include <WiFi.h>
#include "DHTesp.h"
#include "ThingSpeak.h"
#include <LiquidCrystal_I2C.h>
const int DHT_PIN = 13;
#define D1 25
#define D2 26
#define D3 27
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const int ID = 2316248;
const char* myApiKeyw = "AKNHQ0VNFPIR6CZJ";
const char* myApiKeyr = "8TS2IDFF3DG77QVK";
const char* server = "api.thingspeak.com";
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHTesp dhtSensor;
WiFiClient client;
//1,2 and 3 are ID fields. You don't need to change if you are following this tutorial. However, you can modify it according to your application
unsigned int resetonline = 4;
unsigned int led2 = 5;
unsigned int led3 = 6;
int erreur = 0;
void (*resetFunc)(void) = 0;
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(D3, OUTPUT);
digitalWrite(D1, 0);
digitalWrite(D2, 0);
digitalWrite(D3, 0);
pinMode(15, OUTPUT);
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED){
delay(1000);
Serial.println("Wifi not connected");
}
Serial.println("Wifi connected !");
Serial.println("Local IP: " + String(WiFi.localIP()));
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
lcd.init();
lcd.backlight();
lcd.setCursor(2,0);
lcd.print("Hello ThingSpeak");
lcd.setCursor(0,1);
lcd.print("ST Meteo");
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
if(data.temperature<-10 || data.temperature>80){
erreur = 555;
Serial.println(erreur);
}
else{
erreur = 0;
}
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp: " + String(data.temperature, 2) + " C");
lcd.setCursor(0,1);
lcd.print("Humidity: " + String(data.humidity, 1) + "%");
delay(2000);
//TempAndHumidity data = dhtSensor.getTempAndHumidity();
ThingSpeak.setField(1,data.temperature);
ThingSpeak.setField(2,data.humidity);
ThingSpeak.setField(7,erreur);
if (data.temperature > 35 || data.temperature < 12 || data.humidity > 70 || data.humidity < 40) {
digitalWrite(15, HIGH);
}else{
digitalWrite(15, LOW);
}
int x = ThingSpeak.writeFields(ID,myApiKeyw);
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 3) + "%");
if(x == 200){
Serial.println("Data pushed successfull");
}else{
Serial.println("Push error" + String(x));
}
delay(2000);
//get the last data of the fields
int reset_online = ThingSpeak.readFloatField(ID, resetonline);
int led_2 = ThingSpeak.readFloatField(ID, led2);
int led_3 = ThingSpeak.readFloatField(ID, led3);
if(reset_online == 1){
digitalWrite(D1, 1);
Serial.println("D1 is On..!");
}
else if(reset_online == 0){
digitalWrite(D1, 0);
Serial.println("D1 is Off..!");
delay((500));
resetFunc();
}
if(led_2 == 1){
digitalWrite(D2, 1);
Serial.println("D2 is On..!");
}
else if(led_2 == 0){
digitalWrite(D2, 0);
Serial.println("D2 is Off..!");
}
if(led_3 == 1){
digitalWrite(D3, 1);
Serial.println("D3 is On..!");
}
else if(led_3 == 0){
digitalWrite(D3, 0);
Serial.println("D3 is Off..!");
}
Serial.println("---");
Serial.println(reset_online);
Serial.println(led_2);
Serial.println(led_3);
Serial.println("---");
delay(10000);
}