บทความนี้จะแสดงวิธีส่งการแจ้งเตือนไปยังบัญชี Telegram ของคุณ เมื่อ ESP32 ตรวจจับควันไฟ ตราบใดที่คุณสามารถเข้าถึงอินเทอร์เน็ตในสมาร์ทโฟนของคุณ คุณจะได้รับการแจ้งเตือนไม่ว่าคุณจะอยู่ที่ใดก็ตาม บอร์ด ESP32 จะถูกเขียนโปรแกรมโดยใช้ Arduino IDE
ประโยชน์และการนำโปรเจคไปพัฒนาต่อ
ระบบสัญญาณเตือนไฟไหม้ (Fire Alarm System) คือ ระบบสำหรับแจ้งเตือนเมื่อมีเปลวไฟ หรือเหตุเพลิงไหม้ภายในอาคาร โดยใช้เซนเซอร์หรืออุปกรณ์ตรวจจับชนิดต่างๆ ตามความเหมาะสม เช่น อุปกรณ์ตรวจจับควันไฟ (Smoke Detector) อุปกรณ์ตรวจจับความร้อน (Heat Detector) อุปกรณ์ตรวจจับเปลวไฟ (Fire Extinguisher) เป็นต้น
ซึ่งระบบสัญญาณเตือนไฟไหม้นี้จะทำให้ผู้ที่อยู่ในอาคารสามารถรับรู้และแก้ไขได้อย่างทันท่วงที ป้องกันไม่ให้ไฟไหม้นั้นลุกลามจนไม่สามารถควบคุมได้ ซึ่งในการใชงานจริง อาจจะต้องใช้ เซนเซอร์ ทั้ง 3 แบบ ร่วมกันในการตรวจสอบ แล้วไปสั่ง หัวสปริงเกอร์ฉีดน้ำให้ทำงาน แต่ในตัวอย่างโปรเจคจะเลือกใช้ เซ็นเซอร์ตรวจจับควัน MQ-2 (Smoke Detector) ในขั้นตอนที่มีควัน หรือ ตรวจจับควันบุหรี่ ในสถานที่ห้ามสูบบุหรี่ แล้วแจ้งเตือนผ่านทาง Telegram ของคุณ
แนะนำ Telegram
Telegram Messenger คือบริการส่งข้อความโต้ตอบแบบทันทีผ่านระบบคลาวด์และบริการโทรออกด้วยเสียงผ่าน IP คุณสามารถติดตั้งได้อย่างง่ายดายบนสมาร์ทโฟน (Android และ iPhone) หรือคอมพิวเตอร์ (PC, Mac และ Linux) ของคุณ เป็นบริการฟรีและไม่มีโฆษณา Telegram ช่วยให้คุณสร้างบอทที่คุณสามารถโต้ตอบด้วยได้
ESP32 จะโต้ตอบกับบ็อต Telegram เพื่อส่งข้อความไปยังบัญชี Telegram ของคุณ เมื่อใดก็ตามที่ตรวจพบกลุ่มควัน คุณจะได้รับการแจ้งเตือนในสมาร์ทโฟนของคุณ (ตราบใดที่คุณสามารถเข้าถึงอินเทอร์เน็ตได้)
เป้าหมายและหลักการทำงานของโปรเจค
เมื่อมีกลุ่มควัน มาที่บริเวณเซ็นเซอร์ตรวจจับควัน MQ-2 จะมีการส่งสัญญาณ Analog ไปยัง ESP32 หากมีความหนาแน่นของ ควัน ยังไม่สูงพอ (ที่ตั้งไว้ 1200) ยังไม่ต้องส่งการแจ้งเตือน แต่ถ้าเกินค่าที่ตั้งไว้ 1200 ให้ส่งค่าที่วัดได้พร้อมการแจ้งเตือน ผ่านทาง Telegram ของคุณ ที่กำหนดไว้
ภาพรวมโครงการ
นี่คือภาพรวมเกี่ยวกับวิธีการทำงานของโปรเจค:
- คุณจะสร้างบอท Telegram สำหรับ ESP32 ของคุณ
- ESP32 เชื่อมต่อกับเซ็นเซอร์ตรวจจับควัน
- เมื่อเซ็นเซอร์ตรวจจับควันได้ ESP32 จะส่งข้อความเตือนไปยังบัญชี Telegram ของคุณ
- คุณจะได้รับการแจ้งเตือนในบัญชี Telegram ของคุณทุกครั้งที่มีการตรวจจับควันได้
นี่เป็นโปรเจคง่ายๆ แต่แสดงให้เห็นว่าคุณสามารถใช้ Telegram ในโครงการ IoT และระบบอัตโนมัติภายในบ้านของคุณได้อย่างไร แนวคิดคือการนำแนวคิดที่เรียนรู้ไปใช้ในโปรเจคของคุณเอง
อุปกรณ์ที่ใช้
1- MQ-2 MQ2 Gas Sensor Methane Butane Detection
2- ESP32-S3 N8R2 Development Board WIFI+BLE5.0
3- USB Type C Data Line (สาย usb type-c)
4- Jumper (F2M) cable wire 20cm Female to Male
5- Adapter DC 5V 2A Power Supply
6- DC Jack 5.5×2.1mm ตัวเมีย + สายไฟ
1.การใช้งานบอร์ด ESP32 S3
บอร์ด ESP32-S3 เป็นไมโครคอนโทรลเลอร์ที่พัฒนาขึ้นโดย Espressif Systems ซึ่งเป็นรุ่นอัปเกรดจาก ESP32 เดิม โดยมีฟีเจอร์เพิ่มเติมที่สำคัญ เช่น การรองรับ AI, Machine Learning และประสิทธิภาพการประมวลผลที่สูงขึ้น
สิ่งแรกคือการติดตั้ง Arduino IDE โดยดาวน์โหลด Arduino IDE จากที่นี่
https://www.arduino.cc/en/software
กำหนดค่าให้ รองรับบอร์ด ESP32
ไปที่ File > Preferences
คัดลอกและวางบรรทัดต่อไปนี้ลงในฟิลด์ Boards Manager URLs
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
คลิกไอคอนตัวจัดการบอร์ดที่มุมด้านซ้าย ค้นหา ESP32 และกดปุ่มติดตั้งสำหรับ esp32 โดย Espressif Systems
2.การใช้งาน MQ-2 เซ็นเซอร์ตรวจจับควัน
การใช้งานเซนเซอร์ตรวจจับแก๊ส MQ-2 กับ ESP32-S3 ผ่าน Arduino IDE สามารถทำได้ง่ายโดยใช้ไลบรารีพื้นฐานและตัวต้านทานแบ่งแรงดันเพื่ออ่านค่าจากเซนเซอร์ MQ-2 ซึ่งเซนเซอร์นี้สามารถตรวจจับแก๊สหลายประเภท เช่น ก๊าซ LPG, โพรเพน, เมทานอล, คาร์บอนมอนอกไซด์ และควันไฟ
การต่อวงจร
ขา MQ-2:
- VCC ต่อกับ 5V บน ESP32-S3
- GND ต่อกับ GND บน ESP32-S3
- AD ต่อกับขา ADC บน ESP32-S3 เช่น GPIO16
ถ้าต้องการปรับความไวเซนเซอร์ คุณสามารถใช้ตัวต้านทานแบ่งแรงดันเพื่อให้แรงดันไฟเหมาะสม
ภาพรวมการต่อวงจร
เชื่อมต่อสาย USB ระหว่าง คอมพิวเตอร์ กับ ESP32 และจ่ายไฟจาก Adapter DC 5V ให้กับ MQ-2 เซ็นเซอร์ตรวจจับควัน ด้วย
โค้ด
#define MQ2_PIN 16 // กำหนดขา ADC ที่ใช้เชื่อมต่อกับ MQ-2
void setup() {
Serial.begin(115200); // เริ่ม Serial Monitor
pinMode(MQ2_PIN, INPUT); // กำหนดขา ADC เป็นขาอินพุต
}
void loop() {
int sensorValue = analogRead(MQ2_PIN); // อ่านค่าจาก MQ-2
float voltage = sensorValue * (3.3 / 4095.0); // แปลงค่า ADC เป็นแรงดันไฟ (ESP32 ADC เป็น 12-bit)
Serial.print("ADC Value: ");
Serial.print(sensorValue);
Serial.print(" | Voltage: ");
Serial.println(voltage);
delay(1000); // หน่วงเวลา 1 วินาที
}
ก่อนอื่น ตรวจสอบ Port ของ ESP32 ที่คอมพิวเตอร์ โดยไปที่ Device Manager ต้องเห็น CH343 และ COMx (แต่ละเครื่องไม่เหมือนกัน)
ก็อบปี้โค้ด ไปที่ Arduino IDE
เลือกบอร์ด ESP32 ตามรุ่นที่ใช้ เป็น ESP32S3 Dev Module
เลือก Port โดยไปที่ Tools -> Port -> COMxx
(โดย COMxx แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)
คลิกที่ Upload รอจน แสดงการ Upload สำเร็จ
ไปที่ Tools -> Serial Monitor
เลือก 115200 baud
กดที่ปุ่ม RST
แสดงค่าที่วัดได้ (ขั้นตอนตอนนี้สำเร็จแล้ว)
3.ทดสอบ เชื่อมต่อ WiFi ของ ESP32-S3
การทดสอบว่า ESP32-S3 เชื่อมต่อ WiFi ได้สำเร็จหรือไม่? เช่น ชื่อ WiFi และ รหัสผ่าน WiFi รวมทั้ง การทำงานของเครือข่าย WiFi โดยใช้ Arduino IDE ดังนี้:
โค้ด
#include <WiFi.h>
const char* ssid = "ชื่อเครือข่าย WiFi"; // ใส่ชื่อ WiFi ของคุณ
const char* password = "รหัสผ่าน WiFi"; // ใส่รหัสผ่าน WiFi ของคุณ
void setup() {
Serial.begin(115200); // เปิด Serial Monitor
delay(1000);
// เริ่มการเชื่อมต่อ WiFi
Serial.println("Connecting to WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
// เมื่อเชื่อมต่อสำเร็จ
Serial.println("\nWiFi connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
// วนลูปทำงาน (ถ้าต้องการ)
}
Upload โค้ด
ไปที่ Tools -> Serial Monitor
กดที่ปุ่ม RST ที่บอร์ด ESP32-S3
หากเชื่อมต่อสำเร็จ จะเห็นข้อความ WiFi connected! และ IP address (ขั้นตอนตอนนี้สำเร็จแล้ว)
4.การสร้างบอท Telegram
บอทเป็นแอปพลิเคชันของบริษัทอื่นที่ทำงานภายใน Telegram ผู้ใช้สามารถโต้ตอบกับบอทได้โดยการส่งข้อความ คำสั่ง และคำขอแบบอินไลน์ คุณสามารถควบคุมบอทของคุณโดยใช้คำขอ HTTPS ไปยัง Telegram Bot API
ไปที่ Google Play หรือ App Store ดาวน์โหลดและติดตั้งTelegram
ใส่เบอร์โทร
ป้อนโค้ด
หน้าแรก Telegram
สร้าง BOTtoken
เปิด Telegram และทำตามขั้นตอนต่อไปเพื่อสร้าง Telegram Bot ขั้นแรก ให้ค้นหา botfather และคลิก BotFather ตามที่แสดงด้านล่าง
หน้าต่างต่อไปนี้จะเปิดขึ้น และคุณจะได้รับแจ้งให้คลิกปุ่ม START
พิมพ์ /newbot และทำตามคำแนะนำเพื่อสร้างบอทของคุณ ตั้งชื่อและชื่อผู้ใช้ให้บอท
ตั้งชื่อ bot ตามความต้องการ (ในตัวอย่างคือ Lungmaker)
ตั้งชื่อผู้ใช้ ต้องลงท้ายด้วยคำว่า bot (ในตัวอย่างคือ Lungmaker_bot)
คุณจะได้รับข้อความพร้อมลิงก์เพื่อเข้าถึงบอทและ BOTtokenโปรดบันทึก BOTtoken (ในตัวอย่างจะเริ่มต้นที่ 78299 จนถึงตัวท้ายคือ A) ไว้ เนื่องจากคุณจะต้องใช้ token นี้ เพื่อให้ ESP32 สามารถโต้ตอบกับบอทได้ (ขั้นตอนตอนนี้สำเร็จแล้ว)
5.สร้าง CHAT_ID
ทุกคนที่รู้ชื่อผู้ใช้บอตของคุณสามารถส่งข้อความมาหาบอตได้ เพื่อป้องกันไม่ให้บอตตอบสนองต่อข้อความจากคนที่ไม่ได้รับอนุญาต คุณสามารถตั้งค่าให้บอตตรวจสอบรหัสผู้ใช้ Telegram ก่อน โดยคุณต้องหาค่ารหัสผู้ใช้ Telegram ของคุณก่อน จากนั้นเมื่อบอตได้รับข้อความ ESP32 จะตรวจสอบว่ารหัสของผู้ส่งตรงกับรหัสผู้ใช้ที่อนุญาตหรือไม่ หากตรงกัน บอตจะจัดการข้อความนั้น แต่ถ้าไม่ตรง บอตจะเพิกเฉยต่อข้อความดังกล่าว
ในบัญชี Telegram ของคุณ ค้นหา myidbot
START
เริ่มการสนทนากับบอทนั้นและพิมพ์ /getid คุณจะได้รับการตอบกลับพร้อมรหัสผู้ใช้ของคุณ บันทึกรหัสผู้ใช้ CHAT_ID (ในตัวอย่างคือ 7813421932) นั้นไว้ เพราะคุณจะต้องใช้มันในภายหลัง
6.ที่ Arduino IDE ติดตั้ง Library เพิ่มเติม
ติดตั้ง ไลบรารี Universal Telegram Bot Library
ในการโต้ตอบกับบอท Telegram เราจะใช้ Universal Telegram Bot Library ที่สร้างโดย Brian Lough ซึ่งมอบอินเทอร์เฟซที่ใช้งานง่ายสำหรับ Telegram Bot API
ทำตามขั้นตอนต่อไปเพื่อติดตั้งไลบรารีเวอร์ชันล่าสุด
- คลิกที่นี่เพื่อดาวน์โหลดไลบรารี Click here to download the Universal Arduino Telegram Bot library.
- ไปที่ Sketch > Include Library > Add.ZIP Library...
สิ่งสำคัญ:อย่าติดตั้งไลบรารีผ่านทาง Arduino Library Manager เพราะอาจติดตั้งเวอร์ชันที่ไม่รองรับอีกต่อไป
ติดตั้ง ไลบรารี ArduinoJson
คุณต้องติดตั้ง ไลบรารี ArduinoJson ด้วย ทำตามขั้นตอนต่อไปนี้เพื่อติดตั้งไลบรารี
- ไปที่ Skech > Include Library > Manage Libraries.
- ค้นหา “ArduinoJson”
- ติดตั้ง Library
7.ตรวจจับควัน แจ้งเตือนผ่าน Telegram
โค้ดต่อไปนี้ใช้บ็อต Telegram ของคุณเพื่อส่งข้อความเตือนไปยังบัญชี Telegram ของคุณทุกครั้งที่มีการตรวจพบควัน หากต้องการให้โค้ดนี้ใช้งานได้ คุณต้องใส่ข้อมูลแก้ไข 4 ข้อมูลดังนี้คือ
1. ชื่อเครือข่ายWiFi ssid
2. รหัสผ่าน password)
3. BOTtoken
4. CHAT_ID
โค้ด
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
#define MQ2_PIN 16
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// Initialize Telegram BOT
#define BOTtoken "XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" // your Bot Token (Get from Botfather)
#define CHAT_ID "XXXXXXXXXX"
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
void setup() {
Serial.begin(115200);
pinMode(MQ2_PIN, INPUT);
// Attempt to connect to Wifi network:
Serial.print("Connecting Wifi: ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // Add root certificate for api.telegram.org
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
bot.sendMessage(CHAT_ID, "Bot started up", "");
}
void loop() {
int sensorValue = analogRead(MQ2_PIN);
float voltage = sensorValue * (3.3 / 4095.0);
Serial.print("ADC Value: ");
Serial.println(sensorValue);
if (sensorValue > 1200) {
Serial.println(" | Smoke detected!");
bot.sendMessage(CHAT_ID, "Smoke detected!!", "");
}
delay(1000);
}
https://lungmaker.com/code/telegram_v2.ino
สิ่งสำคัญ:ไปที่บัญชี Telegram ของคุณและค้นหาบอทของคุณ คุณต้องคลิก START ที่บอทก่อนจึงจะส่งข้อความถึงคุณได้
โดยสามารถ คลิกที่ t.me/ชื่อผู้ใช้ที่ลงท้ายด้วยคำว่า bot
หรือ คลิกที่ ชื่อผู้ใช้บอท ตัวอย่าง คือ Lungmaker
ต้องคลิก START บอทถึงจะทำงาน
กดที่ปุ่ม RST
จะแจ้งเตือน Bot started up
ถ้าเกินค่าที่ตั้งไว้ 1200 ให้ส่งค่าที่วัดได้พร้อมการแจ้งเตือน ผ่านทาง Telegram