Upload files to "final.ino"

This commit is contained in:
IndraWIjaya 2024-07-22 12:06:42 +07:00
commit b8de4ed97a
1 changed files with 281 additions and 0 deletions

281
final.ino/final3.ino Normal file
View File

@ -0,0 +1,281 @@
#include <WiFi.h>
#include <Wire.h>
#include <RTClib.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <UniversalTelegramBot.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <ArduinoJson.h>
#include <WiFiClientSecure.h>
// Definitions and initializations
RTC_DS3231 rtc;
unsigned long BotLastMessageReceivedTime;
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define RELAY1_PIN 27
#define RELAY2_PIN 32
#define RELAY3_PIN 18
#define RELAY4_PIN 33
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define CHAT_ID "6261768108"
#define BOT_TOKEN "7346491961:AAEE0IcO8oXWjEWRCRyFR5HyHSlrtjzjAgk"
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
const char* ssid = "Bismillah";
const char* password = "Alhamdulillah";
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 25200, 60000); // 25200 for GMT+7 (WIB)
// Variables to store relay states
bool relay1ManualMode = false;
bool relay2ManualMode = false;
bool relay3ManualMode = false;
bool relay4ManualMode = false;
// Variables to store manual schedules
int relay4Hour = 20;
int relay4MinuteStart = 50;
int relay4MinuteEnd = 0;
// Function to handle new messages from the Telegram bot
void handleNewMessages(int numNewMessages) {
Serial.println("handleNewMessages");
for (int i = 0; i < numNewMessages; i++) {
String text = bot.messages[i].text;
Serial.println(text);
String from_name = bot.messages[i].from_name;
if (text == "/start") {
String welcome = "Selamat datang di Bot Pengontrol Relay!\n";
welcome += "Gunakan perintah-perintah berikut untuk mengontrol relay:\n\n";
welcome += "/relay1_on untuk mengaktifkan Sprayer\n";
welcome += "/relay1_off untuk menonaktifkan Sprayer\n";
welcome += "/relay1_manual untuk mengatur Sprayer ke mode manual\n";
welcome += "/relay1_auto untuk mengatur Sprayer ke mode otomatis\n";
welcome += "/relay2_on untuk mengaktifkan Kipas\n";
welcome += "/relay2_off untuk menonaktifkan Kipas\n";
welcome += "/relay2_manual untuk mengatur Kipas ke mode manual\n";
welcome += "/relay2_auto untuk mengatur Kipas ke mode otomatis\n";
welcome += "/relay3_on untuk mengaktifkan Lampu UV\n";
welcome += "/relay3_off untuk menonaktifkan Lampu UV\n";
welcome += "/relay3_manual untuk mengatur Lampu UV ke mode manual\n";
welcome += "/relay3_auto untuk mengatur Lampu UV ke mode otomatis\n";
welcome += "/relay4_on untuk mengaktifkan Irigasi\n";
welcome += "/relay4_off untuk menonaktifkan Irigasi\n";
welcome += "/relay4_manual untuk mengatur Irigasi ke mode manual\n";
welcome += "/relay4_auto untuk mengatur Irigasi ke mode otomatis\n";
welcome += "/set_relay4_schedule HH:MM HH:MM untuk mengatur jadwal Irigasi\n";
welcome += "/suhu untuk melihat suhu saat ini\n";
bot.sendMessage(CHAT_ID, welcome, "");
}
else if (text == "/relay1_on") {
digitalWrite(RELAY1_PIN, HIGH);
relay1ManualMode = true;
bot.sendMessage(CHAT_ID, "Sprayer telah diaktifkan.", "");
}
else if (text == "/relay1_off") {
digitalWrite(RELAY1_PIN, LOW);
relay1ManualMode = true;
bot.sendMessage(CHAT_ID, "Sprayer telah dinonaktifkan.", "");
}
else if (text == "/relay1_manual") {
relay1ManualMode = true;
bot.sendMessage(CHAT_ID, "Sprayer diatur ke mode manual.", "");
}
else if (text == "/relay1_auto") {
relay1ManualMode = false;
bot.sendMessage(CHAT_ID, "Sprayer diatur ke mode otomatis.", "");
}
else if (text == "/relay2_on") {
digitalWrite(RELAY2_PIN, HIGH);
relay2ManualMode = true;
bot.sendMessage(CHAT_ID, "Kipas telah diaktifkan.", "");
}
else if (text == "/relay2_off") {
digitalWrite(RELAY2_PIN, LOW);
relay2ManualMode = true;
bot.sendMessage(CHAT_ID, "Kipas telah dinonaktifkan.", "");
}
else if (text == "/relay2_manual") {
relay2ManualMode = true;
bot.sendMessage(CHAT_ID, "Kipas diatur ke mode manual.", "");
}
else if (text == "/relay2_auto") {
relay2ManualMode = false;
bot.sendMessage(CHAT_ID, "Kipas diatur ke mode otomatis.", "");
}
else if (text == "/relay3_on") {
digitalWrite(RELAY3_PIN, HIGH);
relay3ManualMode = true;
bot.sendMessage(CHAT_ID, "Lampu UV telah diaktifkan.", "");
}
else if (text == "/relay3_off") {
digitalWrite(RELAY3_PIN, LOW);
relay3ManualMode = true;
bot.sendMessage(CHAT_ID, "Lampu UV telah dinonaktifkan.", "");
}
else if (text == "/relay3_manual") {
relay3ManualMode = true;
bot.sendMessage(CHAT_ID, "Lampu UV diatur ke mode manual.", "");
}
else if (text == "/relay3_auto") {
relay3ManualMode = false;
bot.sendMessage(CHAT_ID, "Lampu UV diatur ke mode otomatis.", "");
}
else if (text == "/relay4_on") {
digitalWrite(RELAY4_PIN, HIGH);
relay4ManualMode = true;
bot.sendMessage(CHAT_ID, "Irigasi telah diaktifkan.", "");
}
else if (text == "/relay4_off") {
digitalWrite(RELAY4_PIN, LOW);
relay4ManualMode = true;
bot.sendMessage(CHAT_ID, "Irigasi telah dinonaktifkan.", "");
}
else if (text == "/relay4_manual") {
relay4ManualMode = true;
bot.sendMessage(CHAT_ID, "Irigasi diatur ke mode manual.", "");
}
else if (text == "/relay4_auto") {
relay4ManualMode = false;
bot.sendMessage(CHAT_ID, "Irigasi diatur ke mode otomatis.", "");
}
else if (text.startsWith("/set_relay4_schedule")) {
int hour, startMinute, endMinute;
if (sscanf(text.c_str(), "/set_relay4_schedule %d:%d %d:%d", &hour, &startMinute, &hour, &endMinute) == 4) {
relay4Hour = hour;
relay4MinuteStart = startMinute;
relay4MinuteEnd = endMinute;
bot.sendMessage(CHAT_ID, "Jadwal Irigasi telah diubah.", "");
} else {
bot.sendMessage(CHAT_ID, "Format jadwal tidak valid. Gunakan /set_Irigasi_schedule HH:MM HH:MM", "");
}
}
else if (text == "/suhu") {
float currentTemperature = dht.readTemperature();
if (!isnan(currentTemperature)) {
String message = "Suhu saat ini: " + String(currentTemperature) + " °C";
bot.sendMessage(CHAT_ID, message, "");
} else {
bot.sendMessage(CHAT_ID, "Gagal membaca suhu dari sensor DHT!", "");
}
}
}
}
// Function to connect to WiFi
void connectToWiFi() {
Serial.println("Connecting to WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Attempting to connect to WiFi...");
}
Serial.println("Connected to WiFi");
}
// Setup function
void setup() {
Serial.begin(115200);
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(RELAY3_PIN, OUTPUT);
pinMode(RELAY4_PIN, OUTPUT);
dht.begin();
Serial.println("Sensor DHT diinisialisasi");
lcd.init();
lcd.backlight();
connectToWiFi();
secured_client.setInsecure(); // Disable certificate validation
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
// Initialize NTPClient
timeClient.begin();
while (!timeClient.update()) {
timeClient.forceUpdate();
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, let's set the time!");
// Get time from NTPClient
timeClient.update();
unsigned long epochTime = timeClient.getEpochTime();
rtc.adjust(DateTime(epochTime));
}
bot.sendMessage(CHAT_ID, "Bot started up", "");
}
// Loop function
void loop() {
float temperature = dht.readTemperature();
if (!isnan(temperature)) {
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
if (!relay1ManualMode) {
digitalWrite(RELAY1_PIN, temperature > 32 ? HIGH : LOW);
}
if (!relay2ManualMode) {
digitalWrite(RELAY2_PIN, (temperature > 31 && temperature <= 32) ? HIGH : LOW);
}
if (!relay3ManualMode) {
digitalWrite(RELAY3_PIN, temperature < 28 ? HIGH : LOW);
}
} else {
Serial.println("Gagal membaca suhu dari sensor DHT!");
}
DateTime now = rtc.now();
Serial.print("Current time: ");
Serial.print(now.hour());
Serial.print(":");
Serial.println(now.minute());
if (!relay4ManualMode) {
digitalWrite(RELAY4_PIN, (now.hour() == relay4Hour && now.minute() >= relay4MinuteStart && now.minute() <= relay4MinuteEnd) ? HIGH : LOW);
}
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
Serial.println("Num : " + String(numNewMessages));
if (numNewMessages) {
handleNewMessages(numNewMessages);
}
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("R1");
lcd.print(digitalRead(RELAY1_PIN) ? "ON" : "OF");
lcd.print("R2");
lcd.print(digitalRead(RELAY2_PIN) ? "ON" : "OF");
lcd.print("R3");
lcd.print(digitalRead(RELAY3_PIN) ? "ON" : "OF");
lcd.print("R4");
lcd.print(digitalRead(RELAY4_PIN) ? "ON" : "OF");
delay(1000);
}