· 5 years ago · Sep 19, 2020, 11:28 PM
1Lampiran 1 Listing Program
2
3/* TA TEMPAT SAMPAH CERDAS BERBASIS IOT dengan Mikrokontroller
4
5*/
6
7#include <WiFi.h> //Library NodeMCU
8#include <WiFiClientSecure.h> // Library Wifi client
9#include <UniversalTelegramBot.h> //Library untuk bot telegram
10#include <ThingSpeak.h> // Library Thingspeak
11#include <Servo_ESP32.h> // Library motor Servo
12
13char ssid[] = "TEPADAS"; //ssid nama wifi
14char password[] = "selowinaja"; //password wifi
15#define BOTtoken "914417403:AAE_HL1N_qheZqNDtaanal-m0JfMQOSwpl8" //bot token Telegram
16String chatid = "902397835"; //ID telegram
17
18//THINGSPEAK
19unsigned long myChannelNumber = 1020048; // ID channel untuk thingspeak
20const char * myWriteAPIKey = "Q3WI3GYEH914OHNY"; // API key thingseak
21
22WiFiClient client;
23WiFiClientSecure client1;
24UniversalTelegramBot bot(BOTtoken, client1);
25
26int pin_Servo = 15; // servo
27int pinTrigger_1 = 34; // inisialisasi trigger pin ke 34 US dalam
28int pinEcho_1 = 35; // inisialisasi echo pin ke 35 US dalam
29int pinTrigger_2 = 32; // inisialisasi trigger pin ke 32 US luar
30int pinEcho_2 = 33; // inisialisasi echo pin ke 33 US luar
31long durasi_1, jarak_1;
32int durasi_2, jarak_2;
33#define LedBiru 0
34#define LedMerah 2
35#define pinBuz 4
36
37// Inisialiasi library objek Servo
38Servo_ESP32 Servoku;
39
40bool TombolKirim = false; //Deklarasi variabel TombolKirim
41
42String Pesan;
43int JedaPembacaan = 1000;
44long WaktuAkhir;
45int Bot_mtbs = 1000; //mean time between scan messages
46long Bot_lasttime; //last time messages' scan has been done
47
48
49void setup() { // Inisialiasi/deklarasi
50
51 Serial.begin (115200);
52 ThingSpeak.begin(client);
53 WifiStatus();
54
55 Servoku.attach(pin_Servo);
56 pinMode(pinTrigger_1, OUTPUT); // pancar gelombang
57 pinMode(pinEcho_1, INPUT); // terima gelombang atau objek
58 pinMode(pinTrigger_2, OUTPUT); // pancar gelombang
59 pinMode(pinEcho_2, INPUT); // terima gelombang atau objek
60 pinMode(pinBuz, OUTPUT); //pin buzzer hijau sebagai output
61 pinMode(LedMerah, OUTPUT); //pin LED merah sebagai output
62 pinMode(LedBiru, OUTPUT); // pin LED Hijau sebagai output
63
64
65 bot.sendMessage(chatid, "NodeMCU Terhubung");
66 Serial.println("Telegram Terhubung");
67
68}
69
70void SensorLuar() { // fungsi sensor Luar
71 //program trigger memancarkan ultrasonik
72 digitalWrite(pinTrigger_2, LOW);
73 delayMicroseconds(2);
74 digitalWrite(pinTrigger_2, HIGH);
75 delayMicroseconds(10);
76 digitalWrite(pinTrigger_2, LOW);
77
78 //Durasi adalah waktu tunggu pin Echo menjadi bernilai HIGH
79 //Setelah mendapat pantulan gelombang ultrasonic dari pin Trigger
80 durasi_2 = pulseIn(pinEcho_2, HIGH);
81 jarak_2 = 0.034 * (durasi_2 / 2); //Konversi nilai durasi ke jarak
82 Serial.print("Jarak2: ");
83 Serial.print(jarak_2);
84 Serial.print(" cm");
85
86 if (jarak_2 <= 10)
87 {
88 Servoku.write(180);
89 delay(1);
90 }
91 else
92 Servoku.write(0);
93 delay(1);
94}
95
96void SensorDalam() { // fungsi Sensor Dalam
97 //program trigger memancarkan ultrasonik
98 digitalWrite(pinTrigger_1, LOW);
99 delayMicroseconds(2);
100 digitalWrite(pinTrigger_1, HIGH);
101 delayMicroseconds(10);
102 digitalWrite(pinTrigger_1, LOW);
103
104 //Durasi adalah waktu tunggu pin Echo menjadi bernilai HIGH
105 //Setelah mendapat pantulan gelombang ultrasonic dari pin Trigger
106 durasi_1 = pulseIn(pinEcho_1, HIGH);
107 jarak_1 = 0.034 * (durasi_1 / 2); //Konversi nilai durasi ke jarak
108 Serial.print("Jarak: ");
109 Serial.print(jarak_1);
110 Serial.print(" cm");
111 Serial.println("\n");
112}
113
114void loop() { // fungsi perulangan
115 SensorLuar(); // US 1
116
117 SensorDalam(); // US 2
118 ThingSpeak.writeField(myChannelNumber, 1, jarak_1, myWriteAPIKey); // kirim data ke thingapeak
119
120 if (jarak_1 <= 10)
121 {
122 Serial.println("Tempat Sampah telah Penuh");
123 digitalWrite(LedMerah, LOW); //led merah mati
124 digitalWrite(LedBiru, HIGH); //led biru nyala
125 digitalWrite(pinBuz, HIGH); //led biru nyala
126 delay(1000);
127 digitalWrite(pinBuz, LOW); //led biru nyala
128 delay(1000);
129 digitalWrite(pinBuz, HIGH); //led biru nyala
130 delay(1000);
131 digitalWrite(pinBuz, LOW); //led biru nyala
132 if(!TombolKirim)
133 { //Jika TombolKirim = false ,maka
134 bot.sendMessage(chatid, "Tempat Sampah telah penuh "); //Mengirim pesan “...”
135 TombolKirim = true; //Posisi TombilKirim menjadi true
136 }
137
138 }
139 else {
140 Serial.println("Tempat Sampah Belum Penuh");
141 digitalWrite(LedBiru, LOW); //led biru mati
142 digitalWrite(LedMerah, HIGH); //led merah nyala
143 if(TombolKirim)
144 { //Jika TombolKirim = true ,maka
145 bot.sendMessage(chatid, "Tempat Sampah belum penuh "); //Mengirim pesan “...”
146 TombolKirim = false; //Posisi Tombil Kirim menjadi false
147 }
148
149 }
150 if (millis() > WaktuAkhir + JedaPembacaan) { // pertukaran informasi dari fitur telegram
151 int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
152
153 while(numNewMessages) {
154 Serial.println("Pesan Diterima");
155 handleNewMessages(numNewMessages);
156 numNewMessages = bot.getUpdates(bot.last_message_received + 1);
157 }
158
159 WaktuAkhir = millis();
160 }
161}
162
163void handleNewMessages(int numNewMessages) { // fungsi perintah telegram
164
165 for (int i = 0; i < numNewMessages; i++) {
166 String chat_id = String(bot.messages[i].chat_id);
167 Pesan = bot.messages[i].text;
168
169 String from_name = bot.messages[i].from_name;
170 if (from_name == "") from_name = "Guest";
171
172 // fitur untuk mengarah ke situs jenis sampah
173 if(Pesan== "/Sampah"){
174 Serial.println("Respon1");
175 bot.sendMessage(chatid, "Yuk kenal lebih jauh tentang jenis-jenis Sampah. https://www.gurupendidikan.co.id/jenis-sampah");
176 }
177
178 // fitur untuk mengarah ke situs platform kepedulian sampah
179 else if(Pesan == "/Peduli"){
180 Serial.println("Respon2");
181 bot.sendMessage(chatid, "Yuk Selamatkan Bumi Kita. https://zerowaste.id");
182 }
183
184 // keyboard JSON untuk menghubungkan thingspeak
185 if (bot.messages[i].type == "callback_query") {
186 Serial.print("Call back button pressed by: ");
187 Serial.println(bot.messages[i].from_id);
188 Serial.print("Data on the button: ");
189 Serial.println(bot.messages[i].text);
190 bot.sendMessage(bot.messages[i].from_id, bot.messages[i].text, "");
191 } else {
192 String chat_id = String(bot.messages[i].chat_id);
193 String text = bot.messages[i].text;
194
195
196 if (text == "/Cek") {
197 String keyboardJson = "[[{ \"text\" : \"Buka Thingspeak\", \"url\" : \"https://thingspeak.com/channels/1020048\" }]]";
198 bot.sendMessageWithInlineKeyboard(chat_id, "Silahkan Cek", "", keyboardJson);
199 }
200
201 // perintah untuk mengaktifkan bot API telegram
202 if (text == "/start") {
203 String welcome = "Halo, namaku Tepadas. Aku akan memberitahumu jika tempat sampahnya telah penuh. " " Jadi jangan khawatir ya... \n\n";
204 welcome += "Berikut fitur pilihan untuk menggunakan bot Tepadas \n";
205 welcome += "1. /start: " " Untuk mengaktifkan bot \n";
206 welcome += "2. /Cek: " " Untuk mengecek tempat sampah pada platform IoT \n ";
207 welcome += "3. /Sampah: " " Untuk mengenal lebih jauh tentang Sampah \n";
208 welcome += "4. /Peduli: " " Mari Selamatkan Bumi kita \n\n";
209 welcome += "Terima Kasih";
210
211 bot.sendMessage(chat_id, welcome, "Markdown");
212 }
213 }
214 }
215}
216
217void WifiStatus() { // fungsi standar untuk koneksi wifi
218 WiFi.mode(WIFI_STA);
219 WiFi.disconnect();
220 delay(100);
221 Serial.print("Connecting Wifi: ");
222 Serial.println(ssid);
223 WiFi.begin(ssid, password);
224 while (WiFi.status() != WL_CONNECTED) {
225 Serial.print(".");
226 delay(500);
227 }
228 Serial.println("");
229 Serial.println("WiFi connected");
230 Serial.print("IP address: ");
231 Serial.println(WiFi.localIP());
232}
233