1.ติดตั้ง Arduino IDE
ดาวน์โหลด Arduino IDE จากที่นี่
https://www.arduino.cc/en/software

กำหนดค่าให้ รองรับบอร์ด ES8266
ไปที่ File > Preferences

คัดลอกและวางบรรทัดต่อไปนี้ลงในฟิลด์ Boards Manager URLs -> OK
https://arduino.esp8266.com/stable/package_esp8266com_index.json

จากนั้นไปที่ตัวจัดการบอร์ดโดยไปที่ Tools -> Board: -> Boards Manager…

ที่ช่องค้นหา พิมพ์ esp8266 จะพบ esp8266 by ESP8266 Community แล้วคลิก INSTALL

แสดงการติดตั้งสำเร็จ

เมื่อไปที่ Tools -> Board: อีกครั้ง จะพบ บอร์ด esp8266 เพิ่มเข้ามาแล้ว

2.ส่งค่า จาก Arduino UNO ไป ESP8266
การส่งค่าจาก Arduino ไปยัง ESP8266 สามารถทำได้หลายวิธี โดยทั่วไปที่นิยมใช้คือการสื่อสารผ่าน Serial โดยใช้สาย 2 เส้นคือ TX (ส่งข้อมูล) และ RX (รับข้อมูล)
หลักการทำงานของการสื่อสารผ่าน Serial (UART)
UART (Universal Asynchronous Receiver/Transmitter) คือรูปแบบหนึ่งของการสื่อสารแบบอนุกรม (Serial Communication) ที่ใช้กันอย่างแพร่หลายในระบบอิเล็กทรอนิกส์ เช่น การสื่อสารระหว่าง Arduino กับโมดูลต่าง ๆ
🔧 องค์ประกอบหลักของ UART
- TX (Transmit) — ขา/พินสำหรับส่งข้อมูล
- RX (Receive) — ขา/พินสำหรับรับข้อมูล
- GND (Ground) — ต้องต่อกราวด์ร่วมกันระหว่างอุปกรณ์ทั้งสอง
⚙️ หลักการทำงาน
NodeMCU ESP8266 -> Arduino UNO R3
รูปแบบการส่งข้อมูล
UART จะส่งข้อมูลทีละบิต โดยเริ่มจาก:
Start bit (1 บิต): บอกว่าเริ่มส่งข้อมูลแล้ว (ระดับลอจิก 0)
Data bits (5-9 บิต): ข้อมูลจริง เช่น ASCII, ตัวเลข ฯลฯ
Parity bit (1 บิต, ไม่จำเป็น): ตรวจสอบความถูกต้อง
Stop bit(s) (1 หรือ 2 บิต): จบการส่งข้อมูล (ระดับลอจิก 1)
ความเร็วในการส่งข้อมูล (Baud Rate)
เช่น 9600, 115200 bps (บิตต่อวินาที)
อุปกรณ์ที่สื่อสารกันต้องใช้ baud rate เดียวกัน
การทำงานแบบ Asynchronous
ไม่มีสัญญาณนาฬิกากลาง (Clock) เหมือน SPI/I2C
การต่อวงจร
ขาD2 -> ขา2
GND -> GND
Vcc -> 5V
ขาD3 -> ขา3

เราจะกำหนดให้ Arduino เป็นตัวส่งข้อมูลให้ ESP8266
อัพโหลดโค้ดด้านล่างลง Arduino
int i_data = 134;
float f_data = 345.52;
#include <SoftwareSerial.h>
SoftwareSerial UnoSerial(3, 2); // RX | TX
void setup()
{
pinMode(3, INPUT);
pinMode(2, OUTPUT);
Serial.begin(9600);
UnoSerial.begin(57600);
}
void loop() {
Serial.print(i_data);
Serial.print("\t");
Serial.println(f_data);
UnoSerial.print(i_data);
UnoSerial.print(" ");
UnoSerial.print(f_data);
UnoSerial.print("\n");
delay(100);
}

เราจะกำหนดให้ ESP8266 เป็นตัวรับค่า ที่ Arduino ส่งมา
อัพโหลดโค้ดด้านล่างลง ESP8266
#include <ESP8266WiFi.h>
#include <SoftwareSerial.h>
SoftwareSerial NodeSerial(D2, D3); // RX | TX
void setup() {
pinMode(D2, INPUT);
pinMode(D3, OUTPUT);
Serial.begin(9600);
NodeSerial.begin(57600);
Serial.println();
Serial.println("NodeMCU/ESP8266 Run");
}
void loop() {
while (NodeSerial.available() > 0)
{
int i_data = NodeSerial.parseInt();
float f_data = NodeSerial.parseFloat();
if (NodeSerial.read() == '\n')
{
Serial.print("NodeMCU or ESP8266");
Serial.print(" : ");
Serial.print(i_data); Serial.print(" : ");
Serial.println(f_data);
}
}
}

เปิด Serial Monitor ขึ้นมาเพื่อดูค่าที่ NodeMCU ESP8266 รับได้จาก Arduino UNO R3
จะเห็นว่า NodeMCU ESP8266 จะได้รับ ค่าใน ตัว แปร i_data และ f_data ที่เก็บอยู่ใน Arduino UNO R3

