#include <WiFi.h>
#include <PubSubClient.h>
#include <ThingsBoard.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
// LCD
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
// DHT SENSOR
#define DHTTYPE DHT22
#define DHT_PIN 15
DHT dht(DHT_PIN, DHTTYPE);
// LED Pins
constexpr int LED_PIN1 = 25;
constexpr int LED_PIN2 = 33;
constexpr int LED_PIN3 = 32;
constexpr int LED_PIN4 = 26;
constexpr int LED_PIN5 = 27;
// WiFi and ThingsBoard Configuration
constexpr char WIFI_SSID[] = "Wokwi-GUEST";
constexpr char WIFI_PASSWORD[] = "";
constexpr char TOKEN[] = "tTzl84GTKi0673f9e4h9"; // توکن معتبر ThingsBoard
constexpr char THINGSBOARD_SERVER[] = "thingsboard.cloud";
constexpr uint16_t THINGSBOARD_PORT = 1883U;
constexpr uint32_t SERIAL_DEBUG_BAUD = 115200U;
// Variables
WiFiClient espClient;
PubSubClient mqttClient(espClient); // PubSubClient برای MQTT
ThingsBoard tb(mqttClient); // ThingsBoard با PubSubClient مقداردهی میشود
void setup() {
Serial.begin(SERIAL_DEBUG_BAUD);
lcd.begin(LCD_COLUMNS, LCD_LINES);
dht.begin();
// تنظیمات پایههای LED
pinMode(LED_PIN1, OUTPUT);
pinMode(LED_PIN2, OUTPUT);
pinMode(LED_PIN3, OUTPUT);
pinMode(LED_PIN4, OUTPUT);
pinMode(LED_PIN5, OUTPUT);
// فعال کردن WiFi فقط در محیط واقعی
#ifndef WOKWI
InitWiFi();
#endif
}
void loop() {
// بررسی اتصال WiFi
#ifndef WOKWI
if (WiFi.status() != WL_CONNECTED) {
InitWiFi();
}
// اتصال به ThingsBoard
if (!tb.connected()) {
if (!tb.connect(THINGSBOARD_SERVER, TOKEN, THINGSBOARD_PORT)) {
Serial.println("Failed to connect");
return;
}
}
#endif
// خواندن مقادیر حسگر DHT
float h = dht.readHumidity();
float t = dht.readTemperature();
// ارسال دادهها به ThingsBoard در محیط واقعی
#ifndef WOKWI
tb.sendTelemetryData("tempIndoor", t);
tb.sendTelemetryData("humidity", h);
#endif
// نمایش مقادیر روی LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(h);
lcd.print(" %");
delay(2000);
}
void InitWiFi() {
Serial.println("Connecting to WiFi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to WiFi");
}