#include <DHTesp.h>
#include <Wire.h>
#include <WiFi.h>
#include <ThingsBoard.h>
#include <Arduino_MQTT_Client.h>
#include <ArduinoOTA.h>
#include <LiquidCrystal_I2C.h>
// I2C
#define I2C_SDA 21
#define I2C_SCL 22
// LCD
#define LCD_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_ROWS 2
LiquidCrystal_I2C lcd(LCD_ADDR, LCD_COLUMNS, LCD_ROWS);
// DHT SENSOR
#define DHTTYPE DHT22
#define DHT_PIN 15
DHTesp dhtSensor;
// Variables
float energyUsed = 0.0;
// WiFi credentials
#define WIFI_AP "Wokwi-GUEST"
#define WIFI_PASS ""
// ThingsBoard credentials
#define TB_SERVER "thingsboard.cloud"
#define TOKEN "9LB809sCP3GtVsXL9Crw"
constexpr uint16_t MAX_MESSAGE_SIZE = 128U;
WiFiClient espClient;
Arduino_MQTT_Client mqttClient(espClient);
ThingsBoard tb(mqttClient, MAX_MESSAGE_SIZE);
void connectToWiFi() {
Serial.println("Connecting to WiFi...");
WiFi.begin(WIFI_AP, WIFI_PASS);
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 20) {
delay(500);
Serial.print(".");
attempts++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nConnected to WiFi");
} else {
Serial.println("\nFailed to connect to WiFi.");
}
}
void connectToThingsBoard() {
if (!tb.connected()) {
Serial.println("Connecting to ThingsBoard server...");
if (!tb.connect(TB_SERVER, TOKEN)) {
Serial.println("Failed to connect to ThingsBoard");
} else {
Serial.println("Connected to ThingsBoard");
}
}
}
void sendDataToThingsBoard(float temp, int hum) {
String jsonData = "{\"temperature\":" + String(temp) + ", \"humidity\":" + String(hum) + "}";
tb.sendTelemetryJson(jsonData.c_str());
Serial.println("Data sent");
}
void setup() {
Serial.begin(115200);
// Configurer les broches I2C
Wire.begin(I2C_SDA, I2C_SCL);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
lcd.begin(LCD_COLUMNS, LCD_ROWS);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Energy Used:");
delay(1000); // Petit délai pour s'assurer que l'écran LCD est prêt
connectToWiFi();
connectToThingsBoard();
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
connectToWiFi();
}
if (!tb.connected()) {
connectToThingsBoard();
}
energyUsed += 0.01;
// Effacer l'écran avant d'afficher la nouvelle valeur
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Energy Used:");
// Afficher l'énergie utilisée sur l'écran LCD
lcd.setCursor(0, 1);
lcd.print(energyUsed, 2); // Afficher avec 2 décimales
lcd.print(" kWh");
TempAndHumidity data = dhtSensor.getTempAndHumidity();
float temp = data.temperature;
int hum = data.humidity;
Serial.print("Temperature: ");
Serial.print(temp);
Serial.print(" C, Humidity: ");
Serial.print(hum);
Serial.println(" %");
sendDataToThingsBoard(temp, hum);
tb.loop();
delay(3000);
}