Helo temen temen anakkendali.com.
Pada kesempatan kali ini saya akan menulis artikel tentang Belajar ESP32, Notifikasi Sensor DHT11 dengan Telegram. Jika kamu sedang membuat projek tentang sistem iot mengenai monitoring dan bisa mendapatkan notifikasi jika hasil dari monitoring tidak sesuai dengan set-point maka tutorial ESP32 Notifikasi Sensor DHT11 dengan Telegram Bot sangat cocok dijadikan referensi, karena sistemnya sangat persis dengan yang kamu inginkan.
Selain dengan sensor dht11 kamu juga bisa membuat hal serupa untuk monitoring tegangan, arus pada panel dan monitoring sensor lainya untuk mendapatkan notifikasi dari telegram. Pada tutorial ini saya menggunakan ESP32 untuk membaca sensor DHT11 berupa suhu dan kelembaban dalam sinyal digital. sedangkan telegram sebagai server yang menjembatani manusia dengan sistem sehingga dapat berinteraksi satu sama lain. telegram sendiri memiliki api yang bebas diakses oleh siapapun dan sudah disediakan telegrambot. kita bisa chatingan dengan bot telegram yang mana bot ini di atur oleh ESP32.
Rangkaian Skematik
Untuk menghubungkan antara ESP32 dengan Sensor DHT11 kamu cukup menggunakan tiga buah kabel pelangi yang masing masing dihubungkan sebagai berikut.
- VCC DHT11 ——— 5V ESP32
- GND DHT11 ——— GND ESP32
- Data DHT11 ——— 15 ESP32
Code ESP32 Telegram
Berikut adalah program yang sudah saya modifikasi untuk dapat membuat sistem notifikasi telegrambot dengan esp32.
#include <string.h>
// Device libraries (Arduino ESP32/ESP8266 Cores)
#include <Arduino.h>
#ifdef ESP8266
#include <ESP8266WiFi.h>
#else // jika menggunakan ESP32
#include <WiFi.h>
#endif
// Custom libraries
#include <utlgbotlib.h>
#include "DHT.h"
#define DHTPIN 15
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
float h, t;
#define WIFI_SSID "Smart-PF"
#define WIFI_PASS "anamganteng"
#define MAX_CONN_FAIL 50
#define MAX_LENGTH_WIFI_SSID 31
#define MAX_LENGTH_WIFI_PASS 63
#define TLG_TOKEN "518247654:AAGnJ3bwQoixeX4nDDLb-JdmA1vPsD85gRo" // token anakkendali_bot
#define DEBUG_LEVEL_UTLGBOT 0
#define PIN_RELAY 5 // ESP32 RELAYnya di pin gpio5
const char TEXT_START[] =
"Hello, im a Bot running in an ESP microcontroller that let you turn on/off a RELAY/light.\n"
"\n"
"Check /help command to see how to use me.";
char buff[100];
boolean state_t, state_h;
const char TEXT_HELP[] =
"Available Commands:\n"
"\n"
"/start - Show start text.\n"
"/help - Show actual text.\n"
"/relayon - Turn on the RELAY.\n"
"/relayoff - Turn off the RELAY.\n"
"/relaystatus - Show actual RELAY status.\n"
"/statussuhu - Show actual temperature status.\n"
"/statuskelembaban - Show actual Humidity status.\n";
void wifi_init_stat(void);
bool wifi_handle_connection(void);
// Create Bot object
uTLGBot Bot(TLG_TOKEN);
// RELAY status
uint8_t relay_status;
void setup(void)
{
Bot.set_debug(DEBUG_LEVEL_UTLGBOT);
Serial.begin(9600);
digitalWrite(PIN_RELAY, HIGH);
pinMode(PIN_RELAY, OUTPUT);
relay_status = 1;
wifi_init_stat();
Serial.println("Waiting for WiFi connection.");
while (!wifi_handle_connection())
{
Serial.print(".");
delay(500);
}
dht.begin();
Bot.getMe();
}
void loop()
{
if (!wifi_handle_connection())
{
// Wait 100ms and check again
delay(100);
return;
}
// Check for Bot received messages
while (Bot.getUpdates())
{
Serial.println("Received message:");
Serial.println(Bot.received_msg.text);
Serial.println(Bot.received_msg.chat.id);
if (strncmp(Bot.received_msg.text, "/start", strlen("/start")) == 0)
{
Bot.sendMessage(Bot.received_msg.chat.id, TEXT_START);
}
else if (strncmp(Bot.received_msg.text, "/help", strlen("/help")) == 0)
{
Bot.sendMessage(Bot.received_msg.chat.id, TEXT_HELP);
}
else if (strncmp(Bot.received_msg.text, "/relayon", strlen("/relayon")) == 0)
{
relay_status = 0;
Serial.println("Command /relayon received.");
Serial.println("Turning on the Relay.");
Bot.sendMessage(Bot.received_msg.chat.id, "Relay turned on.");
}
else if (strncmp(Bot.received_msg.text, "/relayoff", strlen("/relayoff")) == 0)
{
relay_status = 1;
// Show command reception through Serial
Serial.println("Command /relayoff received.");
Serial.println("Turning off the RELAY.");
// Send a Telegram message to notify that the RELAY has been turned off
Bot.sendMessage(Bot.received_msg.chat.id, "RELAY turned off.");
}
// If /RELAYstatus command was received
else if (strncmp(Bot.received_msg.text, "/relaystatus", strlen("/relaystatus")) == 0)
{
// Send a Telegram message to notify actual RELAY status
if (relay_status)
Bot.sendMessage(Bot.received_msg.chat.id, "The RELAY is off.");
else
Bot.sendMessage(Bot.received_msg.chat.id, "The RELAY is on.");
}
else if (strncmp(Bot.received_msg.text, "/statussuhu", strlen("/statussuhu")) == 0)
{
t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
String msg = "Status Suhu :";
msg += t;
msg += " °C\n";
msg.toCharArray(buff, 100);
Bot.sendMessage(Bot.received_msg.chat.id, buff);
}
else if (strncmp(Bot.received_msg.text, "/statuskelembaban", strlen("/statuskelembaban")) == 0)
{
h = dht.readHumidity();
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
String msg = "Status Kelembaban :";
msg += h;
msg += " %Rh\n";
msg.toCharArray(buff, 100);
Bot.sendMessage(Bot.received_msg.chat.id, buff);
}
digitalWrite(PIN_RELAY, relay_status);
// Feed the Watchdog
yield();
}
h = dht.readHumidity();
t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
if (t > 37 && state_t == 0) {
state_t = 1;
String msg = "Status Suhu :";
msg += t;
msg += " °C\n";
msg += "Hati Hati Panas.";
msg.toCharArray(buff, 100);
Bot.sendMessage("556538872", buff);
}
else if (t <= 37) {
state_t = 0;
}
if (h < 60 && state_h == 0) {
state_h = 1;
String msg = "Status Kelembaban :";
msg += h;
msg += " %Rh\n";
msg += "Hati Hati Kering.";
msg.toCharArray(buff, 100);
Bot.sendMessage("556538872", buff);
}
else if (h >= 60) {
state_h = 0;
}
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.println(F("°C "));
delay(1000);
}
// Init WiFi interface
void wifi_init_stat(void)
{
Serial.println("Initializing TCP-IP adapter...");
Serial.print("Wifi connecting to SSID: ");
Serial.println(WIFI_SSID);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASS);
Serial.println("TCP-IP adapter successfuly initialized.");
}
bool wifi_handle_connection(void)
{
static bool wifi_connected = false;
// Device is not connected
if (WiFi.status() != WL_CONNECTED)
{
// Was connected
if (wifi_connected)
{
Serial.println("WiFi disconnected.");
wifi_connected = false;
}
return false;
}
// Device connected
else
{
// Wasn't connected
if (!wifi_connected)
{
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
wifi_connected = true;
}
return true;
}
}
Cara Kerja Sistem
Jadi untuk sistem kerja dari program diatas seperti ini. Kita dapat meminta data dari ESP32 melalui telegram bot dengan mengirim pesan sesuai keyword yang ada seperti “/statuskelembaban” maka akan dibalas dengan memberikan nilai kelembaban yang terbaca oleh sensor DHT11. selain itu program diatas juga bisa untuk mengontrol relay dengan telegrambot dan juga jika status kelembaban atau suhu tidak sesuai dengan set point maka telegram akan otomatis mengirim notifikasi ke chat id yang sudah di daftarkan. adapun untuk melihat chat id nya bisa langsung mengamati pada serial monitor saat kita mengirim pesan, contohnya “556538872” ID tersebut adalah chat id telegram saya untuk bot anakkendali.
Library Telegram
Library UniversalTelegramBot.h
Library TelegramBot.h
Jika kamu ingin menggunakan Anakkendali Bot untuk mencobanya silahkan klik link berikut t.me/Anakkendali_bot
dan itulah artikel tentang Belajar ESP32, Notifikasi Sensor DHT11 dengan Telegram semoga bermanfaat, jangan lupa bagikan ke akun media sosial kamu.
Pencarian Terkait
ESP32 Telegram Bot (560)
ESP32 IoT Telegram (408)
Notifikasi Telegram ESP32 (339)
ESP32 Notifikasi Telegram (295)
Tutorial ESP32 Telegram (229)
Tutorial Telegram ESP32 (194)