3.ทดสอบเชื่อมต่อสัญญาณ WiFi ESP8266 V2 ด้วย Arduino IDE
ทดสอบการเชื่อมต่อสัญญาณ WiFi โดยใช้ Arduino IDE เพื่อดูว่าโมดูลสามารถเชื่อมต่อกับเราเตอร์ได้สำเร็จหรือไม่
#include <ESP8266WiFi.h>
// ใส่ชื่อ WiFi และรหัสผ่านของคุณ
const char* ssid = "YourWiFiName";
const char* password = "YourWiFiPassword";
void setup() {
Serial.begin(115200);
delay(100);
Serial.println();
Serial.print("กำลังเชื่อมต่อ WiFi: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
// รอจนกว่าจะเชื่อมต่อ
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("เชื่อมต่อสำเร็จ!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
void loop() {
// ยังไม่ต้องใส่อะไรใน loop
}
เปิด Serial Monitor ขึ้นมาเพื่อดูการเชื่อมต่อ แล้วกดปุ่ม RST หรือ Reset Button

หากทุกอย่างถูกต้อง คุณจะเห็นข้อความประมาณนี้ใน Serial Monitor:
กำลังเชื่อมต่อ WiFi: YourWiFiName
......
เชื่อมต่อสำเร็จ!
IP Address: 192.168.1.XX

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 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



ตัวอย่างโค้ด ESP8266 กับ Telegram
หากต้องการให้โค้ดนี้ใช้งานได้ คุณต้องใส่ข้อมูลแก้ไข 4 ข้อมูลดังนี้คือ
1. ชื่อ WiFi
2. รหัส WiFi
3. BOT_TOKEN
4. CHAT_ID
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
// กำหนดข้อมูล WiFi
const char* ssid = "ชื่อ WiFi";
const char* password = "รหัส WiFi";
// Token จาก BotFather
#define BOT_TOKEN "ใส่ Token ของคุณ"
// ID ของผู้ใช้ Telegram (สามารถใช้ Bot API ตรวจสอบได้)
#define CHAT_ID "ใส่ Chat ID"
// ตั้งค่า WiFiClientSecure
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
// ตั้งเวลาเช็กข้อความใหม่ทุกกี่มิลลิวินาที
unsigned long lastTimeBotRan;
const unsigned long BOT_MTBS = 1000;
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
secured_client.setInsecure(); // สำหรับ SSL
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi Connected");
bot.sendMessage(CHAT_ID, "📡 ESP8266 พร้อมใช้งานแล้ว!", "");
}
void loop() {
if (millis() - lastTimeBotRan > BOT_MTBS) {
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages) {
for (int i = 0; i < numNewMessages; i++) {
String text = bot.messages[i].text;
String fromName = bot.messages[i].from_name;
if (text == "/ledon") {
digitalWrite(LED_BUILTIN, LOW);
bot.sendMessage(CHAT_ID, "💡 เปิดไฟแล้ว", "");
}
if (text == "/ledoff") {
digitalWrite(LED_BUILTIN, HIGH);
bot.sendMessage(CHAT_ID, "💡 ปิดไฟแล้ว", "");
}
}
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
lastTimeBotRan = millis();
}
}
✅ คำสั่งที่สามารถพิมพ์ใน Telegram
/ledoff
ปิดไฟบนบอร์ด
/ledon
เปิดไฟบนบอร์ด

7.ส่งค่า จาก IR_SENSOR -> UNO -> ESP8266 -> Telegram
โค้ดต่อไปนี้ใช้บ็อต Telegram ของคุณเพื่อส่งข้อความเตือนไปยังบัญชี Telegram ของคุณ เมื่อเซ็นเซอร์ตรวจจับได้
โค้ด Arduino UNO
#include <SoftwareSerial.h>
#define IR_SENSOR_PIN 7 // ขา IN จาก IR Sensor
SoftwareSerial UnoSerial(3, 2); // TX = 3, RX = 2
void setup() {
pinMode(IR_SENSOR_PIN, INPUT);
UnoSerial.begin(9600); // ส่งข้อมูลไปยัง ESP8266
Serial.begin(9600); // Debug ผ่าน Serial Monitor
}
void loop() {
int state = digitalRead(IR_SENSOR_PIN);
if (state == LOW) { // พบวัตถุ
UnoSerial.println("DETECTED"); // ส่งไปยัง ESP8266
Serial.println("ส่ง DETECTED ไปยัง ESP8266");
delay(1000); // ป้องกันการส่งซ้ำบ่อยเกิน
}
}
โค้ด ESP8266
#include <SoftwareSerial.h>
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
// Telegram config
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
const char* botToken = "YOUR_BOT_TOKEN"; // จาก BotFather
const String chatID = "YOUR_CHAT_ID"; // จาก getUpdates
// สร้าง SoftwareSerial สำหรับรับจาก Arduino
SoftwareSerial NodeSerial(D2, D3); // RX = D2 (GPIO4), TX = D3 (GPIO0)
WiFiClientSecure secured_client;
UniversalTelegramBot bot(botToken, secured_client);
void setup() {
Serial.begin(115200); // สำหรับ debug
NodeSerial.begin(9600); // ความเร็วตรงกับ Arduino UNO
// เชื่อมต่อ WiFi
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected!");
secured_client.setInsecure(); // ข้ามการตรวจสอบ SSL certificate
bot.sendMessage(chatID, "🤖 บอทเริ่มทำงานแล้ว!", "");
}
void loop() {
if (NodeSerial.available()) {
String msg = NodeSerial.readStringUntil('\n');
msg.trim();
if (msg == "DETECTED") {
Serial.println("ได้รับข้อความจาก Arduino: DETECTED");
bot.sendMessage(chatID, "🚨 IR Sensor ตรวจพบวัตถุ!", "");
}
}
}
ผลลัพธ์ที่ Telegram
