Posted on Leave a comment

การเขียนโปรแกรม ESP-NOW เบื้องต้น

เพื่อสร้างสัญญาณเชื่อมต่อระหว่างอุปกรณ์ ESP8266 2 บอร์ดโดยใช้ ESP-NOW คุณสามารถทำตามขั้นตอนดังต่อไปนี้ :

  1. เตรียมฮาร์ดแวร์ :
    • เชื่อมต่อ ESP8266 2 บอร์ดกับคอมพิวเตอร์ผ่านสาย micro USB และเปิด Arduino IDE.
  2. เปิด Arduino IDE :
    • เปิด Arduino IDE บนคอมพิวเตอร์ของคุณ. Download Arduino IDE
  3. เลือกบอร์ดและการตั้งค่า :
    • เข้าไปที่ “Tools” ในเมนูหลักของ Arduino IDE.
    • เลือก “Board” และเลือกบอร์ด ESP8266 ที่คุณใช้.
    • เลือก “Port” ที่ถูกต้องสำหรับการเชื่อมต่อกับบอร์ด ESP8266.
  4. เขียนโปรแกรม :
    • เปิดตัวอย่างโปรแกรม Arduino IDE ที่เกี่ยวข้องกับการใช้งาน ESP-NOW.
    • แก้ไขโปรแกรมตามความต้องการของคุณ (เช่น กำหนด SSID, รหัสผ่าน Wi-Fi, ข้อมูลที่จะส่งผ่าน ESP-NOW ฯลฯ).
    • อัปโหลดโปรแกรมไปยังบอร์ด ESP8266 2 ตัวพร้อมกัน.
  5. ตรวจสอบผลลัพธ์ :
    • เปิดหน้าต่าง “Serial Monitor” ใน Arduino IDE เพื่อดูผลลัพธ์ที่แสดงข้อมูลจาก ESP8266 2 ตัว.

ตัวอย่างโปรแกรม สร้างสัญญาณเชื่อมต่อระหว่าง ESP8266 2 บอร์ดโดยใช้ ESP-NOW มีรูปแบบดังนี้

#include <esp_now.h>
#include <WiFi.h>

// กำหนด MAC address ของบอร์ดที่จะส่งข้อมูล
uint8_t receiverMacAddress[] = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC };

void setup() {
  // เริ่มต้นการสื่อสารผ่าน ESP-NOW
  WiFi.mode(WIFI_STA);
  if (esp_now_init() != ESP_OK) {
    Serial.println("เกิดข้อผิดพลาดในการเริ่มต้น ESP-NOW");
    return;
  }

  // เพิ่มผู้รับข้อมูล
  esp_now_peer_info_t peerInfo;
  memcpy(peerInfo.peer_addr, receiverMacAddress, sizeof(receiverMacAddress));
  peerInfo.channel = 0;
  peerInfo.encrypt = false;
  if (esp_now_add_peer(&peerInfo) != ESP_OK) {
    Serial.println("เกิดข้อผิดพลาดในการเพิ่มผู้รับข้อมูล");
    return;
  }
}

void loop() {
  // ส่งข้อมูลผ่าน ESP-NOW
  String dataToSend = "Hello, ESP-NOW!";
  esp_now_send(receiverMacAddress, reinterpret_cast<const uint8_t*>(dataToSend.c_str()), dataToSend.length());
  delay(1000);
}

โปรแกรมนี้เป็นตัวอย่างพื้นฐานที่ใช้งาน ESP-NOW เพื่อส่งข้อมูลจากบอร์ด ESP8266 ตัวหนึ่งไปยังบอร์ด ESP8266 อีกตัวหนึ่ง โดยส่งข้อความ “Hello, ESP-NOW!” ทุกๆ 1 วินาที คุณสามารถปรับแต่งโปรแกรมตามความต้องการของคุณได้

และ โปรแกรมตัวรับข้อมูลจากบอร์ด ESP8266 ด้วย ESP-NOW มีรูปแบบดังนี้ :

#include <esp_now.h>
#include <WiFi.h>

// กำหนด MAC address ของบอร์ดส่งข้อมูล
uint8_t senderMacAddress[] = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC };

void setup() {
  Serial.begin(115200);
  
  // เริ่มต้นการใช้งาน WiFi
  WiFi.mode(WIFI_STA);
  WiFi.begin("ชื่อ WiFi", "รหัสผ่าน WiFi");

  // รอการเชื่อมต่อ WiFi
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("กำลังเชื่อมต่อ WiFi...");
  }

  // เริ่มต้นการรับข้อมูลผ่าน ESP-NOW
  if (esp_now_init() != ESP_OK) {
    Serial.println("เกิดข้อผิดพลาดในการเริ่มต้น ESP-NOW");
    return;
  }

  // เพิ่มผู้ส่งข้อมูล
  esp_now_peer_info_t peerInfo;
  memcpy(peerInfo.peer_addr, senderMacAddress, sizeof(senderMacAddress));
  peerInfo.channel = 0;
  peerInfo.encrypt = false;
  if (esp_now_add_peer(&peerInfo) != ESP_OK) {
    Serial.println("เกิดข้อผิดพลาดในการเพิ่มผู้ส่งข้อมูล");
    return;
  }

  // ตั้งค่าฟังก์ชันรับข้อมูล
  esp_now_register_recv_cb([](const uint8_t* senderMacAddress, const uint8_t* data, int dataLength) {
    Serial.println("รับข้อมูล: " + String(reinterpret_cast<const char*>(data)));
  });
}

void loop() {
  // ไม่ต้องกระทำอะไรเพิ่มเติมในลูปหลัก
}

โปรแกรมนี้จะรับข้อมูลจากบอร์ด ESP8266 อื่น โดยใช้ ESP-NOW และแสดงข้อมูลที่รับได้ผ่านฟังก์ชัน esp_now_register_recv_cb ที่ลงทะเบียนไว้ใน setup ของโปรแกรม โดยคุณสามารถปรับแต่งโปรแกรมเพื่อให้ตรงกับความต้องการของคุณได้

โปรแกรมตัวอย่างสำหรับรับข้อมูลจากบอร์ด ESP8266 อื่นโดยใช้ ESP-NOW แบบ One-way :

#include <esp_now.h>
#include <WiFi.h>

// กำหนด MAC address ของบอร์ดส่งข้อมูล
uint8_t senderMacAddress[] = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC };

void setup() {
  Serial.begin(115200);

  // เริ่มต้นการใช้งาน WiFi
  WiFi.mode(WIFI_STA);
  WiFi.begin("ชื่อ WiFi", "รหัสผ่าน WiFi");

  // รอการเชื่อมต่อ WiFi
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("กำลังเชื่อมต่อ WiFi...");
  }

  // เริ่มต้นการรับข้อมูลผ่าน ESP-NOW
  if (esp_now_init() != ESP_OK) {
    Serial.println("เกิดข้อผิดพลาดในการเริ่มต้น ESP-NOW");
    return;
  }

  // เพิ่มผู้ส่งข้อมูล
  esp_now_peer_info_t peerInfo;
  memcpy(peerInfo.peer_addr, senderMacAddress, sizeof(senderMacAddress));
  peerInfo.channel = 0;
  peerInfo.encrypt = false;
  if (esp_now_add_peer(&peerInfo) != ESP_OK) {
    Serial.println("เกิดข้อผิดพลาดในการเพิ่มผู้ส่งข้อมูล");
    return;
  }

  // ตั้งค่าฟังก์ชันรับข้อมูล
  esp_now_register_recv_cb([](const uint8_t* senderMacAddress, const uint8_t* data, int dataLength) {
    Serial.println("รับข้อมูล: " + String(reinterpret_cast<const char*>(data)));
  });
}

void loop() {
  // ไม่ต้องกระทำอะไรเพิ่มเติมในลูปหลัก
}

โปรแกรมนี้จะรับข้อมูลจากบอร์ด ESP8266 อื่นโดยใช้ ESP-NOW และแสดงข้อมูลที่รับได้ผ่านฟังก์ชัน esp_now_register_recv_cb ที่ลงทะเบียนไว้ใน setup ของโปรแกรม โปรแกรมนี้เป็นแบบ One-way ซึ่งหมายความว่ามันรับข้อมูลเท่านั้นและไม่ส่งข้อมูลกลับไปยังบอร์ดอื่น ถ้าคุณต้องการส่งข้อมูลกลับไปยังบอร์ดอื่นด้วย ESP-NOW คุณต้องเพิ่มโค้ดส่วนที่เกี่ยวข้องในฟังก์ชัน loop ของโปรแกรม

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *