Upload files to "/"
This commit is contained in:
commit
cf581c362a
|
@ -0,0 +1,427 @@
|
|||
LAMPIRAN
|
||||
|
||||
Lampiran 1 Source Code
|
||||
|
||||
#include <Wire.h>
|
||||
#include <LiquidCrystal_I2C.h>
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <WiFiClientSecure.h>
|
||||
#include <UniversalTelegramBot.h>
|
||||
#include <ESP8266HTTPClient.h> // Library untuk HTTP request
|
||||
|
||||
// Ganti dengan kredensial WiFi dan token bot Anda
|
||||
const char* ssid = "Oioi"; // Nama WiFi
|
||||
const char* password = "00000001"; // Password WiFi
|
||||
const char* botToken = "7379595880:AAEcQvnXyZzbevsMvtjam-
|
||||
uNWFrJ7ZCu8tM"; // Token Telegram Bot
|
||||
const char* chatID = "5060163371"; // ID chat untuk pengiriman
|
||||
pesan
|
||||
const char* serverName =
|
||||
"http://192.168.137.237/cuacaDB/post.php"; // Alamat server
|
||||
PHP
|
||||
|
||||
LiquidCrystal_I2C lcd(0x27, 16, 2);
|
||||
WiFiClientSecure client;
|
||||
WiFiClient httpClient; // Deklarasi WiFiClient untuk HTTP
|
||||
request
|
||||
UniversalTelegramBot bot(botToken, client);
|
||||
|
||||
const int raindropPin = 2;
|
||||
const int LDRPin = A0;
|
||||
const int buttonPin = D7;
|
||||
const int buzzerPin = D3;
|
||||
#define ENA D8
|
||||
#define IN1 14
|
||||
#define IN2 12
|
||||
#define lamp D0
|
||||
|
||||
bool motorRunning = false;
|
||||
volatile bool buttonPressed = false;
|
||||
bool buzzerOn = false;
|
||||
bool manualLampOff = false;
|
||||
bool manualControl = false;
|
||||
int lastRaindropValue = 1;
|
||||
int lastLDRValue = 0;
|
||||
|
||||
void ICACHE_RAM_ATTR handleButtonPress() {
|
||||
|
||||
1
|
||||
buttonPressed = true;
|
||||
}
|
||||
|
||||
void sendToServer(const String &status) {
|
||||
if (WiFi.status() == WL_CONNECTED) {
|
||||
HTTPClient http;
|
||||
|
||||
// Encode status untuk memastikan tidak ada karakter yang
|
||||
tidak valid dalam URL
|
||||
|
||||
String encodedStatus = urlencode(status);
|
||||
String url = String(serverName) + "?status=" +
|
||||
encodedStatus;
|
||||
|
||||
Serial.print("Connecting to URL: ");
|
||||
Serial.println(url); // Debugging URL
|
||||
|
||||
http.begin(httpClient, url); // Menggunakan WiFiClient
|
||||
dengan URL
|
||||
|
||||
int httpCode = http.GET();
|
||||
|
||||
if (httpCode > 0) {
|
||||
String payload = http.getString();
|
||||
Serial.println("HTTP Response code: " +
|
||||
|
||||
String(httpCode));
|
||||
Serial.println(payload);
|
||||
|
||||
} else {
|
||||
Serial.println("Error on HTTP request");
|
||||
|
||||
}
|
||||
http.end();
|
||||
} else {
|
||||
Serial.println("WiFi not connected");
|
||||
}
|
||||
}
|
||||
|
||||
String urlencode(String str) {
|
||||
String encodedString = "";
|
||||
char c;
|
||||
char code0;
|
||||
char code1;
|
||||
char code2;
|
||||
for (int i = 0; i < str.length(); i++) {
|
||||
c = str.charAt(i);
|
||||
if (c == ' ') {
|
||||
encodedString += '+';
|
||||
} else if (isalnum(c)) {
|
||||
encodedString += c;
|
||||
|
||||
} else {
|
||||
code1 = (c & 0xf) + '0';
|
||||
if ((c & 0xf) > 9) {
|
||||
code1 = (c & 0xf) - 10 + 'A';
|
||||
}
|
||||
c = (c >> 4) & 0xf;
|
||||
code0 = c + '0';
|
||||
if (c > 9) {
|
||||
code0 = c - 10 + 'A';
|
||||
}
|
||||
code2 = '\0';
|
||||
encodedString += '%';
|
||||
encodedString += code0;
|
||||
encodedString += code1;
|
||||
|
||||
}
|
||||
yield();
|
||||
}
|
||||
return encodedString;
|
||||
}
|
||||
|
||||
void setup() {
|
||||
pinMode(LDRPin, INPUT);
|
||||
pinMode(raindropPin, INPUT);
|
||||
pinMode(buttonPin, INPUT_PULLUP);
|
||||
pinMode(buzzerPin, OUTPUT);
|
||||
pinMode(ENA, OUTPUT);
|
||||
pinMode(IN1, OUTPUT);
|
||||
pinMode(IN2, OUTPUT);
|
||||
pinMode(lamp, OUTPUT);
|
||||
digitalWrite(lamp, HIGH);
|
||||
|
||||
lcd.init();
|
||||
lcd.backlight();
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Alat Pendeteksi");
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Hujan");
|
||||
delay(1000);
|
||||
|
||||
lcd.clear();
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Jemuran");
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Otomatis");
|
||||
delay(1000);
|
||||
|
||||
Serial.begin(115200);
|
||||
Serial.println("alat pendeteksi hujan dan jemuran
|
||||
otomatis");
|
||||
delay(1000);
|
||||
|
||||
attachInterrupt(digitalPinToInterrupt(buttonPin),
|
||||
handleButtonPress, FALLING);
|
||||
|
||||
WiFi.begin(ssid, password);
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
|
||||
delay(1000);
|
||||
Serial.println("Menghubungkan ke WiFi...");
|
||||
}
|
||||
Serial.println("Terhubung ke WiFi");
|
||||
|
||||
client.setInsecure();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
int LDRValue = analogRead(LDRPin);
|
||||
int raindropValue = digitalRead(raindropPin);
|
||||
|
||||
Serial.print("Raindrop Sensor Value: ");
|
||||
Serial.println(raindropValue);
|
||||
Serial.print("LDR Sensor Value: ");
|
||||
Serial.println(LDRValue);
|
||||
|
||||
if (buttonPressed) {
|
||||
buttonPressed = false;
|
||||
digitalWrite(buzzerPin, LOW);
|
||||
buzzerOn = false;
|
||||
Serial.println("Button pressed! Buzzer OFF.");
|
||||
delay(200);
|
||||
|
||||
}
|
||||
|
||||
if (!manualControl) {
|
||||
// Menarik jemuran ke dalam jika terdeteksi hujan
|
||||
if (raindropValue == 0 && lastRaindropValue == 1) {
|
||||
digitalWrite(buzzerPin, HIGH);
|
||||
buzzerOn = true;
|
||||
digitalWrite(lamp, LOW);
|
||||
manualLampOff = false;
|
||||
Serial.println("Mengirim notifikasi ke Telegram:
|
||||
Terdeteksi hujan!");
|
||||
|
||||
if (bot.sendMessage(chatID, "Terdeteksi hujan!", "")) {
|
||||
Serial.println("Notifikasi terkirim.");
|
||||
|
||||
} else {
|
||||
Serial.println("Gagal mengirim notifikasi.");
|
||||
|
||||
}
|
||||
|
||||
if (!motorRunning) {
|
||||
motorRunning = true;
|
||||
digitalWrite(IN1, HIGH);
|
||||
digitalWrite(IN2, LOW);
|
||||
analogWrite(ENA, 255);
|
||||
delay(900);
|
||||
digitalWrite(IN1, LOW);
|
||||
digitalWrite(IN2, LOW);
|
||||
analogWrite(ENA, 0);
|
||||
|
||||
lcd.clear();
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Menarik ke dalam");
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Hujan");
|
||||
sendToServer("Menarik ke dalam (Hujan)"); // Kirim
|
||||
data ke server
|
||||
}
|
||||
}
|
||||
// Menarik jemuran ke dalam jika terdeteksi gelap
|
||||
else if (LDRValue > 800 && raindropValue == 1) {
|
||||
if (!manualLampOff) {
|
||||
digitalWrite(lamp, LOW);
|
||||
}
|
||||
if (!motorRunning) {
|
||||
motorRunning = true;
|
||||
digitalWrite(IN1, HIGH);
|
||||
digitalWrite(IN2, LOW);
|
||||
analogWrite(ENA, 255);
|
||||
delay(900);
|
||||
digitalWrite(IN1, LOW);
|
||||
digitalWrite(IN2, LOW);
|
||||
analogWrite(ENA, 0);
|
||||
|
||||
lcd.clear();
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Menarik ke dalam");
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Gelap");
|
||||
|
||||
Serial.println("Mengirim notifikasi ke Telegram:
|
||||
Terdeteksi Gelap.");
|
||||
|
||||
if (bot.sendMessage(chatID, "Terdeteksi Gelap.", ""))
|
||||
{
|
||||
|
||||
Serial.println("Notifikasi terkirim.");
|
||||
} else {
|
||||
|
||||
Serial.println("Gagal mengirim notifikasi.");
|
||||
}
|
||||
sendToServer("Menarik ke dalam (Hujan)"); // Kirim
|
||||
data ke server
|
||||
}
|
||||
}
|
||||
// Menarik jemuran keluar jika cerah dan tidak hujan
|
||||
else if (raindropValue == 1 && LDRValue <= 800 &&
|
||||
motorRunning) {
|
||||
if (!manualLampOff) {
|
||||
digitalWrite(lamp, HIGH);
|
||||
}
|
||||
motorRunning = false;
|
||||
digitalWrite(IN1, LOW);
|
||||
digitalWrite(IN2, HIGH);
|
||||
analogWrite(ENA, 255);
|
||||
delay(900);
|
||||
digitalWrite(IN1, LOW);
|
||||
digitalWrite(IN2, LOW);
|
||||
analogWrite(ENA, 0);
|
||||
|
||||
lcd.clear();
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Menarik keluar");
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Cerah");
|
||||
|
||||
Serial.println("Mengirim notifikasi ke Telegram: Jemuran
|
||||
ditarik keluar.");
|
||||
|
||||
if (bot.sendMessage(chatID, "Jemuran ditarik keluar
|
||||
karena cerah.", "")) {
|
||||
|
||||
Serial.println("Notifikasi terkirim.");
|
||||
} else {
|
||||
|
||||
Serial.println("Gagal mengirim notifikasi.");
|
||||
}
|
||||
sendToServer("Menarik keluar (Cerah)"); // Kirim data ke
|
||||
server
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (LDRValue <= 800 && lastLDRValue > 800) {
|
||||
manualLampOff = false;
|
||||
|
||||
}
|
||||
|
||||
lastRaindropValue = raindropValue;
|
||||
lastLDRValue = LDRValue;
|
||||
|
||||
int numNewMessages =
|
||||
bot.getUpdates(bot.last_message_received + 1);
|
||||
|
||||
while (numNewMessages) {
|
||||
Serial.println("Pesan baru diterima");
|
||||
|
||||
for (int i = 0; i < numNewMessages; i++) {
|
||||
String chat_id = String(bot.messages[i].chat_id);
|
||||
String text = bot.messages[i].text;
|
||||
|
||||
Serial.println("Pesan: " + text);
|
||||
|
||||
if (text == "/buzzer_off") {
|
||||
digitalWrite(buzzerPin, LOW);
|
||||
buzzerOn = false;
|
||||
bot.sendMessage(chat_id, "Buzzer dimatikan.", "");
|
||||
Serial.println("Buzzer dimatikan melalui Telegram.");
|
||||
|
||||
}
|
||||
|
||||
if (text == "/lamp_off") {
|
||||
digitalWrite(lamp, HIGH);
|
||||
manualLampOff = true;
|
||||
bot.sendMessage(chat_id, "Lampu dimatikan.", "");
|
||||
Serial.println("Lampu dimatikan melalui Telegram.");
|
||||
|
||||
}
|
||||
|
||||
if (text == "/lamp_on") {
|
||||
digitalWrite(lamp, LOW);
|
||||
manualLampOff = false;
|
||||
bot.sendMessage(chat_id, "Lampu dinyalakan.", "");
|
||||
Serial.println("Lampu dinyalakan melalui Telegram.");
|
||||
|
||||
}
|
||||
if (text == "/pull_in") {
|
||||
manualControl = true;
|
||||
if (!motorRunning) {
|
||||
motorRunning = true;
|
||||
digitalWrite(IN1, HIGH);
|
||||
digitalWrite(IN2, LOW);
|
||||
analogWrite(ENA, 255);
|
||||
delay(900);
|
||||
digitalWrite(IN1, LOW);
|
||||
digitalWrite(IN2, LOW);
|
||||
analogWrite(ENA, 0);
|
||||
|
||||
lcd.clear();
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Menarik ke dalam");
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Manual");
|
||||
}
|
||||
bot.sendMessage(chat_id, "Jemuran ditarik ke dalam.",
|
||||
"");
|
||||
Serial.println("Jemuran ditarik ke dalam melalui
|
||||
Telegram.");
|
||||
}
|
||||
|
||||
if (text == "/push_out") {
|
||||
manualControl = true;
|
||||
if (motorRunning) {
|
||||
motorRunning = false;
|
||||
digitalWrite(IN1, LOW);
|
||||
digitalWrite(IN2, HIGH);
|
||||
analogWrite(ENA, 255);
|
||||
delay(900);
|
||||
digitalWrite(IN1, LOW);
|
||||
digitalWrite(IN2, LOW);
|
||||
analogWrite(ENA, 0);
|
||||
|
||||
lcd.clear();
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Menarik keluar");
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Manual");
|
||||
}
|
||||
bot.sendMessage(chat_id, "Jemuran ditarik keluar.",
|
||||
|
||||
"");
|
||||
Serial.println("Jemuran ditarik keluar melalui
|
||||
Telegram.");
|
||||
|
||||
}
|
||||
// Tambahkan perintah baru untuk mengaktifkan kembali
|
||||
mode otomatis
|
||||
if (text == "/auto_mode") {
|
||||
|
||||
manualControl = false; // Menonaktifkan kontrol manual
|
||||
bot.sendMessage(chat_id, "Mode otomatis diaktifkan
|
||||
kembali.", "");
|
||||
Serial.println("Mode otomatis diaktifkan kembali
|
||||
melalui Telegram.");
|
||||
}
|
||||
if ( text = "/options"){
|
||||
String keyboardJson = "[[\"/buzzer_off\",
|
||||
\"/lamp_off\"\"/lamp_on\"],[\"/pull_in\",\"/push_out\"],[\"/au
|
||||
to_mode\"]]";
|
||||
bot.sendMessageWithReplyKeyboard(chat_id, "Choose from
|
||||
one of the following Start", "", keyboardJson, true);
|
||||
}
|
||||
if (text == "/start")
|
||||
{
|
||||
String welcome = "Selamat Datang\n";
|
||||
welcome += "Silahkan Pilih dibawah.\n\n";
|
||||
welcome += "/buzzer_off : Matikan Buzzer\n";
|
||||
welcome += "/lamp_off : Matikan Lampu\n";
|
||||
welcome += "/lamp_on : Hidupkan Lampu\n";
|
||||
welcome += "/pull_in : Tarik Masuk\n";
|
||||
welcome += "/push_out : Tarik Keluar\n";
|
||||
welcome += "/auto_mode : Mode otomatis\n";
|
||||
welcome += "/options : returns the reply keyboard\n";
|
||||
bot.sendMessage(chat_id, welcome, "Markdown");
|
||||
}
|
||||
}
|
||||
|
||||
numNewMessages = bot.getUpdates(bot.last_message_received
|
||||
+ 1);
|
||||
|
||||
}
|
||||
|
||||
delay(100);
|
||||
}
|
||||
|
Loading…
Reference in New Issue