Python for Hardware Programming: Guideline

<rawat.s>
8 min readJun 1, 2020

--

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

บทความนี้กล่าวถึง แนวทางการเรียนรู้ด้านฮาร์ดแวร์โดยใช้ภาษา Python และเป็นตัวเลือกสำหรับสื่อการเรียนรู้และฝึกปฏิบัติด้านระบบสมองกลฝังตัว ทั้งในและนอกห้องเรียน

Python Programming Language

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

Python (‘ไพธอน’) เป็นภาษาคอมพิวเตอร์ประเภท Scripting Programming Language เป็น Open Source และได้รับความนิยมอย่างมากในปัจจุบัน หลังจากได้เริ่มเผยแพร่มาตั้งแต่ราวปีค.ศ. 1991 และถูกพัฒนาขึ้นครั้งแรกโดย Guido Van Rossum ปัจจุบันมีองค์กรที่เรียกว่า Python Software Foundation เป็นผู้รับผิดชอบด้านการพัฒนาซอฟต์แวร์และเผยแพร่ใช้งาน

หลายคนก็คิดว่า ไพธอนเป็นภาษาที่ง่ายต่อการเรียนรู้สำหรับผู้เริ่มต้น และถูกจัดอยู่ในอันดับต้น ๆ จากการจัดอันดับโดยหลายองค์กร หรือเว็บไซต์ เช่น IEEE Spectrum, StackOverflow และ TIOBE เป็นต้น

ผลการสำรวจของ IEEE Spectrum 2018 Survey
ผลการสำรวจของ IEEE Spectrum 2019 Survey

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

ในอดีตที่ผ่านมา เราจะได้เห็นว่า มีการนำภาษาไพธอนไปใช้ในด้านปัญญาประดิษฐ์ (AI: Artificial Intelligence) การเรียนรู้ของคอมพิวเตอร์ (ML: Machine Learning) การประมวลผลภาพ (Image Processing) คอมพิวเตอร์วิทัศน์ (Computer Vision) การวิเคราะห์ข้อมูล (Data Analytics) การประมวลผลเชิงเลข (Numerical Computing / Digital Signal Processing) การเขียนโปรแกรมเพื่อจัดการระบบเครือข่าย (Network Programming) เป็นต้น ดังนั้นเราคงพอจะมองเห็นความสำคัญและความนิยมของภาษาไพธอนในปัจจุบัน

ถ้าจะยกตัวอย่างของตัวบ่งชี้ระดับความนิยมของภาษาไพธอน อาจดูได้จากจำนวนหนังสือที่ได้มีการตีพิมพ์ (ในต่างประเทศ) ถ้าเราลองสืบค้นจากเว็บไซต์ของ Amazon และจะเห็นได้ว่า ผลการค้นหา (Search Results) มีรายการหนังสือจำนวนหลายร้อย หรืออาจมากกว่าหนึ่งพันเล่ม ที่เกี่ยวข้องกับภาษาไพธอน ถ้าจำแนกตามสาขาหรือแขนงความรู้ที่มีการนำไปใช้งาน

Books: Python +Machine Learning
Books: Python + Data Analytics
Books: Python + Networking

Python Programming for SBCs

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

โค้ดที่ถูกเขียนด้วยภาษาไพธอน จะใช้สำหรับคอมพิวเตอร์ทั่วไป (General-Purpose Computers) หรืออาจทำงานในระบบคลาวด์ (Cloud) ซึ่งเป็นคอมพิวเตอร์ที่มีหน่วยความจำและความเร็วในการประมวลผลมากพอ

แต่ถ้าลองนึกถึงคอมพิวเตอร์อีกประเภทหนึ่งที่เป็นคอมพิวเตอร์บอร์ดเดี่ยว (Single-Board Computers: SBCs) และเป็นตัวอย่างของระบบสมองกลฝังตัว (Embedded Systems) เช่น บอร์ด Raspberry Pi, Beagle Bone, Arduino Yun, Orange Pi, FriendlyARM, ODROID, ASUS Tinker Board, LattePanda และอีกจำนวนมาก

