#include <WiFi.h>
#include <Wire.h>
#include <PubSubClient.h>
#include <DallasTemperature.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include "DHT.h"
#include <LiquidCrystal.h>
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define TB_SERVER "thingsboard.cloud"
#define TB_PORT 1883
#define TOKEN "XWSRny5ZJuNSvgfN7wK6"
#define DHT22PIN 19
#define BOTtoken "6580569347:AAE1sZLPzQFKEmA2ovl0lnWb3RCsjfxR1yY"
#define CHAT_ID "1190686549"
LiquidCrystal lcd(21, 23, 12, 14, 27, 26);
DHT dht(DHT22PIN, DHT22);
WiFiClient wifiClient;
PubSubClient tbClient(wifiClient);
UniversalTelegramBot bot(BOTtoken, wifiClient);
int buzzer = 18;
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
tbClient.setServer(TB_SERVER, TB_PORT);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Halo Tuan ");
lcd.setCursor(0, 1);
lcd.print("Harits FishTank");
pinMode(buzzer, OUTPUT);
dht.begin();
bot.sendMessage(CHAT_ID, "Selamat datang di Harits project");
connectToThingsBoard();
}
void loop() {
if (!tbClient.connected()) {
connectToThingsBoard();
}
tbClient.loop();
float humi = dht.readHumidity();
float temp = dht.readTemperature();
Serial.print("Temperature: ");
Serial.print(temp);
Serial.print("ºC ");
Serial.print("Humidity: ");
Serial.println(humi);
// Send data to ThingsBoard
String payload = String("{\"temperature\":") + temp + ",\"humidity\":" + humi + "}";
tbClient.publish("v1/devices/me/telemetry", (char*) payload.c_str());
if (temp > 34) {
lcd.clear();
tone(buzzer, 200);
lcd.setCursor(0, 0);
lcd.print("suhu aquarium ");
lcd.setCursor(0, 1);
lcd.print("terlalu panas ");
bot.sendMessage(CHAT_ID, "Suhu aquarium terlalu panas");
tone(buzzer, 200);
delay(1000);
tone(buzzer, 250);
delay(1000);
} else if (temp < 22) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("suhu aquarium");
lcd.setCursor(0, 1);
lcd.print("terlalu dingin");
bot.sendMessage(CHAT_ID, "Suhu Aquarium terlalu dingin");
tone(buzzer, 200);
delay(1000);
tone(buzzer, 250);
delay(1000);
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("suhu aquarium");
lcd.setCursor(0, 1);
lcd.print(" normal");
bot.sendMessage(CHAT_ID, "Suhu aquarium Normal");
}
delay(1000);
}
void connectToThingsBoard() {
while (!tbClient.connected()) {
Serial.print("Attempting MQTT connection...");
if (tbClient.connect("ESP32Client", "token", TOKEN)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(tbClient.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}