Programming with MicroPython
แนะนำการใช้งาน MicroPython และ CircuitPython สำหรับบอร์ดไมโครคอนโทรลเลอร์ที่ใช้ตัวประมวลผลประเภทต่าง ๆ เช่น nRF518xx / nRF528xx, STM32, ESP32, ATSAMD21, RP2040 เป็นต้น
Last updated
แนะนำการใช้งาน MicroPython และ CircuitPython สำหรับบอร์ดไมโครคอนโทรลเลอร์ที่ใช้ตัวประมวลผลประเภทต่าง ๆ เช่น nRF518xx / nRF528xx, STM32, ESP32, ATSAMD21, RP2040 เป็นต้น
Last updated
จัดทำและเผยแพร่เป็นวิทยาทาน โดย เรวัต ศิริโภคาภิรมย์
โดยทั่วไปแล้วในการเขียนโปรแกรมสำหรับไมโครคอนโทรลเลอร์ เรามักจะใช้ภาษาคอมพิวเตอร์ อย่างเช่น C/C++ ซึ่งก็ถือว่าเป็นภาษาคอมพิวเตอร์ระดับสูง (High-Level Programming Language) แต่ถ้าจะใช้ภาษาอื่นในประเภท Scripting Languages ยกตัวอย่างเช่น Python 3 จะเป็นไปได้หรือไม่ ?
ไมโครไพธอนเป็นซอฟต์แวร์ประเภท Open Source ทำหน้าที่เป็นเฟิร์มแวร์ (Firmware) สำหรับบอร์ดไมโครคอนโทรลเลอร์ ช่วยให้เราสามารถเขียนและรันโค้ดไพธอนได้ และสำหรับผู้ที่มีพื้นฐานภาษาไพธอนมาบ้างแล้ว การเลือกใช้ไมโครไพธอนก็อาจช่วยให้การเรียนรู้เกี่ยวกับการเขียนโปรแกรมและใช้งานไมโครคอนโทรลเลอร์สำหรับผู้เริ่มต้นทำได้ง่ายขึ้น เมื่อเปรียบเทียบกับการใช้งานภาษา C/C++
ภาษาไมโครไพธอน สามารถนำไปใช้สอนในชั้นเรียนได้หลายช่วงอายุของผู้เรียน ตั้งแต่ในโรงเรียนจนถึงระดับมหาวิทยาลัย แต่ในประเด็นความยากง่ายของเนื้อหาและกิจกรรมการเรียนรู้ที่เกี่ยวข้องนั้น ก็จะต้องมีการเลือกหรือปรับให้เหมาะกับระดับชั้นของผู้เรียน
ประวัติความเป็นมาของไมโครไพธอน นั้นเริ่มต้นโดย Damien P. George [LinkedIn Profile] ซึ่งเป็นนักฟิสิกส์ชาวออสเตรเลีย มีความคิดริเริ่มที่จะเขียนโปรแกรมไมโครคอนโทรลเลอร์ โดยใช้ภาษา Python ขณะที่ทำงานเป็น Post-Doctoral Fellow และทำวิจัยด้านอนุภาคพลังงานสูงในมหาวิทยาลัย Cambridge ประเทศอังกฤษ (UK)
ในช่วงเวลาที่เรียนในระดับป.ตรี เขาได้มีโอกาสได้ร่วมทีม RobotCup แข่งขันหุ่นยนต์เตะฟุตบอล (Robot Soccer League) จึงมีประสบการณ์ด้านฮาร์ดแวร์ อิเล็กทรอนิกส์ และเขียนโปรแกรมด้านสมองกลฝังตัว
เขาได้เลือกใช้ Python 3 และพัฒนาโปรแกรมหรือเฟิร์มแวร์ เช่น Python Run-Time Interpreter สำหรับไมโครคอนโทรลเลอร์ 32 บิต และสร้างบอร์ด PyBoard และระดมทุนใน Kickstarter ในช่วงปี ค.ศ. 2013-2014 ได้ผู้เข้าร่วมและสนับสนุนราว 2,000 ราย (1,931 backers) และระดมทุนเงินสูงเกือบ £100,000 ซึ่งเป็นจุดเริ่มต้นของ MicroPython มีการเผยแพร่ซอฟต์แวร์ โดยใช้ลิขสิทธิ์ MIT License
ต่อมาในปีค.ศ. 2015 องค์กรที่มีชื่อว่า European Space Agency (ESA) ของสหภาพยุโรป ได้ให้การสนับสนุนโครงการ MicroPython อีกด้วย และในช่วงเวลาใกล้เคียงกัน British Broadcasting Corporation (BBC) ในประเทศอังกฤษ ได้พัฒนาบอร์ด Micro:bit (ไมโครบิต) และไมโครไพธอนได้ถูกนำมาปรับให้ใช้งานได้กับบอร์ดดังกล่าว
ความสำเร็จของไมโครไพธอน ได้ดึงดูดความสนใจของ Limor "Ladyada" ผู้ก่อตั้งบริษัท Adafruit Industries ในสหรัฐอเมริกา ทางบริษัทได้พัฒนาไลบรารีสำหรับอุปกรณ์ หรือโมดูลฮาร์ดแวร์เสริมหลายรูปแบบ (โดยส่วนใหญ่ก็เป็นฮาร์ดแวร์ต่าง ๆ ที่ทางบริษัทได้ผลิตและจำหน่าย) เพื่อรองรับการใช้งานไมโครไพธอน รวมถึงการพัฒนาบอร์ดไมโครคอนโทรลเลอร์ที่นำมาใช้ได้กับไมโครไพธอน เช่น บอร์ด Circuit Playground Express (SAMD21) และต่อได้มาพัฒนา CircuitPython ต่อยอดมาจากไมโครไพธอน
บอร์ดที่ใช้ชิปหรือโมดูล ESP8266 และ ESP32 ของบริษัท Espressif Systems ซึ่งมีความสามารถในการเชื่อมต่อ Wi-Fi มีราคาไม่แพง และนำไปใช้งานด้าน IoT ก็สามารถนำมาใช้งานร่วมกับไมโครไพธอนได้เช่นกัน ในปัจจุบันขณะที่เขียนบทความนี้ จะเห็นได้ว่า มีฮาร์ดแวร์หลายรูปแบบที่สามารถนำมาใช้ได้กับไมโครไพธอน
ข้อสังเกตเกี่ยวกับ MicroPython
ทำให้สามารถเขียนโค้ด Python 3 เพื่อเข้าถึงและใช้งานฮาร์ดแวร์ภายในไมโครคอนโทรลเลอร์ได้ง่าย เช่น GPIO, Timer, SPI, I2C, UART, ADC, DAC, Wi-Fi เป็นต้น
เนื่องจากมีข้อจำกัดเรื่องหน่วยความจำ จึงมีการสร้างไลบรารีใหม่จำนวนหนึ่ง (เรียกโดยรวมว่า MicroPython Libraries) ซึ่งโดยปรกติแล้ว จะมีให้ใช้ได้เหมือนกรณีของ Python 3 Standard Libraries แต่อาจมีฟังก์ชันไม่ครบ จึงมีการตั้งชื่อให้เริ่มต้นด้วยตัวอักษร 'u' เช่น utime, usys, uos, ustruct เป็นต้น เพื่อให้สังเกตเห็นความแตกต่าง แต่ทางผู้พัฒนาก็ได้พยายาม นำไลบรารีหรือโมดูลต่าง ๆ ของ CPython มาปรับให้สามารถใช้กับไมโครไพอนได้ สามารถดูรายการของไลบรารีที่ใช้ได้จาก Micropython-Lib
สามารถสื่อสารกับไมโครไพธอนได้แบบ interactive หรือที่เรียกว่า REPL (Read, Eval, Print, Loop) ผ่านพอร์ต USB-to-Serial หรือ USB-CDC
ในกรณีที่ใช้ชิป Wi-Fi SoC เช่น ESP8266 หรือ ESP32 ก็สามารถใช้ REPL (WebREPL) แบบไร้สายผ่าน Wi-Fi ได้
สำหรับผู้ที่สนใจจะลองใช้หรือเขียนโค้ดไมโครไพธอน ร่วมกับบอร์ดไมโครคอนโทรลเลอร์ ในปัจจุบัน มีไมโครคอนโทรลเลอร์ให้เลือกใช้ได้หลายตระกูล (32 บิต) อาจลองพิจารณาดูตัวเลือกเหล่านี้
บอร์ดไมโครคอนโทรลเลอร์ STM32 ซึ่งมีหลายรุ่น แต่แนะนำให้ใช้ STM32F4 (ARM Cortex-M4F), STM32L4, STM32F7 อาจเป็นบอร์ดที่ทางผู้พัฒนา MicroPython ผลิตขาย หรืออาจเป็นบอร์ดอื่น เช่น STM32 Nucleo เป็นต้น
บอร์ด PyBoard ใช้ชิป STM32F405 (ARM Cortex-M4F, 168 MHz, 1,024 KB Flash ROM, 192 KB SRAM) ซึ่งถือว่าเป็นชิปไมโครคอนโทรลเลอร์ 32 บิต ที่มีประสิทธิภาพสูง บอร์ดมีขนาดเล็ก แต่รูปแบบของบอร์ดไม่เหมาะกับการใช้งานบนเบรดบอร์ด
บอร์ด PyBoard D-Series เป็นรุ่นถัดจาก PyBoard และใช้ตัวประมวลผล STM32F7 ซึ่งมีความเร็วในการประมวลผลในระดับที่สูงกว่า STM32F4
บอร์ดไมโครคอนโทรลเลอร์ ESP8266 หรือ ESP32 ของบริษัท Espressif ซึ่งมีข้อดีคือ สามารถเชื่อมต่อผ่าน Wi-Fi ได้ ไปยังอินเทอร์เน็ต จึงเหมาะสำหรับการประยุกต์ใช้งานด้าน IoT ในปัจจุบันก็มีบอร์ดหลายรูปแบบให้เลือกใช้งานและราคาแตกต่างกันไป
Adafruit Feather HUZZAH ESP8266
Sparkfun ESP32 Thing
WeMos D1 mini, WeMos LOLIN D32
WROOM-32 DEVKIT V4
PyCom WiPy
บอร์ด BBC Micro:bit v1 ซึ่งใช้ตัวประมวลผล nRF51822 (ARM Cortex-M0, 16MHz, 256 KB Flash, 16KB SRAM) และสามารถสื่อสารไร้สายด้วย Bluetooth 4.0 ได้ และอาจจะเหมาะสำหรับผู้เรียนที่มีประสบการณ์หรือเริ่มต้นใช้งานบอร์ดนี้มาก่อน เช่น การเขียนโปรแกรมโดยการต่อบล็อกและใช้ Microsoft MakeCode for Micro:bit เป็นต้น
บอร์ด Adafruit’s Circuit Playground Express มีลักษณะเป็นทรงกลม มีขา I/O pins อยู่รอบ ใช้ตัวประมวลผล ATSAMD21G18 (ARM Cortex-M0, 48 MHz, 256KB Flash, 32 KB SRAM, 2MB external SPI Flash)
ข้อสังเกต: ในปัจจุบันก็มีบอร์ดหรือโมดูล ESP32 ให้เลือกใช้ได้หลายรูปแบบ แต่ก็สามารถจำแนกได้เป็นสองกลุ่ม (เรียกว่า non-psRAM กับ psRAM-enabled) ซึ่งขึ้นอยู่กับว่า มีการเพิ่มชิป psRAM (pseudo-static RAM) ภายนอกหรือไม่ มีความจุตั้งแต่ 4MB หรือ 8MB เป็นต้น บอร์ด ESP32 ที่มี psRAM ก็มักจะมีราคาสูงกว่าบอร์ดที่ไม่มี แต่ก็เหมาะสำหรับนำมาใช้กับไมโครไพธอน ทำให้มีหน่วยความจำเพิ่มขึ้น สำหรับสร้าง Stack/Heap ได้ขนาดใหญ่ขึ้น เช่น การเก็บข้อมูลในอาร์เรย์ได้มากขึ้น เป็นต้น
เมื่อเลือกบอร์ดไมโครคอนโทรลเลอร์แล้ว จะต้องเลือกไฟล์ .bin / .hex ที่เป็นเฟิร์มแวร์สำหรับไมโครไพธอน ให้ตรงกับบอร์ดที่เลือกใช้ (ให้ไปยังหน้าเว็บสำหรับดาวน์โหลดไฟล์ MicroPython Firmware เช่น สำหรับ ESP32, ESP8266, STM32) และจะต้องทำขั้นตอนติดตั้งลงในหน่วยความจำ Flash ของไมโครคอนโทรลเลอร์ (ซึ่งมีขั้นตอนและวิธีการที่แตกต่างกันไป ขึ้นอยู่กับฮาร์ดแวร์ที่นำมาใช้งาน) หรือ เราอาจจะดาวน์โหลด Source Code มาจาก Github แล้วทำขั้นตอน Build เองก็ได้เช่นกัน
ตัวอย่างซอฟต์แวร์ประเภท Open Source ที่เราสามารถนำมาใช้เขียนโค้ดไมโครไพธอน และเชื่อมต่อกับบอร์ดไมโครคอนโทรลเลอร์ที่ได้ติดตั้งเฟิร์มแวร์แล้ว ได้แก่
Thonny IDE (Windows, Mac OS X, Linux)
Mu Editor (Windows, Mac OS X, Linux)
uPyCraft IDE (Windows, Mac OS X, Linux)
ถ้าเปิดพอร์ต 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 ได้ด้วย
ถ้าจะใช้โปรแกรมแบบ Command Line ก็มีตัวเลือก เช่น micropy-cli ซึ่งได้ใช้ภาษา Python 3 ในการพัฒนา และสามารถใช้ร่วมกับ VS Code ได้ด้วย
ผู้เขียนได้เคยลองใช้งานไมโครไพธอนร่วมกับบอร์ดไมโครคอนโทรลเลอร์ 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) สำหรับการทำงานของโค้ด
ในกรณีที่ใช้บอร์ดไมโครบิต ซึ่งเป็นตัวอย่างหนึ่งของบอร์ดไมโครคอนโทรลเลอร์ที่ได้รับความนิยม และมีการนำมาใช้สอนโค้ดดิ้งสำหรับเด็กและเยาวชนในโรงเรียนต่าง ๆ ทั่วโลก เราก็มีตัวเลือกซอฟต์แวร์ เช่น Python Code Editor แบบออนไลน์ ไว้ให้ใช้งานได้ฟรี และทำงานบนหน้าเว็บเบราว์เซอร์ หรือจะใช้ EduBlocks Editor แบบออนไลน์ได้เช่นกัน
การใช้งานแบบออนไลน์มีข้อดีคือ ไม่ต้องติดตั้งซอฟต์แวร์ในเครื่องคอมพิวเตอร์ของผู้ใช้ และใช้เพียงโปรแกรมเว็บเบราว์เซอร์ เช่น Google Chrome ถ้าเชื่อมต่อคอมพิวเตอร์กับบอร์ดไมโครบิตผ่านทางพอร์ต USB (WebUSB) ก็สามารถรันโค้ดโดยใช้บอร์ดไมโครบิตเพื่อทดสอบการทำงานได้จริง
ผู้ที่สนใจสามารถศึกษาชุดคำสั่งหรือ API ได้จาก "Micro:bit MicroPython Documentation" แต่มีข้อสังเกตอยู่ว่า ไมโครไพธอนสำหรับแต่ละไมโครคอนโทรลเลอร์ที่เป็นเป้าหมาย (Target Device) อาจมีคำสั่งหรือ API ไม่เหมือนกันในรายละเอียด โดยเฉพาะอย่างยิ่งที่เกี่ยวข้องกับฮาร์ดแวร์ส่วนต่าง ๆ ทั้งภายในไมโครคอนโทรลเลอร์และภายนอก
ในกรณีที่ใช้ VS Code เป็น IDE และถ้าได้ติดตั้ง Extension อย่างเช่น Device Simulator Express (Source Code Repository) ก็สามารถจำลองการทำงานของโค้ดและตรวจสอบความถูกต้องในการทำงานสำหรับบอร์ดไมโครบิตได้
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++ และช่วยให้การพัฒนาระบบสมองกลฝังตัว ทำได้เร็วและง่ายขึ้น
เผยแพร่ภายใต้ลิขสิทธิ์ Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)