บอร์ดเหล่านี้ มีขนาดเล็ก ใช้พลังงานต่ำ อาจมีหน่วยความจำในระดับหลายร้อยเมกกะไบต์หรือมากกว่านั้น ความเร็วในการประมวลผลด้วยความถี่ของ Clock ในระดับหลายร้อยเมกกะเฮิรตซ์หรือสูงกว่า อาจมีตัวประมวลผลมากกว่าหนึ่งชุด (Multi-Core CPU) ที่ทำงานได้ตามสถาปัตยกรรม ARM 32 บิต หรือ 64 บิต สามารถทำงานด้วยระบบปฏิบัติการ Embedded Linux และรันโค้ดในภาษาไพธอนได้ ในหลาย ๆ กรณี ก็สามารถนำมาใช้งานเป็นคอมพิวเตอร์ในลักษณะ Desktop หรือเป็นเครื่องแม่ข่าย (Server) ขนาดเล็กได้

บอร์ดในกลุ่ม SBCs ตามที่ได้ยกตัวอย่างไปนั้น ส่วนใหญ่จะมีขา I/O ในลักษณะ Pin Headers (2.54 mm spacing) สำหรับนำไปเชื่อมต่อกับอุปกรณ์อิเล็กทรอนิกส์ภายนอก เช่น โมดูลเซนเซอร์ หรือวงจรอิเล็กทรอนิกส์บนเบรดบอร์ด หรือวงจรอื่น ๆ โดยใช้รูปแบบการสื่อสาร เช่น GPIO, UART, SPI, I2C เป็นต้น

ดังนั้นถ้าเขียนโปรแกรมด้วยภาษา Python (หรือภาษาอื่น เช่น C/C++, Lua, Nodejs) ก็ทำให้โค้ดของเรา สามารถเชื่อมต่อและสื่อสารกับอุปกรณ์ภายนอกที่นำมาต่อเพิ่มได้ เป็นต้น

ยกตัวอย่างเช่น เราสามารถอ่านข้อมูลจากโมดูลเซนเซอร์ประเภทต่าง ๆ ที่เชื่อมต่ออยู่กับบอร์ด ประมวลผลข้อมูลเหล่านั้นในเบื้องต้น แล้วส่งข้อมูลผ่านระบบเครือข่าย โดยใช้โพรโทคอล (Protocols) ในรูปแบบต่าง ๆ ไปยังบริการในระบบคลาวด์ เป็นต้น

ในกรณีของบอร์ด Raspberry Pi ก็มีไลบรารี เช่น WiringPi, RPi.GPIO และ gpiozero สำหรับเขียนโปรแกรมใช้งานขา GPIO

Raspberry Pi GPIO: https://www.raspberrypi.org/documentation/usage/gpio/

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

บอร์ด SBC บางประเภท มีการเพิ่มไมโครคอนโทรลเลอร์ (Microcontroller) ไว้บนบอร์ด อาจเป็นไมโครคอนโทรลเลอร์ขนาด 8 บิต หรือ 32 บิต สามารถสื่อสารกับตัวประมวลผลหลักที่ทำงานด้วยระบบปฏิบัติการ เช่น Linux โดยใช้ช่องทาง Serial หรือ SPI /I2C เป็นต้น การใช้ไมโครคอนโทรลเลอร์เป็นตัวช่วยในลักษณะนี้ จึงเหมาะกับการเชื่อมต่อกับอุปกรณ์อื่นภายนอก สามารถจัดการและตอบสนองต่อสัญญาณและเหตุการณ์จากภายนอกได้ดีขึ้น

บอร์ด SBCs เช่น Raspberry Pi อาจใช้งานร่วมกับบอร์ด หรือโมดูลอิเล็กทรอนิกส์ ในรูปแบบที่เรียกว่า Shields หรือ HATs เช่น บอร์ด Raspberry Pi SENSE HAT ที่มาพร้อม sense-hat ซึ่งเป็นไลบรารีสำหรับไพธอนสำหรับการเขียนโค้ด เป็นต้น

