#include <WiFi.h>
#include <DHT.h>
#include <PubSubClient.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ThingsBoard
const char* mqttServer = "thingsboard.cloud";
const int mqttPort = 1883;
const char* accessToken = "XEBJqLwvinRaEZTNMhAi";
// Telegram
const String botToken = "6487425617:AAHi02Fb88OeGGcZx-Kxm4TiW3mKNURVGE4";
const String chatId = "1891069582";
const int dhtPinA = 15; // DHT22 Tanaman Tomat (kiri)
const int dhtPinB = 2; // DHT22 Tumbuhan Cabai (kanan)
// Ambang batas temperature dan humidity
const float tempMinA = 25.0; // Minimum temperature Tanaman Tomat
const float tempMaxA = 30.0; // Maximum temperature Tanaman Tomat
const float humMinA = 70.0; // Minimum humidity Tanaman Tomat
const float humMaxA = 80.0; // Maximum humidity Tanaman Tomat
const float tempMinB = 30.0; // Minimum temperature Tumbuhan Cabai
const float tempMaxB = 35.0; // Maximum temperature Tumbuhan Cabai
const float humMinB = 80.0; // Minimum humidity Tumbuhan Cabai
const float humMaxB = 90.0; // Maximum humidity Tumbuhan Cabai
DHT dhtA(dhtPinA, DHT22);
DHT dhtB(dhtPinB, DHT22);
WiFiClient espClient;
PubSubClient client(espClient);
HTTPClient http;
void reconnect() {
while (!client.connected()) {
Serial.print("Mencoba koneksi MQTT...");
if (client.connect("ESP8266Client", accessToken, NULL)) {
Serial.println("terhubung");
} else {
Serial.print("gagal, rc=");
Serial.print(client.state());
Serial.println(" coba lagi dalam 5 detik");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
dhtA.begin();
dhtB.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
client.setServer(mqttServer, mqttPort);
reconnect();
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
float humidityA = dhtA.readHumidity();
float temperatureA = dhtA.readTemperature();
float humidityB = dhtB.readHumidity();
float temperatureB = dhtB.readTemperature();
if (!(isnan(humidityA) || isnan(temperatureA) || isnan(humidityB) || isnan(temperatureB))) {
// Kirim data ke ThingsBoard
String payload = "{\"temperatureA\":" + String(temperatureA) + ",\"humidityA\":" + String(humidityA) +
",\"temperatureB\":" + String(temperatureB) + ",\"humidityB\":" + String(humidityB) + "}";
client.publish("v1/devices/me/telemetry", payload.c_str());
// Membangun notifikasi untuk tanaman tomat dan cabai
String messageA = "Tumbuhan Tomat - Temperature: " + String(temperatureA) + "°C, Humidity: " + String(humidityA) + "%";
if ((temperatureA < tempMinA || temperatureA > tempMaxA) && (humidityA < humMinA || humidityA > humMaxA)) {
messageA += " Warning: Suhu dan kelembapan diluar kondisi optimal.";
} else if (temperatureA < tempMinA || temperatureA > tempMaxA) {
messageA += " Warning: Suhu diluar kondisi optimal.";
} else if (humidityA < humMinA || humidityA > humMaxA) {
messageA += " Warning: Kelembapan diluar kondisi optimal.";
} else {
messageA += " Pesan: Kondisi optimal.";
}
String messageB = "Tumbuhan Cabai - Temperature: " + String(temperatureB) + "°C, Humidity: " + String(humidityB) + "%";
if ((temperatureB < tempMinB || temperatureB > tempMaxB) && (humidityB < humMinB || humidityB > humMaxB)) {
messageB += " Warning: Suhu dan kelembapan diluar kondisi optimal.";
} else if (temperatureB < tempMinB || temperatureB > tempMaxB) {
messageB += " Warning: Suhu diluar kondisi optimal.";
} else if (humidityB < humMinB || humidityB > humMaxB) {
messageB += " Warning: Kelembapan diluar kondisi optimal.";
} else {
messageB += " Pesan: Kondisi optimal.";
}
// Kirim notifikasi ke Telegram
sendTelegramMessage(messageA);
sendTelegramMessage(messageB);
}
delay(60000); // Delay antar loop
}
void sendTelegramMessage(String message) {
if(WiFi.status() == WL_CONNECTED) {
String serverPath = "https://api.telegram.org/bot" + botToken + "/sendMessage";
http.begin(serverPath);
http.addHeader("Content-Type", "application/json");
// JSON body of the request
StaticJsonDocument<200> jsonBuffer;
jsonBuffer["chat_id"] = chatId;
jsonBuffer["text"] = message;
String requestBody;
serializeJson(jsonBuffer, requestBody);
int httpResponseCode = http.POST(requestBody);
if (httpResponseCode > 0) {
String response = http.getString();
Serial.println("HTTP Response code: " + String(httpResponseCode));
Serial.println("Response: " + response);
} else {
Serial.println("Error on sending POST: " + String(httpResponseCode));
}
http.end();
}
else {
Serial.println("WiFi Disconnected");
}
}