Upload files to "final.ino"
This commit is contained in:
commit
b8de4ed97a
|
@ -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);
|
||||||
|
}
|
Loading…
Reference in New Issue