CircuitPython

แนะนำการใช้งาน CircuitPython ซึ่งมีพื้นฐานในการพัฒนาแยกออกมาจาก MicroPython โดยบริษัท Adafruit Industries (USA)

Adafruit CircuitPython

CircuitPython (https://circuitpython.org/) ได้พัฒนาแยกมาจาก MicroPython ซึ่งเป็น “Open Source Implementation of Python 3" สำหรับบอร์ดไมโครคอนโทรลเลอร์ โดยมีบริษัท Adafruit เป็นผู้พัฒนาซอฟต์แวร์ เริ่มจากเวอร์ชัน 1.0 ในอดีต มาถึงเวอร์ชัน 6.0 ในปัจจุบัน (ขณะที่เขียนบทความนี้) และการที่ทางบริษัทได้ลงทุนพัฒนาและใช้ภาษา CircuitPython นั้น ก็ต้องการทำให้การเขียนโค้ดสำหรับไมโครคอนโทรลเลอร์และระบบสมองกลฝังตัวง่ายขึ้นโดยใช้ภาษาไพธอน (เมื่อเปรียบเทียบกับการเขียนด้วยภาษา C/C++ เป็นต้น)

บริษัท Adafruit ได้พัฒนาบอร์ดไมโครคอนโทรลเลอร์หลายรูปแบบที่นำมาใช้ได้กับ CircuitPython (ดูรายการบอร์ดต่าง ๆ ที่สามารถนำมาใช้ได้จากเว็บนี้ https://circuitpython.org/downloads) โดยเน้นใช้งานกับไมโครคอนโทรลเลอร์ 32 บิต ตระกูล มีตัวอย่างดังนี้

  • ATMEL SAMD21 (Arm Cortex-M0+) / SAMD51 (Arm Cortex-M4F)

  • Nordic Semiconductor nRF52840 (Arm Cortex-M4F)

  • STMicroelectronics STM32F4 (Arm Cortex-M4F), STM32F7/H7 (Arm Cortex-M7)

  • NXP iMXRT1062 (Arm Cortex-M7)

  • Espressif ESP32-S2 (ESP32 Series 2)

‍‍

มีข้อสังเกตว่า บอร์ด ESP8266 ก็เคยใช้ได้กับ CircuitPython ในเวอร์ชันแรก แต่ถูกยกเลิกหรือตัดออกไปในช่วงเวลาต่อมา และทางบริษัทได้เจาะจงใช้ชิปไมโครคอนโทรลเลอร์ที่เชื่อมต่อหรือรองรับการใช้งาน USB ได้โดยตรง (ไม่ได้เชื่อมต่อผ่านวงจรภายนอกที่ทำหน้าที่เป็น USB-to-Serial)

นอกจากการเขียนโค้ดด้วย Python 3 ได้สำหรับไมโครคอนโทรลเลอร์แล้ว จุดเด่นของ CircuitPython ก็คงเป็นเรื่อง ความหลากหลายของไลบรารี ดูตัวอย่าง CircuitPython Library Bundle แยกตามเวอร์ชัน เช่น v5.x และ v6.x เป็นต้น ดาวน์โหลดไฟล์ .zip ได้จากเว็บ https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases/ และคำสั่งต่าง ๆ ที่ทางบริษัท Adafruit ได้พัฒนามาเพื่อสนับสนุนการใช้งาน CircuitPython

ในขณะที่เขียนบทความนี้ ได้ลองดาวน์โหลดไฟล์ CircuitPython Library Bundle (.zip) เช่น adafruit-circuitpython-bundle-6.x-mpy-20201231.zip

แล้วนำมาแตกไฟล์ จะพบว่า มีไฟล์ .mpy ซึ่งเป็นไลบรารีของ CircuitPython ให้ใช้หลายไฟล์ สามารถเลือกไฟล์ .mpy ที่ต้องการใช้ แล้วนำไปใส่ลงในไดเรกทอรี /lib ภายใน CircuitPython Drive

ไลบรารีเหล่านี้อาจไม่สามารถใช้ได้กับทุกบอร์ดไมโครคอนโทรลเลอร์ที่ใช้ได้กับ CircuitPython และเราสามารถดูได้ว่า มีไลบรารีหรือโมดูลใดบ้างที่ใช้ได้สำหรับบอร์ดแต่ละประเภท จากตารางในหน้าเว็บนี้ https://circuitpython.readthedocs.io/en/latest/shared-bindings/support_matrix.html

รายการ Core Modules ที่มาพร้อม CircuitPython Firmware แล้ว ไม่ต้องติดตั้งไฟล์ .mpy เพิ่มจาก CircuitPython Library Bundle สามารถดูได้จาก https://circuitpython.readthedocs.io/en/latest/shared-bindings/index.html

เอกสารออนไลน์ เช่น การใช้งานคำสั่งของไลบรารีสำหรับ CircuitPython สามารถศึกษาได้จาก https://circuitpython.readthedocs.io/en/latest/docs/

Device Simulator for CircuitPython

หนึ่งในโครงการของ Microsoft Garage Project และด้วยความร่วมมือกับบริษัท Adafuit ได้เปิดตัว Device Simulator Express (Code Repository) ในปีค.ศ. 2019 ซอฟต์แวร์ดังกล่าวเป็น Extension สำหรับ Microsoft Visual Studio (VS) Code

ผู้ใช้สามารถเขียนโค้ดภาษา MicroPython สำหรับบอร์ด Micro:bit และภาษา CircuitPython สำหรับบอร์ดของบริษัท Adafruit ได้ (เช่น บอร์ด Circuit Playground Express และ Adafruit CLUE) นอกจากนั้นยังสามารถจำลองการทำงานของโค้ดเสมือนจริงได้ (ยกเว้นอุปกรณ์บางอย่างที่มีอยู่บนบอร์ดจริง) ซึ่งถือว่ามีประโยชน์ในกรณีที่ยังไม่มีบอร์ดหรืออุปกรณ์จริงในการทดสอบการทำงานของโค้ด

ความแตกต่างระหว่าง CircuitPython และ MicroPython

แม้ว่า CircuitPython มีพื้นฐานในการพัฒนามาจาก MicroPython แต่ก็มีหลายประเด็นในการใช้งานที่แตกต่างกัน เช่น

  • ใช้ได้กับบอร์ดไมโครคอนโทรลเลอร์ที่มี Native USB เท่านั้น

  • ไม่รองรับการเขียนโค้ดแบบ Concurrency เช่น Multi-threading และไม่รองรับการใช้งานอินเทอร์รัพท์ (Interrupts)

  • ไม่รองรับ module aliasing เช่น uos กับ os หรือ utime กับ time

  • ไม่มีไลบรารีหรือโมดูล อย่างเช่น machine ซึ่งเกี่ยวข้องกับการใช้งานวงจรต่าง ๆ ภายในไมโครคอนโทรลเลอร์ และเป็นโมดูลที่สำคัญของ MicroPython แต่ CircuitPython ก็มีโมดูลอื่นให้ใช้แทน เช่น digitalio, analogio, pwmio busio เป็นต้น

  • ไม่มีไลบรารีสำหรับใช้งาน Hardware Timer

แม้ว่าจะใช้ภาษาไพธอนเหมือนกัน แต่ชุดคำสั่งต่าง ๆ ในส่วนของ API มีความแตกต่างกันค่อนข้างมาก

กล่าวสรุป

โดยความคิดเห็นของผู้เขียน จุดเด่นของ CircuitPython คือ มีไลบรารีให้ใช้งานสำหรับโมดูลฮาร์ดแวร์ต่าง ๆ เช่น โมดูลเซ็นเซอร์หลากหลายชนิด เป็นต้น ได้รับการพัฒนาและดูแลโดยบริษัท Adafruit มีการจัดทำเอกสารออนไลน์แนะนำการใช้งาน ซึ่งอาจเหมาะสำหรับผู้เริ่มต้น (Beginners)

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

เผยแพร่ภายใต้ลิขสิทธิ์ Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)

Last updated