บอร์ด SBC บางประเภท นอกจากตัวประมวลผลหลักที่มีซีพียูตระกูล ARM แล้วยังมีวงจรประเภท FPGA รวมไว้ในชิปเดียวกัน เช่น บอร์ด PYNQ-Z1 ของบริษัท Digilent ที่ใช้ชิป Xilinx Zynq-7020 ARM A9/FPGA SoC เป็นตัวประมวลหลัก ผู้พัฒนาได้จัดทำไลบรารี PYNQ API (“PYthon on zyNQ”) สำหรับเขียนโค้ดด้วยภาษา Python แทนที่จะใช้ภาษา C/C++ ในการเรียกใช้งาน Device Drivers ต่าง ๆ ของระบบ เช่น การโปรแกรมวงจร FPGA ด้วยไฟล์บิตสเตรีม (Bitstream Programming) และการเขียนอ่านข้อมูล (Data I/O Transfer) สำหรับวงจรต่าง ๆ ภายใน FPGA ทำให้การเขียนโค้ดมีความสะดวกมากขึ้น

นอกจากนั้นเราสามารถใช้บอร์ดในลักษณะนี้ เรียนรู้การออกแบบวงจรดิจิทัลได้อีกด้วย (Digital Logic Design, System-on-Chip Design) แต่ราคาของบอร์ด ก็จะสูงกว่าบอร์ด SBC โดยทั่วไป

Migen เป็นตัวอย่างของการนำภาษา Python แทน HDL อย่างเช่น Verilog หรือ VHDL ในการออกแบบวงจรดิจิทัลได้ เช่น สำหรับ FPGA ดังนั้นเราสามารถเขียนอธิบายการทำงานของวงจรดิจิทัลด้วยโค้ดภาษา Python

แม้ว่าบอร์ด SBCs จะมีราคาสูงกว่าบอร์ดไมโครคอนโทรลเลอร์ทั่วไป แต่เป็นตัวเลือกที่น่าสนใจในการนำมาใช้ในการเรียนรู้และฝึกปฏิบัติทางด้านระบบสมองกลฝังตัวและการประยุกต์ใช้ด้าน IoT (Internet of Things) เพราะสามารถเชื่อมต่อเข้าสู่ระบบเครือข่ายได้หลายวิธี

ในการเลือกใช้บอร์ด SBCs สำหรับเรียนรู้และฝึกทักษะด้านระบบสมองกลฝังตัว ก็มีข้อควรระวัง เช่น ถ้าเชื่อมต่อวงจรภายนอกกับบอร์ด SBCs ไม่ถูกต้อง อาจทำให้บอร์ดชำรุดเสียหายได้ และก็ซ่อมได้ยาก ยกตัวอย่างเช่น การใช้แรงดันไฟฟ้าเกินกว่าที่ขา I/O ของบอร์ด SBCs จะรับได้ โดยทั่วไปก็จะอยู่ที่ระดับ 3.3V และก็ควรหลีกเลี่ยงการใช้กระแสไฟฟ้าในปริมาณที่มากเกินไป ไม่ว่าจะเป็นการจ่ายหรือรับที่ขา I/O (Current Source & Current Sink) เป็นต้น ดังนั้นการใช้บอร์ด SBCs จึงเหมาะสำหรับผู้ที่ทักษะทางด้านวงจรดิจิทัลและอิเล็กทรอนิกส์มาบ้างแล้ว

Python Programming for Microcontrollers

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

ถ้าจะเปลี่ยนจากคอมพิวเตอร์ทั่วไป หรือคอมพิวเตอร์ประเภท SBC มาเป็นบอร์ดไมโครคอนโทรลเลอร์ จะทำได้หรือไม่ มีข้อดีและข้อเสียอย่างไรบ้าง ?

ในเชิงเปรียบเทียบ บอร์ดไมโครคอนโทรลเลอร์ มีข้อจำกัดหลายประเด็น เช่น ความเร็วในการประมวลผล ความจุหน่วยความจำ (Flash และ SRAM) และ ความสามารถในการแสดงผลและรูปแบบการเชื่อมต่อกับผู้ใช้ แต่ก็มีข้อดีเช่นกัน เช่น บอร์ดมีราคาที่ถูกกว่าบอร์ด SBC ใช้พลังงานต่ำ และมีขนาดเล็ก ดังนั้นจึงเหมาะสำหรับผู้เริ่มต้น

เมื่อเปรียบเทียบกับ Arduino ซึ่งในปัจจุบันได้กลายเป็นตัวเลือกแรก หรืออันดับต้น ๆ สำหรับมาใช้ในการเรียนการสอนและฝึกปฏิบัติด้านระบบสมองกลฝังตัว เช่น การเลือกใช้บอร์ด Arduino Uno หรือ Nano หรือ Mega2560 ที่ใช้ไมโครคอนโทรลเลอร์ 8 บิต ผู้เรียนจะต้องใช้ภาษา C/C++ ในการเขียนโค้ด Arduino Sketch ดังนั้นจึงต้องมีพื้นฐานภาษาดังกล่าวมาก่อน หรือศึกษาไปพร้อม ๆ กัน

ถ้าไม่ใช้บอร์ด Arduino แบบ 8 บิต ก็ยังมีตัวเลือกอื่นอีก เช่น บอร์ด Arduino ที่ใช้ตัวประมวลผล 32 บิต เช่น SAMD21 หรือจะใช้บอร์ดอื่น เช่น ESP8266 และ ESP32 ที่สามารถเขียนโปรแกรมด้วย Arduino C/C++ มีความเร็วในการประมวลผลที่สูงกว่า มีหน่วยความจำมากกว่า และสามารถเชื่อมต่อแบบ Wi-Fi ได้อีกด้วย

ข้อดีของการใช้ Arduino-Compatible Platform (ซอฟต์แวร์และฮาร์ดแวร์ที่เกี่ยวข้อง) คือ ฮาร์ดแวร์หรืออุปกรณ์ มีราคาไม่แพง หาซื้อได้ทั่วไป มีไลบรารีและโค้ดตัวอย่าง และแหล่งเรียนรู้ออนไลน์จำนวนมาก

การใช้ภาษา Python อาจช่วยให้ผู้เรียน สามารถเขียนโค้ดสำหรับไมโครคอนโทรลเลอร์ หรือระบบสมองกลฝังตัว (Microcontroller-based Embedded Systems Programming) ได้ง่ายและสะดวกขึ้น เมื่อเปรียบเทียบกับการใช้ภาษา C/C++

ถ้าจะนำ Python มาใช้กับบอร์ดไมโครคอนโทรลเลอร์ในปัจจุบัน ก็สามารถทำได้ แม้ว่าจะมีข้อจำกัดอยู่บ้าง เช่น ขนาดของหน่วยความจำ (Memory Size Constraints) และความเร็วในการประมวลผล (Low Processing Speed) เป็นต้น แต่ก็มีข้อดีเช่นกัน คือ อุปกรณ์มีขนาดเล็ก ใช้พลังงานต่ำ และราคาถูกลง เป็นต้น

MicroPython / CircuitPython

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

ถ้าพูดถึงไพธอนสำหรับไมโครคอนโทรลเลอร์ คงจะต้องกล่าวถึง MicroPython (ไมโครไพธอน) ซึ่งเป็นเฟิร์มแวร์ประเภท Open Source (MIT license) สำหรับไมโครคอนโทรลเลอร์ขนาด 32 บิต (และ 64 บิต) ที่รองรับการรันโค้ด Python 3

เริ่มต้นได้มีการพัฒนาโดย Damien George ซึ่งเป็นนักฟิสิกส์ และทำวิจัยทางด้านฟิสิกส์อนุภาคพลังงานสูง อยู่ในเมืองเคมบริดจ์ ประเภทอังกฤษ (Cambridge, UK) และเขายังเป็นผู้ที่มีความสนใจและประสบการณ์ทางด้านการพัฒนาหุ่นยนต์ (Robotics) อีกด้วย

โค้ดภาษา C บรรทัดแรกของ MicroPython ถูกเริ่มต้นเขียนในวันที่ 29 เมษายน ค.ศ. 2013 และต่อมาในช่วงปลายปีเดียวกัน เขาได้เริ่มโครงการระดมทุน Kickstarter พัฒนาบอร์ดไมโครคอนโทรลเลอร์ชื่อ Pyboard ที่ใช้ชิป STM32F405RG (168 MHz, 1 MB Flash, 192 KB SRAM) และได้พัฒนาเฟิร์มแวร์สำหรับบอร์ดดังกล่าวให้เขียนโค้ด Python 3 ได้ (Initial Release ในเดือนพฤษภาคม ค.ศ. 2014)

ตัวอย่างบอร์ดไมโครโทรลเลอร์ที่นำมาใช้กับ MicroPython ได้แก่

PyBv1.1 (STM32F405RG): https://store.micropython.org/product/PYBv1.1
PYBD SF2W (STM32F722): https://pybd.io/hw/pybd_sfxw.html

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

ในปีค.ศ. 2016 Damien George ได้เผยแพร่ MicroPython ในเวอร์ชันที่สามารถใช้งานร่วมกับบอร์ด Micro:bit ที่เกิดขึ้นโดย BBC (British Broadcasting Corp.) ซึ่งเป็นสถานีโทรทัศน์สื่อสาธารณะของสหราชอาณาจักร (UK) และเริ่มแจกจ่ายไปตามโรงเรียนตั้งแต่เดือนตุลาคม ค.ศ. 2015

นอกจากนั้นได้มีการพัฒนา Web App เป็น Online MicroPython Editor สำหรับ Micro:bit ให้ผู้ใช้สามารถเขียนโค้ด MicroPython โดยใช้เว็บเบราว์เซอร์ได้ด้วย ดังนั้นภาษา MicroPython ก็เป็นอีกหนึ่งตัวเลือกที่น่าสนใจสำหรับบอร์ด Micro:bit นอกจากภาษา C/C++, Arduino Sketch, Static TypeScript (STS) เป็นต้น

ตัวอย่างบอร์ด Micro:Bit และอุปกรณ์เสริม เช่น Edge Connectors
MicroPython vs. CircuitPython

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

ในเดือนกรกฎาคม ปีค.ศ. 2017 บริษัท Adafruit (USA) ได้พัฒนา CircuitPython แยกจาก MicroPython v1.9.4 และมีการพัฒนาไลบรารีสำหรับ CircuitPython อีกจำนวนมาก บอร์ดไมโครคอนโทรลเลอร์ที่ใช้งานร่วมกับ CircuitPython ได้แก่ Atmel/Microchip SAM D21 (ARM Cortex-M0+) / SAM D51 (ARM Cortex-M4F) และ Nordic nRF52840 (ARM Cortex-M4F) เป็นต้น

ตัวอย่างบอร์ดที่ใช้งานได้กับ CircuitPython: https://circuitpython.org/downloads

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

บริษัท PyCOM Ltd. (UK) ซึ่งเป็นผู้พัฒนาบอร์ด ESP32-based IoT Development Platform อย่างเช่น WiPy 3.0 และ LoPy4 (รองรับการสื่อสารไร้สายด้วย WiFi หรือ LoRa) ได้มีส่วนสนับสนุนให้มีการพัฒนาซอฟต์แวร์สำหรับ MicroPython ในเชิงพาณิชย ์มาใช้กับไมโครคอนโทรลเลอร์ ESP32

อ่านเนื้อหาใน Gitbook “Think-Embedded” เพิ่มเกี่ยวกับ MicroPython และตัวอย่างการเขียนโค้ดสำหรับบอร์ดไมโครคอนโทรลเลอร์ เช่น BBC Micro:bit, STM32, ESP32เป็นต้น

บริษัท M5Stack (Shenzhen, China) ได้พัฒนาอุปกรณ์ เช่น ESP32 Basic Core IoT Development Kit และ M5Stack FIRE IoT Starter Kit หรืออุปกรณ์อื่นในกลุ่ม M5 Series ของบริษัท

M5Stack Core (ESP32-based)
Self-Balancing Robot & Lidar Bot with Mecanum Wheels (Source: M5Stack)

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

บริษัท Digi International ผู้พัฒนาโมดูล XBee ที่หลายคนอาจรู้จักหรือเคยใช้ในช่วง 10 ปีที่ผ่านมา ใช้สำหรับสร้างระบบสื่อสารไร้สายตามมาตรฐาน IEEE 802.15.4/ ZigBee หลังจากที่ XBee 3 RF Modules ออกมาสู่ตลาด ในปีค.ศ. 2018 ก็ทำให้เราสามารถเขียนโค้ดโดยใช้ภาษา MicroPython (XBee 3 Port) ร่วมกับซอฟต์แวร์ XCTU ของบริษัทได้เช่นกัน (ศึกษาเพิ่มเติมได้จากไฟล์เอกสาร “Digi MicroPython Programming Guide”)

ตัวอย่างรูปแบบการใช้งานของโมดูล Digi XBee 3
XCTU MicroPython Console (Source: www.digi.com)

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

กล่องสมองกลของ LEGO EV3 ที่เป็นอุปกรณ์สำคัญในการสร้างหุ่นยนต์ของ LEGO ก็เป็นอีกหนึ่งตัวอย่างของบอร์ดควบคุมที่สามารถเขียนโปรแกรมโดยใช้ MicroPython เช่นกัน สามารถใช้ VS Code เป็น IDE ในการเขียนโค้ด ผู้ที่สนใจสามารถศึกษาเพิ่มเติมได้จากไฟล์เอกสาร “EV3 MicroPython Getting Started Guide”

ตัวอย่างกล่อง EV3 เชื่อมต่อกับมอเตอร์ไฟฟ้า
VS Code IDE สำหรับเขียนโค้ด MicroPython เพื่อนำไปใช้กับ EV3

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

โมดูลกล้องของบริษัท OpenMV LLC เช่น รุ่น Cam H7 ที่ใช้ไมโครคอนโทรลเลอร์ STM32H7 (ARM Cortex-H7, 400 MHz) และมีโมดูล OV7725 Image Sensor สำหรับงานด้าน Embedded Machine Vision ก็ใช้ MicroPython ที่มาพร้อม API ในการเขียนโปรแกรมร่วมกับ OpenMV IDE

OpenMV H7 Board: Pinout
OpenMV IDE: https://openmv.io/pages/download

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

อีกตัวอย่างหนึ่งของบอร์ดสำหรับงานด้าน AI+IoT และ Edge Computing ที่น่าสนใจ เป็นของบริษัท Sipeed จากประเทศจีน ซึ่งได้เลือกใช้ชิป Kendryte K210 (64-bit Dual-Core RISC-V) เป็นตัวประมวลผลหลักของบอร์ด เช่น Sipeed Maix BiT, Sipeed Maixduino และ Sipeed M1 Dock Suit

ทางบริษัทได้เลือกใช้ภาษา MicroPython (ตั้งชื่อว่า MaixPy) ในการเขียนโปรแกรมเป็นหลัก และใช้งานร่วมกับ MaixPy IDE (นอกเหนือจาก C/C++ และ Arduino port)

Sipeed MAIX module (Source: SeeedStudio)

IDEs for MicroPython / CircuitPython

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

ในปัจจุบัน มีซอฟต์แวร์ประเภท IDE (Integrated Development Environment) ที่รองรับการเขียนโค้ดภาษา MicroPython หรือ CircuitPython ให้เลือกใช้งานได้ เช่น

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

ซอฟต์แวร์ uPyCraft, Mu Editor และ Thonny IDE จัดอยู่ในกลุ่มเดียวกัน เป็น Python IDE แบบ Offline ผู้ใช้สามารถเขียนโค้ด เช่น MicroPython แล้วสามารถอัปโหลดโค้ดไพธอน ไปยังบอร์ดไมโครคอนโทรลเลอร์ ที่เชื่อมต่อกับคอมพิวเตอร์ของผู้ใช้ผ่านทาง USB-to-Serial แล้วบันทึกลงในระบบไฟล์ Flash ของบอร์ด

EduBlocks เป็น Online Python Editor สำหรับฝึกเขียนโค้ดด้วยการต่อบล็อก (Block-based Programming) แล้วแปลงให้เป็นโค้ดไพธอนได้โดยอัตโนมัติ ผู้ใช้สามารถเลือกโหมดการใช้งาน ได้แก่

  • เขียนโค้ด Python 3 สำหรับคอมพิวเตอร์ทั่วไป
  • เขียนโค้ด Python 3 สำหรับบอร์ด Raspberry Pi SBC
  • เขียนโค้ด MicroPython สำหรับบอร์ด BBC Micro:bit
  • เขียนโค้ด CircuitPython สำหรับบอร์ด Circuit Playground Express

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

EduBlocks Online Python Editor: https://app.edublocks.org/
เปรียบเทียบโค้ดบล็อกของ EduBlocks และโค้ดในภาษา Python ที่ได้

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

ในกรณีที่ใช้บอร์ด Micro:bit ก็มี Online MicroPython Editor เป็น IDE ในการเขียนโค้ดโดยใช้เว็บเบราว์เซอร์ แล้วแปลงให้เป็นไฟล์ .hex เพื่อนำไปโปรแกรมลงบอร์ด ผ่านทาง Web USB ได้

โค้ดตัวอย่างสำหรับ MicroPython-Micro:bit
การเชื่อมต่อกับบอร์ด Micro:bit ผ่านทาง Web USB ในเว็บเบราว์เซอร์ Chrome
อัปโหลดโปรแกรมไปยังบอร์ด Micro:bit (Flashing)

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

Microsoft MakeCode Editor สำหรับบอร์ด Micro:bit ในเวอรชัน Beta (2020) นอกเหนือจากการเขียนโค้ดด้วยวิธีการต่อบล็อกแล้วแปลงให้เป็นโค้ด Static TypeScript แล้วก็สามารถเลือกโหมด Python ได้เช่นกัน (ใช้ชุดคำสั่ง API แตกต่างจาก MicroPython for Micro:bit)

การเขียนโค้ดด้วยวิธีการต่อบล็อกโดยใช้ MakeCode for Micro:bit
โค้ด MicroPython ที่ได้จากการแปลงบล็อกโค้ดใน MakeCode Editor

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

เริ่มต้นในปีค.ศ. 2019 หนึ่งในโครงการของ Microsoft Garage Project ที่ร่วมมือกับบริษัท Adafuit ได้เปิดตัว Device Simulator Express (Code Repository) ซึ่งเป็น Extension สำหรับ Microsoft Visual Studio (VS) Code ผู้ใช้สามารถเขียนโค้ดภาษา MicroPython สำหรับบอร์ด Micro:bit และภาษา CircuitPython สำหรับบอร์ดของบริษัท Adafruit ได้ (เช่น บอร์ด Circuit Playground Express และ Adafruit CLUE) นอกจากนั้นยังสามารถจำลองการทำงานของโค้ดเสมือนจริงได้ (ยกเว้นอุปกรณ์บางอย่างที่มีอยู่บนบอร์ดจริง) ซึ่งถือว่ามีประโยชน์ในกรณีที่ยังไม่มีบอร์ดหรืออุปกรณ์จริงในการทดสอบการทำงานของโค้ด

VS Code + Device Simulator Express: Adafruit CLUE
VS Code + Device Simulator Express: Adafruit Circuit Playground Express
VS Code + Device Simulator Express: BBC Micro:bit

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

ผู้ใช้อุปกรณ์ M5Stack สามารถเลือกใช้ภาษา MicroPython ในการเขียนโปรแกรมได้ (นอกเหนือกจาก C/C++ หรือ Arduino) และทางบริษัทได้พัฒนา Online UiFlow Editor สำหรับการเขียนโค้ดด้วยวิธีการต่อบล็อก (Google Blockly) แล้วแปลงเป็นโค้ด MicroPython ได้โดยอัตโนมัติ (แต่ใช้ได้เฉพาะสำหรับบอร์ด M5Stack เท่านั้น)

M5Stack UIFlow Editor: Blockly Mode
M5Stack UIFlow Editor: Python Mode

Python-based Hardware-Oriented Programming

‍‍‍‍‍‍ ‍‍ ‍‍‍‍‍‍ ‍‍‍‍‍‍ ‍‍

