สื่อสารระหว่างบอร์ด KidBright ด้วย ESP-NOW เขียนโปรแกรมด้วย microBlock IDE

บทความสอนใช้งาน ESP-NOW สื่อสารระหว่างบอร์ด KidBright โดยไม่ต้องเชื่อมต่อก่อน พร้อมตัวอย่างโครงงานออดไร้สายด้วยบอร์ด KidBright

โพสอื่น ๆ

สื่อสารระหว่างบอร์ด KidBright ด้วย ESP-NOW เขียนโปรแกรมด้วย microBlock IDE

microBlock IDE เวอร์ชั่น 2.1.0 ได้เพิ่มเฟิร์มแวร์ MicroPython for KidBright32 V1.4.0 เข้ามา ซึ่งเฟิร์มแวร์เวอร์ชั่นนี้รองรับการเขียนโปรแกรมสื่อสารผ่าน ESP-NOW แล้ว ช่วยให้บอร์ด KidBright32 สามารถสื่อสารกันโดยไม่ต้องเชื่อมต่อก่อน

ติดตั้งส่วนเสริม ESP-NOW

เปิดโปรแกรม microBlock IDE ขึ้นมา กดที่เมนู Extension

จากนั้นค้นหา ESP-NOW แล้วกดปุ่ม Install

รอจนกว่าติดตั้งเสร็จ เมื่อติดตั้งเสร็จจะแสดงเครื่องหมายถูกต่อท้ายชื่อส่วนเสริม (ดังรูป)

ปิดหน้าต่าง Extension ไป ที่เมนูเลือกบล็อก จะมี ESP-NOW เพิ่มขึ้นมาแล้ว

รูปแบบการรับ-ส่งข้อมูล

การรับ-ส่งข้อมูลมี 2 รูปแบบ

  1. แบบ 1 ต่อ 1 (Unicast) คือ การส่งข้อมูลไปที่ตัวรับแบบเจาะจงผู้รับ ผ่านการกำหนด MAC Address โดยบอร์ด KidBright32 บอร์ดอื่น ๆ ที่มีหมายเลข MAC Address ไม่ตรงกับที่กำหนด จะไม่ได้รับข้อมูล เหมาะสำหรับบอร์ด KidBright32 ที่ใช้เป็นตัวรับมีหน้าที่ต่างกัน
  2. แบบ 1 ต่อทั้งหมด (Broadcast) คือ การส่งข้อมูลไปให้ทุกผู้รับที่อยู่ในระยะสัญญาณ บอร์ด KidBright32 ที่คอยรับข้อมูลทุกบอร์ดจะได้รับข้อมูลแบบเดียวกัน

ทดลองเขียนโปรแกรมออดไร้สาย

ตัวอย่างนี้ใช้บอร์ด KidBright32 จำนวน 3 ตัว แต่ละตัวแบ่งหน้าที่กันดังนี้

  1. ตัวแม่ – เป็นตัวส่งข้อมูลและใช้กดส่งสัญญาณกริ่ง
  2. ตัวลูก 1 – เป็นตัวรับสัญญาณจากตัวแม่ และส่งสัญญาณเสียงผ่านบัสเซอร์
  3. ตัวลูก 2 – เป็นตัวรับสัญญาณจากตัวแม่ และส่งสัญญาณเสียงผ่านบัสเซอร์

ส่งข้อมูลแบบ Broadcast

สมมติติดตั้งอุปกรณ์ภายในบ้าน

  • ตัวแม่ ถูกติดตั้งอยู่หน้าประตูบ้าน
  • ตัวลูก 1 ติดตั้งอยู่ในห้องครัว
  • ตัวลูก 2 ติดตั้งในห้องนั่งเล่น

ลักษณะการใช้งานคือ เมื่อมีคนมาเรียกหน้าบ้าน ให้กดปุ่มบนตัวแม่ ที่ติดอยู่หน้าประตูบ้าน จากนั้น ตัวลูก 1 และ ตัวลูก 2 จะส่งเสียงออกมา ทำให้คนที่อยู่ในบ้านออกมาดูได้

ตัวแม่ เมื่อกดสวิตช์จะส่งเลข 1 แบบ Broadcast ผ่าน ESP-NOW ไปที่บอร์ด KidBright32 ตัวอื่น ๆ เมื่อฝั่งรับ (ตัวลูก 1 และตัวลูก 2) ได้รับข้อมูล ก็จะส่งเสียงออกมา

