[BASIC] 013 ESP NOW (ส่งข้อมูลระหว่างบอร์ด)

สวัสดีครับ สำหรับหัวข้อบทเรียนพื้นฐานบนบอร์ด HONEYLemon ที่ใช้งานผ่าน arduino library โดยเป็นการใช้งานเกี่ยวกับการสื่อสารไร้สายผ่าน ESP NOW

สำหรับ ESP-NOW นั้นเป็นโพรโตคอลที่พัฒนาโดย Espressif System เพื่อใช้ในการติดต่อสื่อสารโดยไม่จำเป็นต้องมีตัวกลาง ยกตัวอย่างเช่น Access Point หรือ Router เลย โดยสามารถเชื่อมต่อกันตรงๆ และใช้งานได้ทั้งส่งไปยังปลายทางที่กำหนด หรือใช้การ Broadcast ก็ได้เช่นกัน เหมาะสำหรับการนำมาทำงานร่วมกันเป็นกลุ่มของการสื่อสารโดยใช้ความถี่ 2.4GHz

ส่งข้อมูลได้ครั้งละ 250 byte ต่อครั้ง (payload)

ใช้งานพร้อมกันได้สูงสุด 20 ตัว

สำหรับการใช้งานนั้นทางผู้พัฒนาบอร์ด HONEYLemon ได้มีการสร้างฟังก์ชั่นให้สามารถใช้งานสำหรับการสื่อสารได้ง่ายขึ้น โดยมีคำสั่งเบื้องต้นดังนี้

lemon.setupESPNOW();  // สำหรับ setup ให้สามารถใช้งาน esp-now ได้
lemon.espnow_send();  // สำหรับการส่งไปหาอุปกรณ์ปลายทาง
lemon.espnow_broadcast();  // สำหรับการส่งไปหาอุปกรณ์ปลายทางแบบ broadcast(ส่งทุกตัว)

วิธีการใช้งาน

1.สร้างฟังก์ชั่นสำหรับรับข้อมูลก่อน

void espnowRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) {
    char macStr[22];
    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]);

    Serial.print(macStr);
    Serial.write(data, data_len);
    Serial.println();
}

2.ทำการ setup เพื่อใช้งาน ESP NOW

void setup(){
...
    lemon.setupESPNOW(); // เพื่อเตรียมความพร้อมใช้งาน ESP NOW
    esp_now_register_recv_cb(espnowRecv); // ฟังก์ชั่น callback เรียกเมื่อมีข้อความเข้ามา
...
}

3.ทำการส่งข้อมูลแบบ broadcast ไปหาอุปกรณ์ทุกตัว

...
    lemon.espnow_broadcast("Hello World!");
...

หรือหากต้องการส่งไปหาตัวใดตัวหนึ่งในระบบก็สามารถทำได้แต่ต้องทราบ Mac Address ของอุปกรณ์ปลายทางที่ต้องการส่งก่อน โดยบอร์ด HONEYLemon สามารถพิมพ์คำสั่งได้เลย

...
Serial.println("My MAC Address : "+lemon.getMAC());
...

แนะนำว่าควรนำไปไว้ใน void setup() เพื่อใช้ในการดูว่า Mac Address ของบอร์ดนั้นๆ

และสำหรับการส่งไปหาอุปกรณ์ปลายทางเฉพาะบอร์ดสามารถใช้คำสั่งได้ดังนี้

...
    lemon.espnow_send("FF:FF:FF:FF:FF:FF","Hello World!");
    // แก้ FF:FF:FF:FF:FF:FF เป็น MAC Address ปลายทาง
...

ตัวอย่าง source code

/*
    Basic : การเขียนโปรแกรมสื่อสารไร้สายด้วย ESP-NOW
*/
#include <HONEYLemon.h>

// ฟังก์ชั่นสำหรับการรับข้อมูลสำหรับ ESP-NOW
void espnowRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) {
    char macStr[22];
    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]);

    Serial.print(macStr);
    Serial.write(data, data_len);
    Serial.println();
}

void setup()
{
    lemon.begin();          // เรียกใช้งานฟังก์ชั่นเริ่มต้นของบอร์ด HONEYLemon

    Serial.begin(115200);   // เรียกใช้งาน Serial
    lemon.debug(Serial);    // ขอดู debug ของบอร์ด HONEYLemon ผ่าน Serial

    Serial.println("My MAC Address : "+lemon.getMAC()); // แสดง MAC Address ของตัวเอง

    lemon.setupESPNOW();    // เรียกใช้งาน ESP-NOW
    esp_now_register_recv_cb(espnowRecv);   // เมื่อมีข้อมูลส่งกลับมาจะให้เรียกฟังก์ชั่น espnowRecv
}

void loop()
{
    // lemon.espnow_send("FF:FF:FF:FF:FF:FF","Hello World!"));  // ส่งคำว่า Hello World! ไปหาอุปกรณ์ MAC Addess ปลายทางผ่าน ESP-NOW
    lemon.espnow_broadcast("Hello World!");                     // ส่งคำว่า Hello World! ไปหาอุปกรณ์ทุกตัวผ่าน ESP-NOW
    delay(1000);    // รอ 1000 มิลลิวินาที ( 1 วินาที )
}

Last updated