1.ติดตั้ง Arduino IDE

ดาวน์โหลด Arduino IDE จากที่นี่

https://www.arduino.cc/en/software

This image has an empty alt attribute; its file name is e1-1024x573.png




กำหนดค่าให้ รองรับบอร์ด ES8266


ไปที่ File > Preferences

This image has an empty alt attribute; its file name is e2-1024x633.png


คัดลอกและวางบรรทัดต่อไปนี้ลงในฟิลด์ 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

  1. TX (Transmit) — ขา/พินสำหรับส่งข้อมูล
  2. RX (Receive) — ขา/พินสำหรับรับข้อมูล
  3. 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

ทำตามขั้นตอนต่อไปเพื่อติดตั้งไลบรารีเวอร์ชันล่าสุด

  1. คลิกที่นี่เพื่อดาวน์โหลดไลบรารี Click here to download the Universal Arduino Telegram Bot library.
  2. ไปที่ Sketch Include Library > Add.ZIP Library...




สิ่งสำคัญ:อย่าติดตั้งไลบรารีผ่านทาง Arduino Library Manager เพราะอาจติดตั้งเวอร์ชันที่ไม่รองรับอีกต่อไป


ติดตั้ง ไลบรารี ArduinoJson

คุณต้องติดตั้ง ไลบรารี ArduinoJson ด้วย ทำตามขั้นตอนต่อไปนี้เพื่อติดตั้งไลบรารี

  1. ไปที่ Skech Include Library > Manage Libraries.
  2. ค้นหา “ArduinoJson”
  3. ติดตั้ง Library 





ตัวอย่างโค้ด ESP8266 กับ Telegram

หากต้องการให้โค้ดนี้ใช้งานได้ คุณต้องใส่ข้อมูลแก้ไข 4 ข้อมูลดังนี้คือ

#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


โค้ด 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

Leave a Reply

Your email address will not be published. Required fields are marked *