Petoi Group Control Solution
ESP-NOW เป็นโปรโตคอลการสื่อสารไร้สายอีกอย่างหนึ่งที่ถูกพัฒนาโดย Espressif ซึ่งทำให้อุปกรณ์หลายตัวสามารถสื่อสารกันได้โดยไม่ต้องใช้ Wi-Fi หรือใช้ Wi-Fi ได้ตามต้องการ โปรโตคอลนี้คล้ายกับการเชื่อมต่อไร้สาย 2.4GHz แบบพลังงานต่ำที่พบได้บ่อยในเม้าส์ไร้สาย โดยอุปกรณ์จะถูกเชื่อมต่อกันก่อนที่จะสื่อสารกันได้ หลังจากการเชื่อมต่อแล้ว การเชื่อมต่อระหว่างอุปกรณ์จะเป็นต่อเนื่องแบบ peer-to-peer และไม่ต้องมีการสร้าง handshake protocol โดยเป็นเทคโนโลยีการสื่อสารที่เร็วและมีการส่งข้อมูลแบบสั้นๆ โดยไม่ต้องมีการเชื่อมต่อ ซึ่งช่วยให้คอนโทรลเลอร์พลังงานต่ำสามารถควบคุมอุปกรณ์อัจฉริยะได้โดยตรงโดยไม่ต้องเชื่อมต่อกับเราเตอร์ นี่เหมาะสำหรับสถานการณ์เช่นไฟอัจฉริยะ การควบคุมระยะไกล และการส่งข้อมูลเซ็นเซอร์กลับมา
หลังจากใช้การสื่อสาร ESP-NOW ถ้ามีอุปกรณ์บางตัวสูญเสียพลังงานโดยไม่ได้ปิดเสียงเชื่อมต่อกับอุปกรณ์ที่เหลือไว้ ให้เริ่มต้นอุปกรณ์นั้นใหม่ ก็จะเชื่อมต่อกับโหนดที่เหลืออยู่โดยอัตโนมัติเพื่อดำเนินการสื่อสารต่อไป
โหมดการสื่อสารที่รองรับโดย ESP-NOW มีดังนี้:
one-to-one communication
one-to-many communication
many-to-one communication
many-to-many communication
ESP-NOW รองรับคุณสมบัติดังนี้:
การเข้ารหัสแพคเก็ตแบบยูนิแคสต์หรือการสื่อสารแบบยูนิแคสต์โดยไม่มีการเข้ารหัสแพคเก็ต
การใช้งานผสมระหว่างอุปกรณ์ที่มีการเข้ารหัสจับคู่และอุปกรณ์ที่ไม่มีการเข้ารหัสจับคู่
สามารถบรรทุกข้อมูล payload ได้สูงสุดถึง 250 ไบต์
รองรับการตั้งค่าฟังก์ชันการส่งแบบ callback เพื่อแจ้งให้ชั้นแอปพลิเคชันทราบเมื่อการส่งแฟรมไม่สำเร็จหรือสำเร็จ
ต่อไปนี้เป็นข้อ จำกัด ของ ESP-NOW:
ไม่รองรับการส่ง Broadcast packet ชั่วคราว;
มีข้อจำกัดในการใช้กับอุปกรณ์ที่เป็นคู่ระหว่างการเข้ารหัส
ในโหมด Station รองรับคู่ระหว่างการเข้ารหัสได้สูงสุด 10 อุปกรณ์;
ในโหมด SoftAP หรือ SoftAP + Station mixed mode รองรับคู่ระหว่างการเข้ารหัสได้สูงสุด 6 อุปกรณ์;
จำนวนอุปกรณ์ที่เป็นคู่ระหว่างการเข้ารหัสไม่เกิน 20 อุปกรณ์ทั้งหมด;
ขนาดของข้อมูล payload สามารถรับได้สูงสุด 250 ไบต์.
การควบคุมกลุ่ม Petoi สามารถใช้ฟังก์ชันการสื่อสาร ESP-NOW ของ ESP8266 ได้
ในกรณีนี้ เตรียมอุปกรณ์ 2 ตัวของ Bittle (ที่มี ESP8266 ติดตั้งอยู่) และคอมพิวเตอร์ที่เชื่อมต่อกับ ESP8266 1 ตัว
ข้อมูลต่อไปนี้เกี่ยวกับการอัปโหลดโปรแกรมและการเรียกรูปแบบ MAC ของโมดูลในรูปภาพ
ติดตั้งโปรแกรม Thonny บนคอมพิวเตอร์เพื่อให้สะดวกในการดีบั๊ก MicroPython ของโมดูล ESP8266 โดยใช้โปรโตคอล ESP-NOW ต้องใช้เฟิร์มแวร์ MicroPython เฉพาะ (ดูที่ Github). เนื่องจากเวอร์ชันธรรมดาของฟิวเจอร์เซ็ต MicroPython สำหรับ 8266 จะแจ้งเตือนว่าไม่พบไลบรารี
เปิดโปรแกรม Thonny และใช้ USB uploader เพื่อเชื่อมต่อโมดูล ESP8266 แล้วป้อนคำสั่งต่อไปนี้ใน shell interface:
หากมีการแจ้งเตือนข้อผิดพลาดเช่น "ไม่พบโมดูล espnow" แปลว่ามีปัญหาในการอัพโหลดเฟิร์มแวร์ ในขณะที่หากไม่มีการแจ้งเตือน แปลว่าการอัพโหลดเฟิร์มแวร์เสร็จสมบูรณ์
ถ้าหลังจากเขียนเฟิร์มแวร์ ESP-NOW แล้วไม่มีสัญลักษณ์ >>> ของ Python ปรากฏในอินเทอร์เฟซเชลล์ หมายความว่าการเขียนเฟิร์มแวร์ล้มเหลว คุณสามารถลองใช้เครื่องมือเผาไฟแบบ Flash ชื่อ NodeMCU-PyFlasher.exe และการตั้งค่าการเผาไฟแสดงในภาพด้านล่าง:
โค้ดควบคุมกลุ่มถูกแบ่งเป็น 3 ส่วน:
Query the MAC address of the module
Transmitter program
receiver program
หมายเลข MAC คือหมายเลขที่ใช้ในการยืนยันตำแหน่งของอุปกรณ์เครือข่าย และรับผิดชอบในชั้นที่สอง (data link layer) ของโมเดลเครือข่าย OSI หมายเลข MAC ยังเรียกว่าที่อยู่ฟิสิกส์ (physical address) และที่อยู่ฮาร์ดแวร์ (hardware address) มันถูกเขียนลงบนหน่วยความจำที่ไม่สูญเสีย (เช่น EEPROM) ของการ์ดเครือข่ายเมื่อผู้ผลิตอุปกรณ์เครือข่ายผลิตอุปกรณ์นั้นๆ ขึ้นมา
ที่อยู่ MAC เป็นที่อยู่ที่ใช้สำหรับยืนยันตำแหน่งของอุปกรณ์เครือข่าย และรับผิดชอบด้านชั้นที่สอง (data link layer) ของโมเดลเครือข่าย OSI ที่อยู่ MAC ยังเรียกว่าที่อยู่ฟิสิกส์และที่อยู่ฮาร์ดแวร์ จะถูกเขียนลงในหน่วยความจำที่ไม่สูญเสีย (เช่น EEPROM) ของการ์ดเครือข่ายเมื่อมันถูกผลิตโดยผู้ผลิตอุปกรณ์เครือข่าย
ความยาวของที่อยู่ MAC คือ 48 บิต (6 ไบต์) ซึ่งมักแสดงเป็น 12 ตัวเลขฐานสิบหก 3 ไบต์แรกแทนหมายเลขอุปกรณ์ซีเรียลของผู้ผลิตฮาร์ดแวร์เครือข่ายที่ได้รับมอบหมายโดย IEEE (สถาบันวิทยาการและอิเล็กทรอนิกส์) และ 3 ไบต์สุดท้ายแทนหมายเลขอุปกรณ์เครือข่ายบางอย่าง (เช่นการ์ดเครือข่าย) ที่ผลิตโดยผู้ผลิต
เพียงแค่คุณไม่เปลี่ยนที่อยู่ MAC ของคุณ ที่อยู่ MAC จะเป็นเอกลักษณ์ในโลก ด้วยภาพการมองเห็น ที่อยู่ MAC เหมือนหมายเลขบัตรประชาชนบนบัตรประชาชน เป็นเอกลักษณ์
วิธีที่ง่ายที่สุดในการใช้ ESPNOW คือการส่งข้อมูลด้วย MAC address โดยเราจะใช้โปรแกรมเล็ก ๆ เพื่อสอบถาม MAC address ของโมดูล
หลังจากการรันโปรแกรมใน Thonny เสร็จสิ้น โปรแกรมจะแสดง MAC address บน terminal ออกมา ในขณะนี้ คุณสามารถใช้สติ๊กเกอร์สำหรับเขียน MAC address ของโมดูลแล้ววางไว้บนโมดูลได้เลย
โปรแกรมส่งประกอบด้วยส่วนต่อไปนี้:
Enable the WiFi function of the module
Configure the ESP-NOW protocol and enable it
Add a node (peer) that needs to communicate
Send a message
โค้ดที่เป็นตัวอย่างเฉพาะ:
โปรแกรมตัวรับประกอบด้วยส่วนต่อไปนี้:
Enable the WiFi function of the module
Configure the ESP-NOW protocol and enable it
Add a node (peer) that needs to communicate
Receive and decode the message, and send commands to NyBoard through the serial port
โค้ดที่เป็นตัวอย่างเฉพาะ:
โค้ดนี้ถูกแพ็กเก็ตไว้ในฟังก์ชันที่ชื่อว่า espnow_rx()
เพื่อความสะดวกในการเริ่มโปรแกรมโดยอัตโนมัติหลังจากเปิดเครื่องขึ้นมา
มีวิธีสองวิธีในการเรียกใช้โปรแกรมโดยอัตโนมัติหลังจากเปิดเครื่อง:
Rename the code file to main.py
;
Modify the boot.py
;
สำหรับผู้เริ่มต้นเราแนะนำอันแรก
การเขียนการแปลงคำสั่งผ่านทางซีเรียลที่ส่งมาจะทำให้โปรแกรมซับซ้อนและยากต่อการบำรุงรักษา ดังนั้นเราสามารถสร้างฟังก์ชันใหม่เพื่อทำการแปลงคำสั่งและส่งออกคำสั่งได้ โดยจะทำการเก็บคำสั่งที่รับเข้ามาเป็นตัวเลขเดียวกันกับคำสั่งที่ส่งออกไปยังฝั่งอีกข้าง ที่เขียนเป็นฟังก์ชันใหม่ ตั้งชื่อว่า“instruction_handle()” เพื่อแปลงข้อความที่ได้รับเป็นตัวเลขและส่งออกข้อความตามรูปแบบของคำสั่งที่ต้องการ
หลังจากอัพโหลดแล้ว MicroPython firmware บน ESP8266 เราสามารถใช้มันในการรันสคริปต์ MicroPython ได้
เราสามารถดำเนินการรันสคริปต์ MicroPython ได้โดยตรงในตัวแปร interpreter ของ MicroPython
คุณสามารถเขียนสคริปต์ Python ง่าย ๆ เพื่อสั่งให้ไฟ LED สีแดงกระพริบได้ดังนี้:
กดปุ่มเริ่มต้นสีเขียวบนแถบเครื่องมือ แล้วสคริปต์จะถูกส่งไปยังโมดูล WiFi ผ่านพอร์ตซีเรียล แล้วจึงรันหลังจากถูกตีความโดยตัวแปล MicroPython ซึ่งถูกติดตั้งไว้บน ESP8266 ในกรณีที่สคริปต์เป็นลูปไม่สิ้นสุด เมื่อต้องการหยุดการทำงาน ให้กดปุ่มหยุดสีแดงเพื่อหยุดการแบ่งเบาะแสและรีเซ็ตระบบ
เราสามารถคลิกที่ View -> File เพื่อเปิดแถบเครื่องมือไฟล์ และไฟล์จะปรากฏทางด้านซ้ายของ Thonny โดยส่วนบนคือไดเรกทอรีของเครื่องมือจำลองและส่วนล่างคือไฟล์ที่เก็บอยู่ในอุปกรณ์ MicroPython โดยค่าเริ่มต้นจะมีไฟล์ boot.py เพียงไฟล์เดียว โปรดอย่าลบไฟล์นี้ เพราะเป็นไฟล์เริ่มต้นของอุปกรณ์ MicroPython
เราบันทึกสคริปต์เป็นชื่อ blink.py และบันทึกไว้บนเครื่องคอมพิวเตอร์ จากนั้นคลิกขวาที่ไฟล์และเลือก Upload to /
:
เลือก MicroPython device
ในหน้าต่าง:
มีไฟล์blink.py
อยู่บนอุปกรณ์แล้ว ดังนั้นไฟล์ได้ถูกบันทึกบนอุปกรณ์แล้ว
ESP8266 สามารถส่งคำสั่งไปยัง NyBoard ผ่านพอร์ตซีเรียลได้ โดยเราเพียงแค่เขียนสคริปต์ส่งพอร์ตซีเรียลง่าย ๆ เพื่อส่งคำสั่งพอร์ตซีเรียลไปยัง NyBoard แล้วหุ่นยนต์ก็สามารถดำเนินการทำตามคำสั่งตามลำดับได้
เมื่อฟังก์ชั่น actSeq() ถูกเรียกใช้งาน มันจะส่งออกชุดคำสั่งผ่านพอร์ตซีเรียลไปยัง NyBoard ผ่านบอร์ด WiFi และใช้ serial monitor เพื่อดูผลลัพธ์ ดังนี้ (สำหรับความสะดวกในการอ่าน โปรดใช้การตั้งค่า automatic frame break ของตัวดีบักเกอร์พอร์ตซีเรียล เพื่อให้มีการขึ้นบรรทัดใหม่อัตโนมัติ)
หลังจากที่เราได้ debug การทำงานของ sequence action เรียบร้อยแล้ว โดยการเชื่อมต่อ ESP8266 กับ NyBoard แล้วโปรแกรมดังกล่าวจะไม่สามารถรันได้เนื่องจากฟังก์ชั่น actSeq() ไม่ได้ทำงาน ดังนั้นเราต้องการให้โปรแกรมรันโดยอัตโนมัติหลังจากมีการเปิดเครื่อง ซึ่งมีวิธีการได้แก่ 2 วิธีดังนี้:
กรุณาเปลี่ยนชื่อไฟล์เป็น "main.py
" และบันทึกลงบนอุปกรณ์ (แนะนำ)
แก้ไข Boot.py
การทำให้สามารถดีบั๊กและอัพโหลดสคริปต์ได้จากระยะไกล
การสอนที่ผ่านมาช่วยให้หุ่นยนต์สามารถดำเนินการแบบเป็นลำดับได้โดยการแก้ไขโค้ด Python แบบออฟไลน์ แต่วิธีนี้ไม่สะดวกเพราะเมื่อต้องการแก้ไขโค้ด เราจะต้องถอด WiFi module ออกและแก้ไขในโหมดออฟไลน์ และเราไม่สามารถหยุดโปรแกรมและแก้ไขพารามิเตอร์ได้โดยยืดหยุ่น สาเหตุเพราะ ESP8266 มีพอร์ตซีเรียลเพียงตัวเดียว และเราต้องใช้มันในการสื่อสารกับ NyBoard โดยดีอีกฝั่ง MicroPython ใช้ฟังก์ชั่น WiFi ที่ ESP มีให้เพื่อให้สามารถทำการดีบั๊กโค้ด Python แบบไร้สายได้ผ่าน WebREPL
ด้วยเอกลักษณ์ของ ESP8266 และเอกสารอย่างเป็นทางการ ทางเราได้เขียนคู่มือต่อไปนี้:
หลังจากเชื่อมต่ออุปกรณ์แล้ว ให้เข้าสู่อินเตอร์เฟสของ MicroPython แล้วพิมพ์คำสั่งimport webrepl_setup
webrepl_setup และทำตามขั้นตอนตามคำแนะนำ:
การเปิดใช้งาน WebREPL เมื่อเปิดเครื่อง: E
ตั้งค่ารหัสผ่านสำหรับ WebREPL โดยใช้คำสั่ง "Set password for it" และกรอกรหัสผ่านที่ต้องการ (เช่น 1234)
การตั้งค่าเรียบร้อยแล้ว ให้ปิด shell โดยการพิมพ์ exit() แล้วกด Enter เพื่อออกจากโหมด shell และกลับไปยังหน้าจอคำสั่ง Thonny
รีบูทโดยการพิมพ์y reboot the ESP8266: y
2. The script to setup webREPL
เราใช้สคริปต์ตัวอย่างด้านล่างนี้ เพื่อแทนที่ SSID และรหัสผ่านด้วยข้อมูลเครือข่ายของคุณในบริเวณใกล้เคียง:
หลังจากเรียกใช้งานสคริปต์ มันจะพยายามเชื่อมต่อกับเครือข่าย WiFi อยู่เสมอ และเมื่อเชื่อมต่อสำเร็จแล้ว มันจะเริ่มต้น WebREPL service ของอุปกรณ์โดยอัตโนมัติ
IP address นี้จะถูกกำหนดโดย DHCP ของเร้าเตอร์ ดังนั้นอาจจะเปลี่ยนไปตามเครือข่ายและการกำหนดค่าของเร้าเตอร์ กรุณาจำ IP address นี้เพื่อนำไปใช้ในการตั้งค่า WebREPL ต่อไป
ขณะนี้เรากำลังดีบักสคริปต์ Python ผ่าน WebREPL และพอร์ตซีเรียลก่อนหน้านั้นถูกใช้สื่อสารกับ NyBoard ดังนั้นในตัวเลือก ให้เปลี่ยนพอร์ต USB-COMx ก่อนหน้านี้เป็น WebREPL
จากนั้นให้กรอกที่อยู่ IP, พอร์ต และรหัสผ่านของ WebREPL แล้วคลิก OK.
When WebREPL Connected
is displayed, the connection is successful.
คุณสามารถทดสอบตัวอย่างอย่างง่ายได้ที่ blink.py
.
WebREPL เป็นการบันทึกพอร์ตซีเรียลและรองรับการ Debug ไร้สาย ข้อเสียคือความเร็วช้า (เนื่องจากการล่าช้าของเครือข่าย) และเวลารอการรีเซ็ตซอฟต์แวร์ยาว ๆ
ตอนนี้เราสามารถใช้ webREPL ในการดีบั๊กสคริปต์ได้แล้ว แต่เมื่อเราเปิดโปรแกรมตรวจสอบพอร์ตซีเรียล เราจะพบว่าเมื่อเรารันสคริปต์ พอร์ตซีเรียลจะส่งเนื้อหาในการดีบั๊กออกมาเป็นจำนวนมาก จำนวนนี้จะทำให้ NyBoard ตอบสนองช้าลงและล่มเหลว ดังรูปด้านล่าง:
เราหวังว่าเมื่อดีบั๊กโปรแกรม ซีเรียลพอร์ตจะแสดงเฉพาะคำสั่งที่เราต้องการ ไม่ใช่ข้อมูล Debug ที่ไม่จำเป็น เปิดไฟล์ boot.py
บนอุปกรณ์ แก้ไขหมายเลขบรรทัด uos.dupterm(None, 1)
และบันทึก ให้ยกเลิกการผูกพอร์ตซีเรียลและ REPL debug รีสตาร์ทโมดูล และจะไม่มีข้อมูลดีบั๊กถูกแสดงบนซีเรียลพอร์ต ดังตัวอย่าง:
เพื่อเพิ่มความสมบูรณ์ เราสามารถแสดงข้อมูล debug ผ่าน print() statement ซึ่งจะถูกแสดงใน Shell ผ่าน WiFi
ด้วยการใช้ ESP8266 และ webREPL คุณสามารถแก้ไขลำดับการทำงานของหุ่นยนต์ด้วย MicroPython ได้อย่างสะดวกด้วยครับ
คู่มือการใช้โมดูล WiFi เป็นตัวควบคุม MicroPython
USB Uploader (CH340C)
WiFi ESP8266
นำโมดูล ESP8266 แทนที่ลงในอินเทอร์เฟซการกำหนดค่าโมดูลของ USB uploader แล้วค้นหาพอร์ต COM ที่เกี่ยวข้องใน Windows device manager
ดาวน์โหลดเวอร์ชันล่าสุดของ Thonny ซึ่งเป็นตัวแก้ไข Python แบบติดตั้งพร้อมใช้งาน MicroPython ได้เลย
ซอฟต์แวร์ ESP8266 ที่คอมไพล์แล้วถูกจัดหาไว้ในเว็บไซต์อย่างเป็นทางการของ MicroPython เนื่องจากโมดูล WiFi ของเราเป็นขนาด 4MB ดังนั้นโปรดเลือกซอฟต์แวร์ล่าสุดที่มีชื่อว่า ESP8266 พร้อมกับ 2MiB+ flash และดาวน์โหลดไฟล์ bin นั้น
มีวิธีการอัพโหลดซอฟต์แวร์ MicroPython ไปยังโมดูล ESP8266 2 วิธีด้วยกัน:
การใช้เครื่องมือดาวน์โหลด ESPtool ช่วยให้คุณสามารถควบคุมพาร์ติชันและการใช้งาน Flash ได้อย่างแม่นยำมากกว่า
การใช้เครื่องมือที่ซ่อนอยู่ใน Thonny
เพื่อความสะดวก เราจะใช้เครื่องมือที่ซ่อนอยู่ใน Thonny ขั้นตอนการใช้งานคือดังนี้:
เปิดโปรแกรม Thonny หน้าต่างหลักจะเป็นดังรูปด้านล่าง โดย Thonny จะใช้ Python interpreter ในไดเร็กทอรีการติดตั้งโดยปริยาย
เลือก Tools -> Options เพื่อเข้าสู่หน้าต่างตัวเลือก ในแท็บ General สามารถเลือกภาษาที่ต้องการได้ (ต้องรีสตาร์ทโปรแกรม)
เปิด Thonny และเลือกหัวข้อ Tools -> Options เพื่อเข้าสู่หน้าต่างตัวเลือก ในแท็บ General ให้เลือกภาษาที่เราต้องการ (จะต้องทำการรีสตาร์ท) และในแท็บ Interpreter เราจะเปลี่ยน Interpreter เริ่มต้นจาก Python3 มาเป็น MicroPython (ESP8266) และเลือกพอร์ตที่ถูกต้อง
ในขณะนี้โมดูล ESP8266 ยังไม่ได้อัปโหลดฟิร์มแวร์ MicroPython ให้คลิกที่ "Install or update firmware" ที่มุมล่างขวาของรูปภาพด้านบนเพื่ออัปเดตฟิร์มแวร์โดยใช้เครื่องมือที่มีอยู่ในโปรแกรม Thonny
เลือกพอร์ต (COMx) ที่ ESP8266 module อยู่และเลือกตำแหน่งที่อยู่ของ firmware MicroPython (.bin file) ที่ดาวน์โหลดมา ตรวจสอบโหมดแฟลช: from image file (keep) (ความเร็วจะช้าลง แต่มันเพียงแค่ต้องไหวทนและไม่ง่ายต่อการทำผิดพลาด) และเลือกตัวเลือก Erase flash before installing กดปุ่ม Install
ขั้นตอนนี้จะแสดงความคืบหน้าในมุมมองด้านล่างของอินเทอร์เฟซ โปรแกรมจะเริ่มลบ Flash ก่อนแล้วจึงเขียน Firmware จากนั้นจะแสดงคำว่า "Done" เมื่อการโปรแกรมเสร็จสมบูรณ์
การเตรียมซอฟต์แวร์เสร็จสิ้นแล้ว และหน้าจอด้านล่างจะปรากฏขึ้นหลังจากปิดอินเตอร์เฟซการดาวน์โหลด ข้อความสีแดงเป็นเกี่ยวกับการพิมพ์ของ ESP8266 เนื่องจาก ESP8266 จะพิมพ์สตริงของรหัสด้วยอัตราเร็ว baud ที่แตกต่างกับ 115200 เมื่อเริ่มต้น สตริงรหัสนี้ไม่สามารถรู้จักได้โดย MicroPython Shell การปรากฏเครื่องหมาย >>> ของ Python แสดงว่า Firmware ถูกอัปโหลดสำเร็จ
Download address:
Firmware download address: