> For the complete documentation index, see [llms.txt](https://think-embedded.gitbook.io/micropython/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://think-embedded.gitbook.io/micropython/circuitpython.md).

# CircuitPython

## **Adafruit CircuitPython** <a href="#d8d7" id="d8d7"></a>

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

![Source: https://circuitpython.readthedocs.io/en/latest/README.html](/files/-MRKuNczTKanrE5Xjido)

บริษัท **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**](https://github.com/adafruit/Adafruit_CircuitPython_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`**](https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases/download/20201231/adafruit-circuitpython-bundle-6.x-mpy-20201231.zip)&#x20;

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

![รูปภาพ: ตัวอย่างรายชื่อไฟล์ .mpy สำหรับไลบรารีของ CircuitPython](/files/-MPs05-BL5on-5MvToZ6)

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

![](/files/-MPrmU6nGhcWA4-VChxW)

รายการ **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/](<https://circuitpython.readthedocs.io/en/latest/docs/&#xA;>)

## Device Simulator for CircuitPython

หนึ่งในโครงการของ [**Microsoft Garage Project**](https://www.microsoft.com/en-us/garage/) และด้วยความร่วมมือกับบริษัท **Adafuit** ได้เปิดตัว [**Device Simulator Express**](https://www.microsoft.com/en-us/garage/profiles/device-simulator-express/) ([**Code Repository**](https://github.com/microsoft/vscode-python-devicesimulator)) ในปีค.ศ. **2019** ซอฟต์แวร์ดังกล่าวเป็น **Extension** สำหรับ [**Microsoft Visual Studio (VS) Code**](https://code.visualstudio.com/download)&#x20;

ผู้ใช้สามารถเขียนโค้ดภาษา **MicroPython** สำหรับบอร์ด **Micro:bit** และภาษา **CircuitPython** สำหรับบอร์ดของบริษัท **Adafruit** ได้ (เช่น บอร์ด [**Circuit Playground Express**](https://marketplace.visualstudio.com/items?itemName=ms-python.devicesimulatorexpress#adafruit-circuit-playground-express-cpx-simulator) และ [**Adafruit CLUE**](https://marketplace.visualstudio.com/items?itemName=ms-python.devicesimulatorexpress#adafruit-clue-simulator)) นอกจากนั้นยังสามารถจำลองการทำงานของโค้ดเสมือนจริงได้ (ยกเว้นอุปกรณ์บางอย่างที่มีอยู่บนบอร์ดจริง) ซึ่งถือว่ามีประโยชน์ในกรณีที่ยังไม่มีบอร์ดหรืออุปกรณ์จริงในการทดสอบการทำงานของโค้ด

![รูปภาพ: Device Simulator Express สำหรับบอร์ด Circuit Playboard Express  ](/files/-MRKsytDShvRzfbjmaIq)

![ปภาพ: Device Simulator Express สำหรับบอร์ด Adafruit CLUE](/files/-MRKtFv3l_jLA65VJ0c0)

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

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

* ใช้ได้กับบอร์ดไมโครคอนโทรลเลอร์ที่มี **Native USB** เท่านั้น
* ไม่รองรับการเขียนโค้ดแบบ **Concurrency** เช่น **Multi-threading** และไม่รองรับการใช้งานอินเทอร์รัพท์ (**Interrupts**)&#x20;
* ไม่รองรับ **module aliasing** เช่น `uos` กับ `os` หรือ `utime` กับ `time`
* ไม่มีไลบรารีหรือโมดูล อย่างเช่น `machine` ซึ่งเกี่ยวข้องกับการใช้งานวงจรต่าง ๆ ภายในไมโครคอนโทรลเลอร์ และเป็นโมดูลที่สำคัญของ **MicroPython** แต่ **CircuitPython** ก็มีโมดูลอื่นให้ใช้แทน เช่น [`digitalio`](https://circuitpython.readthedocs.io/en/latest/shared-bindings/digitalio/), [`analogio`](https://circuitpython.readthedocs.io/en/latest/shared-bindings/analogio/), [`pwmio`](https://circuitpython.readthedocs.io/en/latest/shared-bindings/pwmio/index.html) [`busio`](https://circuitpython.readthedocs.io/en/latest/shared-bindings/busio/index.html) เป็นต้น
* ไม่มีไลบรารีสำหรับใช้งาน **Hardware Timer**&#x20;

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

## กล่าวสรุป

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

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

{% hint style="info" %}
**เผยแพร่ภายใต้ลิขสิทธิ์**\
**Attribution-ShareAlike 4.0 International (**[**CC BY-SA 4.0**](https://creativecommons.org/licenses/by-sa/4.0/)**)**
{% endhint %}