ที่ตัวแม่ เขียนโปรแกรมได้ดังนี้

ฝั่งตัวลูก 1 และลูก 2 เพียงตรวจสอบว่ามีข้อมูลเข้ามาหรือไม่ เมื่อมีข้อมูลเข้ามา ก็ให้ส่งเสียงออกมา เขียนโปรแกรมได้ดังนี้

ผลที่ได้ เมื่อกดปุ่ม S1 ที่ตัวแม่ ที่ตัวลูก 1 และตัวลูก 2 จะมีเสียงดังออกมา

ส่งข้อมูลแบบ Unicast

สมมติ ติดตั้งอุปกรณ์ภายในสนามบิน

  • ตัวแม่ ติดตั้งอยู่ในหอบังคับการบิน ซึ่งจะมองเห็นรันเวย์ เรียกหน่วยดับเพลิง และหน่วยฉุกเฉินอื่น ๆ ได้ กรณีเกิดอุบัติเหตุใด ๆ ก็ตามขึ้น
  • ตัวลูก 1 ติดตั้งอยู่ที่ทำการหน่วยดับเพลิง
  • ตัวลูก 2 ติดตั้งอยู่ที่ทำการหน่วยปฐมพยาบาลฉุกเฉิน

ลักษณะการใช้งานคือ เมื่อหอบังคับการบินมองเห็นอุบัติเหตุ หอจะเลือกกดปุ่มใดปุ่มหนึ่ง ดังนี้

  • ปุ่ม S1 เรียกหน่วยดับเพลิง
  • ปุ่ม S2 เรียกหน่วยปฐมพยาบาล

โดยหลังจากกดปุ่มแล้ว หน่วยนั้น ๆ จะได้ยินเสียงออด เพื่อเป็นสัญญาณว่ามีอุบัติเหตุเกิดขึ้นแล้ว

จากหลักการดังกล่าว ที่ฝั่งตัวลูก 1 และตัวลูก 2 สามารถเขียนโปรแกรมได้ดังนี้

จากโปรแกรมด้านบน หลักการทำงานคือ การทำงานครั้งแรก ให้แสดง MAC Address ของตัวเองบน Terminal จากนั้นวนรอบตรวจสอบว่าได้รับข้อมูลผ่าน ESP-NOW หรือไม่ ถ้าใช่ ให้ส่งเสียงออกมาผ่านบัสเซอร์

หลังจากอัพโหลดโปรแกรมแล้ว ให้เปิด Terminal ขึ้นมา แล้วสังเกตหมายเลข MAC Address ให้เก็บ MAC Address ของตัวลูก 1 และตัวลูก 2 ไว้ (จำเป็นต้องใช้ในการเขียนโปรแกรมฝั่งตัวแม่) ตัวอย่างได้หมายเลข B4:E6:2D:AA:70:89 และ 8C:AA:B5:96:66:D8 ตามลำดับ

ฝั่งตัวแม่ ซึ่งติดตั้งอยู่ในหอบังคับการบิน เขียนโปรแกรมแบบเดียวกับตัวแม่ที่ส่งแบบ Broadcast แต่เปลี่ยนบล็อกจาก ESP-NOW send … เป็น ESP-NOW send … to … ซึ่งบล็อกใหม่นี้จะกำหนดผู้รับได้โดยกำหนด MAC Address และเพิ่ม on press , on release มาเป็น 2 ชุด

จากโค้ดโปรแกรมด้านบน แก้ไขบล็อก ESP-NOW send … to … ให้เป็น MAC Address ของตัวลูก 1 และตัวลูก 2 แล้วอัพโหลดโปรแกรมลงบอร์ดได้เลย

ผลที่ได้ เป็นไปตามวีดีโอนี้


บทความนี้จัดทำโดย สนธยา นงนุช ผู้เขียนบทความด้านสมองกลฝังตัวกว่า 100 บทความบนเว็บไซต์ ร้านไอโอเอ็กซ์ฮ๊อบ อนุญาตให้คัดลอก ทำซ้ำ ดัดแปลง เผยแพร่ ส่วนหนึ่งส่วนใดหรือทั้งหมดของบทความนี้ได้ โดยต้องระบุแหล่งที่มา (สัญญาอนุญาต CC-BY-4.0)