Telegram Messenger adalah layanan pesan instan dan voice over IP berbasis cloud. Anda dapat dengan mudah menginstalnya di smartphone Anda (Android dan iPhone) atau komputer (PC, Mac dan Linux). Ini gratis dan tanpa iklan. Ada fasilitas handalan dari Telegram yang memungkinkan Anda membuat bot yang dapat berinteraksi dengan pengguna.
“Bot adalah aplikasi pihak ketiga yang berjalan di dalam Telegram. Pengguna dapat berinteraksi dengan bot dengan mengirimi mereka pesan, perintah, dan permintaan sebaris. Anda mengontrol bot Anda menggunakan permintaan HTTPS ke Telegram Bot API.”
Kali ini ESP8266 akan berinteraksi dengan bot Telegram untuk menerima dan menangani pesan, serta mengirim tanggapan. Dalam tutorial ini saya akan mengajak kamu belajar bagaimana menggunakan Telegram untuk mengirim pesan ke bot yg kamu buat untuk mengontrol LED dan meminta pembacaan sensor dari mana saja (Jangan lupa perlu Internet untuk akses ke Telegram ya).
Buat BOT kamu pada BotFather Telegram
Setelah menginstall telegram pada HP smartphone kamu, langkah awal adalah dengan search @BotFather dan masuk ke dalam layar chat nya. Lakukan langkah berikut :
- Ketik " /start"
- Buat bot baru dengan ketik "/newbot"
- Pilih username dan nama bot dengan pola "Nama_bot"
- Simpan token API yang diberikan oleh BotFather
Instalasi Library Telegram Bot Universal & ArduinoJson pada library manager
Untuk melancarkan praktek telegrambot, maka sebaiknya dibaca dulu bagian sebelumnya yg berteme mengontrol LED dan Membaca sensor DHT11 disini : https://www.aisi555.com/2021/08/wemos-esp8266-part-2-hello-tcp-ip.html .
Script Lengkap :
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include "DHT.h"
// Wifi network username dan paswword
#define WIFI_SSID "nama wifi"
#define WIFI_PASSWORD "password"
// Telegram BOT Token (dapat Botfather)
#define BOT_TOKEN "XXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
const unsigned long BOT_MTBS = 1000; // waktu tunggu pesan
X509List cert(TELEGRAM_CERTIFICATE_ROOT); //SSL Certi
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
unsigned long bot_lasttime; // penanda waktu terakhir
const int ledPin = 2; //Pin Led pada ESP8266
int ledStatus = 0;
const int dhtPin = 13; //Pin DHT11 , sesuaikan
#define DHTTYPE DHT11 //Sensor DHT11
DHT dht(dhtPin, DHTTYPE);
String SendTempHumid(){
//pembacaan suhu dan kelembaban
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
t=0;
h=0;
}
Serial.print("Humi: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temp: ");
Serial.print(t);
Serial.println(" °C ");
return ("Suhu : " + String(t) + " C Kelembaban :" + String(h) + " %rH");
}
// routine untuk mengecek pesan masuk dari bot
void handleNewMessages(int numNewMessages)
{
Serial.print("handleNewMessages ");
Serial.println(numNewMessages);
for (int i = 0; i < numNewMessages; i++)
{
String chat_id = bot.messages[i].chat_id;
String text = bot.messages[i].text;
//cek nama pengirim dari telegram
String from_name = bot.messages[i].from_name;
if (from_name == "")
from_name = "Guest";
if (text == "/ledon") //cek pesan masuk
{
digitalWrite(ledPin, LOW); // Hidupin LED (active Low)
ledStatus = 1;
bot.sendMessage(chat_id, "Led : ON", "");
}
if (text == "/ledoff")
{
ledStatus = 0;
digitalWrite(ledPin, HIGH); // Matikan LED (aktif low)
bot.sendMessage(chat_id, "Led : OFF", "");
}
if (text == "/status") //baca status Led dan DHT11
{
if (ledStatus)
{
bot.sendMessage(chat_id, "Led : ON", "");
}
else
{
bot.sendMessage(chat_id, "Led : OFF", "");
}
//kirim pembacaan DHT11
bot.sendMessage(chat_id, "\n" + SendTempHumid(), "");
}
if (text == "/keyboard") //permintaan tampil keyboard
{
String keyboardJson = "[[\"/ledon\", \"/ledoff\"],[\"/status\"]]";
bot.sendMessageWithReplyKeyboard(chat_id, "Pilih Tombol Di Bawah Ini", "", keyboardJson, true);
}
if (text == "/start")
{
String welcome = "Halo " + from_name + ", Selamat datang di ESPBOT Aisi555.\n";
welcome += "Pilih dibawah ini untuk melakukan praktek: .\n\n";
welcome += "/ledon : ngidupin Led ON\n";
welcome += "/ledoff : matikan Led OFF\n";
welcome += "/status : liat status LED & DHT 11 \n";
welcome += "/keyboard : kontrol lewat keyboard\n";
bot.sendMessage(chat_id, welcome, "Markdown");
}
}
}
void setup()
{
Serial.begin(9600);
Serial.println();
pinMode(ledPin, OUTPUT); // initialize digital ledPin as an output.
delay(10);
digitalWrite(ledPin, HIGH); // initialize pin as off (active LOW)
dht.begin();
// attempt to connect to Wifi network:
configTime(0, 0, "pool.ntp.org"); // get UTC time via NTP
secured_client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org
Serial.print("Connecting to Wifi SSID ");
Serial.print(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(500);
}
Serial.print("\nWiFi connected. IP address: ");
Serial.println(WiFi.localIP());
// Check NTP/Time, usually it is instantaneous and you can delete the code below.
Serial.print("Retrieving time: ");
time_t now = time(nullptr);
while (now < 24 * 3600)
{
Serial.print(".");
delay(100);
now = time(nullptr);
}
Serial.println(now);
}
void loop()
{
if (millis() - bot_lasttime > BOT_MTBS)
{
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages)
{
Serial.println("got response");
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
bot_lasttime = millis();
}
}
Penjelasan :
BOT TOKEN merupakan token unik yang didapat dari @BootFather
// Telegram BOT Token (dapat Botfather)
#define BOT_TOKEN "XXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
Library yg dipakai :
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include "DHT.h"
Inisialisasi Wifi :
#define WIFI_SSID "nama wifi"
#define WIFI_PASSWORD "password"
Penentuan Pin I/O
const int ledPin = 2; //Pin Led pada ESP8266
int ledStatus = 0;
const int dhtPin = 13; //Pin DHT11 , sesuaikan
#define DHTTYPE DHT11 //Sensor DHT11
DHT dht(dhtPin, DHTTYPE);
Membuat BOT dan certificate keamanan SSL
const unsigned long BOT_MTBS = 1000; // waktu tunggu pesan
X509List cert(TELEGRAM_CERTIFICATE_ROOT); //SSL Certi
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
unsigned long bot_lasttime; // penanda waktu terakhir
Tiap ada pesan dari BOT Telegram akan diolah di routine ini :
void handleNewMessages(int numNewMessages)
{
Serial.print("handleNewMessages ");
Serial.println(numNewMessages);
for (int i = 0; i < numNewMessages; i++)
{
String chat_id = bot.messages[i].chat_id;
String text = bot.messages[i].text;
//cek nama pengirim dari telegram
String from_name = bot.messages[i].from_name;
if (from_name == "")
from_name = "Guest";
Menentukan jawaban / respon terhadap pesan yg diterima dari bot, lalu melakukan proses yg diharapkan semisal contoh dibawah menyalakan LED. Jangan lupa juga esp8266 akan membalas / reply ke BOT di smartphone pengguna .
if (text == "/ledon") //cek pesan masuk
{
digitalWrite(ledPin, LOW); // Hidupin LED (active Low)
ledStatus = 1;
bot.sendMessage(chat_id, "Led : ON", "");
}
Memberi reply berupa tombol keyboard yg lebih menarik pada telegram bot, menggunakan json text.
if (text == "/keyboard") //permintaan tampil keyboard
{
String keyboardJson = "[[\"/ledon\", \"/ledoff\"],[\"/status\"]]";
bot.sendMessageWithReplyKeyboard(chat_id, "Pilih Tombol Di Bawah Ini", "", keyboardJson, true);
}
Routine membaca DHT11
String SendTempHumid(){
//pembacaan suhu dan kelembaban
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
t=0;
h=0;
}
Serial.print("Humi: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temp: ");
Serial.print(t);
Serial.println(" °C ");
return ("Suhu : " + String(t) + " C Kelembaban :" + String(h) + " %rH");
}
Untuk mengecek agar reply tidak membalas pesan yg lawas, maka waktu pengiriman harus dibandingkan dengan waktu sekarang melalui time NTP / jam internet.
configTime(0, 0, "pool.ntp.org");
void loop()
{
if (millis() - bot_lasttime > BOT_MTBS)
{
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages)
{
Serial.println("got response");
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
bot_lasttime = millis();
}
}
#define CHAT_ID "XXXXXXXXXX" //id telegram kamu
for (int i=0; i<numNewMessages; i++) {
// Chat id of the requester
String chat_id = String(bot.messages[i].chat_id);
if (chat_id != CHAT_ID){
bot.sendMessage(chat_id, "Unauthorized user", "");
continue;
}
0 komentar:
Posting Komentar