Programming with MicroPython
แนะนำการใช้งาน MicroPython และ CircuitPython สำหรับบอร์ดไมโครคอนโทรลเลอร์ที่ใช้ตัวประมวลผลประเภทต่าง ๆ เช่น nRF518xx / nRF528xx, STM32, ESP32, ATSAMD21, RP2040 เป็นต้น
ไมโครไพธอน (MicroPython)
จัดทำและเผยแพร่เป็นวิทยาทาน โดย เรวัต ศิริโภคาภิรมย์
โดยทั่วไปแล้วในการเขียนโปรแกรมสำหรับไมโครคอนโทรลเลอร์ เรามักจะใช้ภาษาคอมพิวเตอร์ อย่างเช่น C/C++ ซึ่งก็ถือว่าเป็นภาษาคอมพิวเตอร์ระดับสูง (High-Level Programming Language) แต่ถ้าจะใช้ภาษาอื่นในประเภท Scripting Languages ยกตัวอย่างเช่น Python 3 จะเป็นไปได้หรือไม่ ?
ไมโครไพธอนเป็นซอฟต์แวร์ประเภท Open Source ทำหน้าที่เป็นเฟิร์มแวร์ (Firmware) สำหรับบอร์ดไมโครคอนโทรลเลอร์ ช่วยให้เราสามารถเขียนและรันโค้ดไพธอนได้ และสำหรับผู้ที่มีพื้นฐานภาษาไพธอนมาบ้างแล้ว การเลือกใช้ไมโครไพธอนก็อาจช่วยให้การเรียนรู้เกี่ยวกับการเขียนโปรแกรมและใช้งานไมโครคอนโทรลเลอร์สำหรับผู้เริ่มต้นทำได้ง่ายขึ้น เมื่อเปรียบเทียบกับการใช้งานภาษา C/C++
ภาษาไมโครไพธอน สามารถนำไปใช้สอนในชั้นเรียนได้หลายช่วงอายุของผู้เรียน ตั้งแต่ในโรงเรียนจนถึงระดับมหาวิทยาลัย แต่ในประเด็นความยากง่ายของเนื้อหาและกิจกรรมการเรียนรู้ที่เกี่ยวข้องนั้น ก็จะต้องมีการเลือกหรือปรับให้เหมาะกับระดับชั้นของผู้เรียน
ข้อสังเกตเกี่ยวกับ MicroPython
ทำให้สามารถเขียนโค้ด Python 3 เพื่อเข้าถึงและใช้งานฮาร์ดแวร์ภายในไมโครคอนโทรลเลอร์ได้ง่าย เช่น GPIO, Timer, SPI, I2C, UART, ADC, DAC, Wi-Fi เป็นต้น
สามารถสื่อสารกับไมโครไพธอนได้แบบ interactive หรือที่เรียกว่า REPL (Read, Eval, Print, Loop) ผ่านพอร์ต USB-to-Serial หรือ USB-CDC
ในกรณีที่ใช้ชิป Wi-Fi SoC เช่น ESP8266 หรือ ESP32 ก็สามารถใช้ REPL (WebREPL) แบบไร้สายผ่าน Wi-Fi ได้
การเลือกใช้บอร์ดไมโครคอนโทรลเลอร์สำหรับ MicroPython
สำหรับผู้ที่สนใจจะลองใช้หรือเขียนโค้ดไมโครไพธอน ร่วมกับบอร์ดไมโครคอนโทรลเลอร์ ในปัจจุบัน มีไมโครคอนโทรลเลอร์ให้เลือกใช้ได้หลายตระกูล (32 บิต) อาจลองพิจารณาดูตัวเลือกเหล่านี้
บอร์ดไมโครคอนโทรลเลอร์ STM32 ซึ่งมีหลายรุ่น แต่แนะนำให้ใช้ STM32F4 (ARM Cortex-M4F), STM32L4, STM32F7 อาจเป็นบอร์ดที่ทางผู้พัฒนา MicroPython ผลิตขาย หรืออาจเป็นบอร์ดอื่น เช่น STM32 Nucleo เป็นต้น
Adafruit Feather HUZZAH ESP8266
Sparkfun ESP32 Thing
WeMos D1 mini, WeMos LOLIN D32
WROOM-32 DEVKIT V4
PyCom WiPy
ข้อสังเกต: ในปัจจุบันก็มีบอร์ดหรือโมดูล ESP32 ให้เลือกใช้ได้หลายรูปแบบ แต่ก็สามารถจำแนกได้เป็นสองกลุ่ม (เรียกว่า non-psRAM กับ psRAM-enabled) ซึ่งขึ้นอยู่กับว่า มีการเพิ่มชิป psRAM (pseudo-static RAM) ภายนอกหรือไม่ มีความจุตั้งแต่ 4MB หรือ 8MB เป็นต้น บอร์ด ESP32 ที่มี psRAM ก็มักจะมีราคาสูงกว่าบอร์ดที่ไม่มี แต่ก็เหมาะสำหรับนำมาใช้กับไมโครไพธอน ทำให้มีหน่วยความจำเพิ่มขึ้น สำหรับสร้าง Stack/Heap ได้ขนาดใหญ่ขึ้น เช่น การเก็บข้อมูลในอาร์เรย์ได้มากขึ้น เป็นต้น
การเลือกใช้ Editor สำหรับ MicroPython
ตัวอย่างซอฟต์แวร์ประเภท Open Source ที่เราสามารถนำมาใช้เขียนโค้ดไมโครไพธอน และเชื่อมต่อกับบอร์ดไมโครคอนโทรลเลอร์ที่ได้ติดตั้งเฟิร์มแวร์แล้ว ได้แก่
ถ้าเปิดพอร์ต Serial (Virtual COM port) เชื่อมต่อกับพอร์ต USB ของบอร์ดไมโครคอนโทรลเลอร์ที่ได้ติดตั้งเฟิร์มแวร์สำหรับไมโครไพธอนไว้แล้ว จะเป็นการเชื่อมต่อกับส่วนที่เรียกว่า REPL (เหมือน Python Interactive Shell) รอให้ผู้ใช้พิมพ์คำสั่งสำหรับไมโครไพธอน
หลักการทำงานของ REPL (Read–Eval–Print Loop) มีดังนี้
Read the user input (Python code)
Evaluate Python code
Print any results (e.g., output texts or error messages)
Loop back to step 1
Python IDE ที่รองรับการใช้งานสำหรับไมโครไพธอน เช่น Thonny IDE นอกจากมีส่วนที่เชื่อมต่อกับ REPL ได้แล้ว ยังสามารถทำคำสั่ง เพื่อรันหรืออัปโหลดโค้ด .py และบันทึกเป็นไฟล์ลงใน Flash Storage ของ MicroPython Device ได้ด้วย
การเขียนโค้ดไมโครไพธอนสำหรับ ESP32: กรณีตัวอย่าง
ผู้เขียนได้เคยลองใช้งานไมโครไพธอนร่วมกับบอร์ดไมโครคอนโทรลเลอร์ ESP32 (โมดูล M5Stack Core) เช่น การเขียนโปรแกรมเพื่อควบคุมและใช้งานอุปกรณ์เครื่องมือวัด Rigol Digital Oscilloscope รุ่น DS2000A Series ที่เชื่อมต่อผ่าน LAN (Ethernet Port) และติดต่อสื่อสารกับบอร์ด ESP32 ผ่านทาง Wi-Fi ในระบบเครือข่ายเดียวกัน
ในกรณีตัวอย่างนี้แสดงให้เห็นว่า เราสามารถเขียนโค้ดไมโครไพธอน เพื่อส่งคำสั่งประเภท SCPI (Standard Commands for Programmable Instruments) ไปยังอุปกรณ์เครื่องมือวัดที่อยู่ห่างออกไปในระบบเครือข่าย (โดยใช้คำสั่งของไมโครไพธอนสำหรับการเปิดใช้งาน TCP Socket)
คำสั่ง SCPI ที่ถูกส่งไปนั้น จะถูกใช้เพื่อตั้งค่าการใช้งานอุปกรณ์ และอ่านข้อมูลที่ได้จากการวัดสัญญาณ (เช่น หนึ่งช่องสัญญาณ) แล้วส่งกลับมายัง ESP32 และแสดงผลเป็นรูปกราฟของสัญญาณบนจอภาพ Graphic LCD ของโมดูล M5Stack Core เป็นต้น
การเขียนโค้ดไมโครไพธอนสำหรับการสื่อสารกับอุปกรณ์เครื่องมือวัดดังกล่าว ผ่านทาง Wi-Fi แม้จะมีความแตกต่างจากการเขียนโค้ด Python สำหรับคอมพิวเตอร์ที่ใช้ Windows หรือ Linux อยู่บ้าง แต่ก็ไม่มากนัก มีเพียงบางส่วนเท่านั้น เช่น การตั้งค่าเพื่อเปิดการใช้งานของ Wi-Fi ของ ESP32 และข้อจำกัดของหน่วยความจำ (SRAM) สำหรับการทำงานของโค้ด
การเขียนโค้ดไมโครไพธอนสำหรับไมโครบิต
Device Simulator Express เกิดจากกิจกรรมของผู้เข้าร่วม Microsoft Garage Project ในช่วงปีค.ศ. 2019 และช่วยในการเขียนโค้ด CircuitPython สามารถจำลองการทำงานของโค้ดเสมือนจริงได้ แม้ว่าอาจมีข้อจำกัดอยู่บ้าง รองรับการใช้งานบอร์ด Adafruit Circuit Express และ Adafruit CLUE แต่ก็สามารถใช้กับ BBC Micro:bit ได้เช่นกัน สามารถอัปโหลดโค้ดไปยังบอร์ดทดลองได้ด้วย
จุดเด่นของ Device Simulator Express คือ ความสามารถในการรันโค้ดไมโครไพธอนโดยใช้ Built-in Simulator ได้ ดังนั้นจึงทดสอบโค้ดได้ โดยยังไม่จำเป็นต้องมีบอร์ดไมโครบิต
กล่าวสรุป
ในมุมมองของผู้เขียน การเรียนรู้และฝึกเขียนโค้ดด้วยภาษาไพธอน (Python) จะเป็นตัวช่วยให้ผู้เรียนได้ทำความเข้าใจและฝึกทักษะทั้งด้านซอฟต์แวร์และฮาร์ดแวร์ในรูปแบบต่าง ๆ อย่างเช่น ไมโครไพธอนสำหรับไมโครคอนโทรลเลอร์ ซึ่งเป็นอีกตัวเลือกหนึ่งที่น่าสนใจ อาจช่วยให้ง่ายขึ้นในการเริ่มต้นการเขียนโปรแกรมไมโครคอนโทรลเลอร์สำหรับผู้ที่สนใจ โดยใช้ภาษา Python แทนการใช้ภาษา C/C++ และช่วยให้การพัฒนาระบบสมองกลฝังตัว ทำได้เร็วและง่ายขึ้น
Last updated