เชื่อม ESP32 สองตัวด้วย UART Serial – ระบบ Local แบบง่ายไม่พึ่ง WiFi
รู้จัก UART: ช่องทางส่งข้อมูลที่เร็ว ง่าย ไม่ต้องตั้งค่า WiFi
ถ้าใครกำลังทำระบบ Smart Farm หรือควบคุมอุปกรณ์หลายจุด แล้วไม่อยากวุ่นกับระบบเน็ตเวิร์กหรือ WiFi แนะนำให้ลองใช้ UART Serial บน ESP32 ครับ
ESP32 รองรับ UART สูงสุด 3 ช่อง ใช้เชื่อมต่อระหว่าง ESP32 หลายตัวได้ เหมาะกับระบบ Master–Slave เช่น:
- Master ส่งคำสั่งเปิด/ปิดไปยัง Slave
- Slave อ่านค่าจากเซ็นเซอร์ แล้วส่งข้อมูลกลับไปให้ Master
“ก่อนจะลงมือเขียนโค้ด แนะนำให้อ่าน ESP32 Pinout เพื่อเลือกพินให้ถูกต้อง”
“เมื่อรู้พินแล้ว มาลอง อ่าน/เขียน Digital IO กันต่อ”
การต่อสาย ESP32 ↔ ESP32
การเชื่อมต่อทำง่ายมาก แค่ต่อสายดังนี้:
| Master | Slave |
|---|---|
| TX | RX |
| RX | TX |
| GND | GND |
🧠 แนะนำ: ใช้
Serial2เพื่อแยกออกจาก UART0 ที่ใช้กับ Serial Monitor
โค้ดตัวอย่างฝั่ง Slave: รับคำสั่งจาก Master แล้วควบคุม LED
/*
* Deva DIY
* โค๊ดโปรแกรม Slave สื่อสารข้อมูลผ่าน Serial UART
* รับข้อมูลคำสั่ง เปิด ปิด LED ทาง UART จาก ESP32 Master และส่งข้อมูลสถานะ LED กลับไป
*/
//กำหนดขา Pins ESP32
const int led_pins = 23;
//ตัวแปรเก็บค่า ON-OFF LED
String State_led = "OFF";
void setup() {
Serial.begin(115200);
Serial2.begin(115200);
pinMode(led_pins, OUTPUT);
digitalWrite(led_pins, LOW);
}
void loop() {
// รับข้อมูลจาก Master ESP32 คำสั่ง เปิด ปิด LED
static bool flagReady = false;
String Buf = "";
while (Serial2.available() > 0) {
char Recv = (char)Serial2.read();
Buf += Recv;
if (Recv == '\n') {
Buf.trim();
State_led = Buf;
flagReady = true;
//Serial.print("State_led = ");
//Serial.println(State_led);
}
}
// เปิด-ปิด LED จากคำสั่งที่ได้รับจาก ESP32 Master และ ส่งค่าสถานะ LED ปัจจุบันกลับไป Master
if(flagReady){
if(State_led == "ON"){
digitalWrite(led_pins, HIGH);
Serial2.println("ON");
flagReady = false;
}
else if(State_led == "OFF"){
digitalWrite(led_pins, LOW);
Serial2.println("OFF");
flagReady = false;
}
}
}
โค้ดตัวอย่างฝั่ง Master: ส่งคำสั่งและรอรับสถานะ
/*
* Deva DIY
* โค๊ดโปรแกรม Master สื่อสารข้อมูลผ่าน Serial UART
* ส่งข้อมูลคำสั่ง เปิด ปิด LED ทาง UART ไปที่ ESP32 Slave และรับข้อมูลสถานะ LED
*/
//กำหนดขา Pins ESP32
const int touch_pins = 15;
//ตัวแปรสำหรับเก็บค่า Touch
int touch_Value;
//ตัวแปรเก็บค่า ON-OFF LED จาก Slave ESP32
String State_led = "OFF";
void setup() {
Serial.begin(115200);
Serial2.begin(115200);
}
void loop() {
// อ่านสถานะของค่า Touch pins:
touch_Value = touchRead(touch_pins);
//Serial.print("touch_Value = ");
//Serial.println(touch_Value);
// ถ้ากดสวิตช์สัมผัสค่า touch_Value < 20 และค้างไว้ 1 วินาที
// ให้ส่งข้อมูล transmitter ไป Slave ESP32 เพื่อเปิด-ปิด LED
static bool touch_change = false;
static bool touch_state = false;
static bool hold_state = false;
const long debounceDelay = 1000;
static unsigned long lastDebounceTime;
if(touch_Value < 20){
if (touch_change == false) {
touch_change = true;
lastDebounceTime = millis();
}
else if ((millis() - lastDebounceTime >= debounceDelay) && (!hold_state)) {;
touch_state = true;
hold_state = true;
//Serial.print("touch_state = ");
//Serial.println(touch_state);
}
else {
touch_state = false;
}
}
else if (touch_Value > 20) {
touch_change = false;
hold_state = false;
touch_state = false;
}
if(touch_state){
if(State_led == "ON"){
Serial2.println("OFF");
Serial.println(" OFF LED to Slave ");
}
else if (State_led == "OFF"){
Serial2.println("ON");
Serial.println(" ON LED to Slave ");
}
}
// รับข้อมูลจาก Slave ESP32 สถานะเปิดปิด LED
String Buf = "";
while (Serial2.available() > 0) {
char Recv = (char)Serial2.read();
Buf += Recv;
if (Recv == '\n') {
Buf.trim();
State_led = Buf;
//Serial.print("State_led = ");
//Serial.println(State_led);
}
}
}
ข้อดีของ UART Serial สำหรับ Smart Farm
✅ ใช้งานแบบ Local ได้เลย ไม่ต้องเชื่อม WiFi
✅ สั่งเปิด/ปิดอุปกรณ์ และอ่านค่ากลับได้
✅ เสถียร ไม่หลุดง่ายเหมือน WiFi
✅ ใช้งานกับรีเลย์ เซ็นเซอร์ และ Node ต่าง ๆ ได้
กรุณา เข้าสู่ระบบ เพื่อดาวน์โหลด
บทความที่เกี่ยวข้อง (แนะนำให้อ่านต่อ)
💬 FAQ
Q: UART คืออะไรใน ESP32?
A: UART (Universal Asynchronous Receiver/Transmitter) คือช่องทางสื่อสารแบบอนุกรม ใช้สายแค่ 2 เส้น (TX, RX) ส่งข้อมูลระหว่าง ESP32 กับอุปกรณ์อื่น เช่น ESP32 อีกตัว, เซ็นเซอร์, หรือ PLC
- UART0 ใช้กับ Serial Monitor (โปรแกรม / Debug)
- UART1 / UART2 ใช้สื่อสารกับอุปกรณ์อื่นได้ (เลือกขา GPIO เองได้)
Q: ต้องใช้สายอะไรเชื่อม ESP32 2 ตัว?
A: ใช้สาย TX ↔ RX และ GND ร่วมกัน หรือใช้ USB ต่อทั้งคู่กับคอมพิวเตอร์ก็ได้
Q: จะรู้ได้ไงว่า Master กับ Slave เชื่อมกันสำเร็จ?
A: ทดสอบส่งข้อความจาก Master ไป Slave แล้วให้ Slave ตอบกลับ ถ้า Serial Monitor ของ Master แสดงค่าที่ส่งกลับมา แสดงว่าเชื่อมสำเร็จ
Q: ทำไมข้อมูลส่งมาไม่ครบ หรือกลายเป็นอักขระเพี้ยน?
A: อาจเกิดจาก Baud Rate ไม่ตรงกัน หรือใช้พิน TX/RX ซ้ำกับฟังก์ชันอื่น ให้ตรวจสอบว่า:
Serial2.begin(baud)ของทั้งสองฝั่งตั้งค่าเหมือนกัน- ใช้พินที่รองรับ UART จริง
Q: ใช้ ESP32 UART ควบคุมรีเลย์ หรือเซ็นเซอร์ได้ไหม?
A: ได้ครับ นิยมมากในระบบ Smart Farm เช่น:
Master ควบคุมการเปิด/ปิดรีเลย์ของ Slave
Slave ส่งค่าจากเซ็นเซอร์กลับมาให้ Master ประมวลผล
Q: จะขยายระบบเป็น 1 ต่อหลาย (1 Master คุมหลาย Slave) ได้ไหม?
A: ได้โดยใช้ UART ร่วมกับ Multiplexer, RS485 หรือเปลี่ยนเป็นระบบ Protocol เช่น Modbus หรือ I2C ก็ได้ แต่ต้องออกแบบให้ดีขึ้น






