[BASIC] 013 ESP NOW (ส่งข้อมูลระหว่างบอร์ด)
สวัสดีครับ สำหรับหัวข้อบทเรียนพื้นฐานบนบอร์ด HONEYLemon ที่ใช้งานผ่าน arduino library โดยเป็นการใช้งานเกี่ยวกับการสื่อสารไร้สายผ่าน ESP NOW
สำหรับ ESP-NOW นั้นเป็นโพรโตคอลที่พัฒนาโดย Espressif System เพื่อใช้ในการติดต่อสื่อสารโดยไม่จำเป็นต้องมีตัวกลาง ยกตัวอย่างเช่น Access Point หรือ Router เลย โดยสามารถเชื่อมต่อกันตรงๆ และใช้งานได้ทั้งส่งไปยังปลายทางที่กำหนด หรือใช้การ Broadcast ก็ได้เช่นกัน เหมาะสำหรับการนำมาทำงานร่วมกันเป็นกลุ่มของการสื่อสารโดยใช้ความถี่ 2.4GHz
ส่งข้อมูลได้ครั้งละ 250 byte ต่อครั้ง (payload)
ใช้งานพร้อมกันได้สูงสุด 20 ตัว
สำหรับการใช้งานนั้นทางผู้พัฒนาบอร์ด HONEYLemon ได้มีการสร้างฟังก์ชั่นให้สามารถใช้งานสำหรับการสื่อสารได้ง่ายขึ้น โดยมีคำสั่งเบื้องต้นดังนี้
1
lemon.setupESPNOW(); // สำหรับ setup ให้สามารถใช้งาน esp-now ได้
2
lemon.espnow_send(); // สำหรับการส่งไปหาอุปกรณ์ปลายทาง
3
lemon.espnow_broadcast(); // สำหรับการส่งไปหาอุปกรณ์ปลายทางแบบ broadcast(ส่งทุกตัว)
Copied!
วิธีการใช้งาน
1.สร้างฟังก์ชั่นสำหรับรับข้อมูลก่อน
1
void espnowRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) {
2
char macStr[22];
3
snprintf(macStr, sizeof(macStr), "[%02X:%02X:%02X:%02X:%02X:%02X]: ", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
4
5
Serial.print(macStr);
6
Serial.write(data, data_len);
7
Serial.println();
8
}
Copied!
2.ทำการ setup เพื่อใช้งาน ESP NOW
1
void setup(){
2
...
3
lemon.setupESPNOW(); // เพื่อเตรียมความพร้อมใช้งาน ESP NOW
4
esp_now_register_recv_cb(espnowRecv); // ฟังก์ชั่น callback เรียกเมื่อมีข้อความเข้ามา
5
...
6
}
Copied!
3.ทำการส่งข้อมูลแบบ broadcast ไปหาอุปกรณ์ทุกตัว
1
...
2
lemon.espnow_broadcast("Hello World!");
3
...
Copied!
หรือหากต้องการส่งไปหาตัวใดตัวหนึ่งในระบบก็สามารถทำได้แต่ต้องทราบ Mac Address ของอุปกรณ์ปลายทางที่ต้องการส่งก่อน โดยบอร์ด HONEYLemon สามารถพิมพ์คำสั่งได้เลย
1
...
2
Serial.println("My MAC Address : "+lemon.getMAC());
3
...
Copied!
แนะนำว่าควรนำไปไว้ใน void setup() เพื่อใช้ในการดูว่า Mac Address ของบอร์ดนั้นๆ
และสำหรับการส่งไปหาอุปกรณ์ปลายทางเฉพาะบอร์ดสามารถใช้คำสั่งได้ดังนี้
1
...
2
lemon.espnow_send("FF:FF:FF:FF:FF:FF","Hello World!");
3
// แก้ FF:FF:FF:FF:FF:FF เป็น MAC Address ปลายทาง
4
...
Copied!
ตัวอย่าง source code
1
/*
2
Basic : การเขียนโปรแกรมสื่อสารไร้สายด้วย ESP-NOW
3
*/
4
#include <HONEYLemon.h>
5
6
// ฟังก์ชั่นสำหรับการรับข้อมูลสำหรับ ESP-NOW
7
void espnowRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) {
8
char macStr[22];
9
snprintf(macStr, sizeof(macStr), "[%02X:%02X:%02X:%02X:%02X:%02X]: ", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
10
11
Serial.print(macStr);
12
Serial.write(data, data_len);
13
Serial.println();
14
}
15
16
void setup()
17
{
18
lemon.begin(); // เรียกใช้งานฟังก์ชั่นเริ่มต้นของบอร์ด HONEYLemon
19
20
Serial.begin(115200); // เรียกใช้งาน Serial
21
lemon.debug(Serial); // ขอดู debug ของบอร์ด HONEYLemon ผ่าน Serial
22
23
Serial.println("My MAC Address : "+lemon.getMAC()); // แสดง MAC Address ของตัวเอง
24
25
lemon.setupESPNOW(); // เรียกใช้งาน ESP-NOW
26
esp_now_register_recv_cb(espnowRecv); // เมื่อมีข้อมูลส่งกลับมาจะให้เรียกฟังก์ชั่น espnowRecv
27
}
28
29
void loop()
30
{
31
// lemon.espnow_send("FF:FF:FF:FF:FF:FF","Hello World!")); // ส่งคำว่า Hello World! ไปหาอุปกรณ์ MAC Addess ปลายทางผ่าน ESP-NOW
32
lemon.espnow_broadcast("Hello World!"); // ส่งคำว่า Hello World! ไปหาอุปกรณ์ทุกตัวผ่าน ESP-NOW
33
delay(1000); // รอ 1000 มิลลิวินาที ( 1 วินาที )
34
}
Copied!
Last modified 1yr ago
Copy link