ถ้าเราใช้ภาษาไพธอนแทน C/C++ ในการเขียนโปรแกรมระดับฮาร์ดแวร์ เราควรจะทำสิ่งต่อไปนี้ได้ เช่น

  • การเขียนหรืออ่านสถานะลอจิกที่ขา Digital I/O
  • การเปิดใช้งานอินเทอร์รัพท์ (Interrupt Handling) และการตอบสนองเมื่อเกิดเหตุการณ์จากภายนอก
  • การเปิดใช้งานไทม์เมอร์ (Timer) ในโหมดต่าง ๆ
  • การสร้างสัญญาณแบบ PWM (Pulse Width Modulation)
  • การอ่านค่าจากสัญญาณอินพุตแบบแอนะล็อกโดยใช้วงจร ADC (Analog-to-Digital Converter) ที่อยู่ภายใน หรือใช้วงจรไอซีภายนอก
  • การเขียนค่าเพื่อสร้างสัญญาณเอาต์พุตแบบแอนะล็อก โดยใช้วงจร DAC (Digital-to-Analog Converter) ที่อยู่ภายใน หรือใช้วงจรไอซีภายนอก
  • การเข้าสู่โหมดประหยัดพลังงาน (Sleep mode) และถูกปลุกให้ตื่น (Wakeup) มาทำงานต่อด้วยเหตุการณ์ตามที่กำหนดไว้
  • การใช้งานวงจร RTC (Real-Time Clock) ที่อยู่ภายใน หรือวงจรภายนอก
  • การเชื่อมต่อกับระบบเครือข่าย เช่น ผ่าน Ethernet และ CAN bus หรือแบบไร้สายด้วย Wi-Fi หรือ BLE เป็นต้น
  • การเชื่อมต่อกับอุปกรณ์อื่น โดยใช้บัส I2C หรือ SPI เป็นต้น
  • การรับส่งข้อมูลแบบบิตอนุกรมโดยใช้ UART รวมถึง RS485 / Modbus เป็นต้น
  • การเขียนโปรแกรมแบบหลายงานให้ทำงานได้พร้อม ๆ กัน (Multi-Tasking / Task Concurrency)

MicroPython และ CircuitPython มีตัวอย่างโค้ดสาธิตตามรูปแบบที่ได้กล่าวไป (และมีความแตกต่างกันในบางกรณี ทั้งนี้ก็ขึ้นอยู่กับไมโครคอนโทรลเลอร์ที่ได้เลือกใช้งาน) แม้ว่าการทำงานและการตอบสนองจะช้ากว่ากรณีที่ใช้ภาษา C/C++ ในการเขียนโปรแกรมสำหรับไมโครคอนโทรลเลอร์

โดยสรุป เราได้ทำความรู้จักกับตัวเลือกที่เป็นซอฟต์แวร์และฮาร์ดแวร์ที่เกี่ยวข้องกับภาษา Python และเราสามารถนำมาใช้ได้ในการเรียนรู้การเขียนโปรแกรมระบบสมองกลฝังตัว เช่น ไมโครคอนโทรลเลอร์ และอาจจะเหมาะสำหรับผู้เริ่มต้น … ในเชิงเปรียบเทียบ ผู้เขียนมีความคิดเห็นว่า การใช้ภาษาอย่างเช่น Python จะช่วยให้ผู้เรียนหรือผู้ที่เริ่มต้น หรือผู้ที่สนใจงานด้าน Maker หรือ DIY ทางด้านอิเล็กทรอนิกส์และการเขียนโปรแกรมควบคุมฮาร์ดแวร์ ได้ทำความเข้าใจหลักการทำงานของฮาร์ดแวร์ได้ง่ายขึ้นกว่าการใช้ภาษา เช่น Assembly หรือ C/C++ แม้ว่าภาษาเหล่านี้ยังคงเป็นพื้นฐานสำคัญในการพัฒนาระบบสมองกลฝังตัว

Creative Commons, Attribution-Non Commercial-Share Alike 4.0 International (CC BY-NC-SA 4.0)

--

--