# Programming with MicroPython

## **ไมโครไพธอน (MicroPython)**

จัดทำและเผยแพร่เป็นวิทยาทาน โดย เรวัต ศิริโภคาภิรมย์

โดยทั่วไปแล้วในการเขียนโปรแกรมสำหรับไมโครคอนโทรลเลอร์ เรามักจะใช้ภาษาคอมพิวเตอร์ อย่างเช่น **C/C++** ซึ่งก็ถือว่าเป็นภาษาคอมพิวเตอร์ระดับสูง (**High-Level Programming Language**) แต่ถ้าจะใช้ภาษาอื่นในประเภท **Scripting Languages** ยกตัวอย่างเช่น **Python 3** จะเป็นไปได้หรือไม่ **?**&#x20;

ไมโครไพธอนเป็นซอฟต์แวร์ประเภท **Open Source** ทำหน้าที่เป็นเฟิร์มแวร์ (**Firmware**) สำหรับบอร์ดไมโครคอนโทรลเลอร์ ช่วยให้เราสามารถเขียนและรันโค้ดไพธอนได้ และสำหรับผู้ที่มีพื้นฐานภาษาไพธอนมาบ้างแล้ว การเลือกใช้ไมโครไพธอนก็อาจช่วยให้การเรียนรู้เกี่ยวกับการเขียนโปรแกรมและใช้งานไมโครคอนโทรลเลอร์สำหรับผู้เริ่มต้นทำได้ง่ายขึ้น เมื่อเปรียบเทียบกับการใช้งานภาษา **C/C++**&#x20;

![MicroPython Logo (Image Source: Wiki)](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MIJ8EHq7bpc6IDBakmA%2F-MIJ9CDkN6ezv5XBDKUC%2FMicropython-logo-2.png?alt=media\&token=21293b8e-826f-42a7-9339-b13d7941e736)

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

ประวัติความเป็นมาของไมโครไพธอน นั้นเริ่มต้นโดย [**Damien P. George**](https://dpgeorge.net/) \[[**LinkedIn Profile**](https://au.linkedin.com/in/damien-george-a3345010a)] ซึ่งเป็นนักฟิสิกส์ชาวออสเตรเลีย มีความคิดริเริ่มที่จะเขียนโปรแกรมไมโครคอนโทรลเลอร์ โดยใช้ภาษา **Python** ขณะที่ทำงานเป็น **Post-Doctoral Fellow** และทำวิจัยด้านอนุภาคพลังงานสูงในมหาวิทยาลัย **Cambridge** ประเทศอังกฤษ (**UK**)  &#x20;

ในช่วงเวลาที่เรียนในระดับป.ตรี เขาได้มีโอกาสได้ร่วมทีม [**RobotCup**](http://www.robocup.org/) แข่งขันหุ่นยนต์เตะฟุตบอล ([**Robot Soccer League**](http://www.robocup.org/leagues/18)) จึงมีประสบการณ์ด้านฮาร์ดแวร์ อิเล็กทรอนิกส์ และเขียนโปรแกรมด้านสมองกลฝังตัว

เขาได้เลือกใช้ **Python 3** และพัฒนาโปรแกรมหรือเฟิร์มแวร์ เช่น **Python Run-Time Interpreter** สำหรับไมโครคอนโทรลเลอร์ 32 บิต และสร้างบอร์ด [**PyBoard**](https://store.micropython.org/product/PYBv1.1) และระดมทุนใน [**Kickstarter**](https://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers) ในช่วงปี ค.ศ. **2013-2014** ได้ผู้เข้าร่วมและสนับสนุนราว 2,000 ราย (**1,931 backers**) และระดมทุนเงินสูงเกือบ £100,000 ซึ่งเป็นจุดเริ่มต้นของ **MicroPython** มีการเผยแพร่ซอฟต์แวร์ โดยใช้ลิขสิทธิ์ **MIT License**

ต่อมาในปีค.ศ. **2015** องค์กรที่มีชื่อว่า [**European Space Agency (ESA)**](https://www.esa.int/) ของสหภาพยุโรป ได้ให้การสนับสนุนโครงการ **MicroPython** อีกด้วย และในช่วงเวลาใกล้เคียงกัน **British Broadcasting Corporation (BBC)** ในประเทศอังกฤษ ได้พัฒนาบอร์ด [**Micro:bit**](http://microbit.org/) (ไมโครบิต) และไมโครไพธอนได้ถูกนำมาปรับให้ใช้งานได้กับบอร์ดดังกล่าว&#x20;

ความสำเร็จของไมโครไพธอน ได้ดึงดูดความสนใจของ **Limor "Ladyada"** ผู้ก่อตั้งบริษัท [**Adafruit Industries**](https://adafruit.com/) ในสหรัฐอเมริกา ทางบริษัทได้พัฒนาไลบรารีสำหรับอุปกรณ์ หรือโมดูลฮาร์ดแวร์เสริมหลายรูปแบบ (โดยส่วนใหญ่ก็เป็นฮาร์ดแวร์ต่าง ๆ ที่ทางบริษัทได้ผลิตและจำหน่าย) เพื่อรองรับการใช้งานไมโครไพธอน รวมถึงการพัฒนาบอร์ดไมโครคอนโทรลเลอร์ที่นำมาใช้ได้กับไมโครไพธอน เช่น บอร์ด [**Circuit Playground Express**](https://www.adafruit.com/product/3333) (**SAMD21**) และต่อได้มาพัฒนา [**CircuitPython**](https://circuitpython.readthedocs.io/) ต่อยอดมาจากไมโครไพธอน

บอร์ดที่ใช้ชิปหรือโมดูล [**ESP8266**](https://www.espressif.com/en/products/hardware/esp8266ex/overview) และ [**ESP32**](https://www.espressif.com/en/products/hardware/esp32/overview) ของบริษัท **Espressif Systems** ซึ่งมีความสามารถในการเชื่อมต่อ **Wi-Fi** มีราคาไม่แพง และนำไปใช้งานด้าน **IoT** ก็สามารถนำมาใช้งานร่วมกับไมโครไพธอนได้เช่นกัน ในปัจจุบันขณะที่เขียนบทความนี้ จะเห็นได้ว่า มีฮาร์ดแวร์หลายรูปแบบที่สามารถนำมาใช้ได้กับไมโครไพธอน

\
**ข้อสังเกตเกี่ยวกับ MicroPython**

* ทำให้สามารถเขียนโค้ด **Python 3** เพื่อเข้าถึงและใช้งานฮาร์ดแวร์ภายในไมโครคอนโทรลเลอร์ได้ง่าย เช่น **GPIO, Timer, SPI, I2C, UART, ADC, DAC, Wi-Fi** เป็นต้น
* เนื่องจากมีข้อจำกัดเรื่องหน่วยความจำ จึงมีการสร้างไลบรารีใหม่จำนวนหนึ่ง (เรียกโดยรวมว่า [**MicroPython Libraries**](https://docs.micropython.org/en/latest/library/index.html#python-standard-libraries-and-micro-libraries)) ซึ่งโดยปรกติแล้ว จะมีให้ใช้ได้เหมือนกรณีของ [**Python 3 Standard Libraries**](https://docs.python.org/3/) แต่อาจมีฟังก์ชันไม่ครบ จึงมีการตั้งชื่อให้เริ่มต้นด้วยตัวอักษร 'u' เช่น [**utime**](https://docs.micropython.org/en/latest/library/utime.html), [**usys**](https://docs.micropython.org/en/latest/library/usys.html)**,** [**uos**](https://docs.micropython.org/en/latest/library/uos.html)**,** [**ustruct**](https://docs.micropython.org/en/latest/library/ustruct.html) เป็นต้น เพื่อให้สังเกตเห็นความแตกต่าง แต่ทางผู้พัฒนาก็ได้พยายาม นำไลบรารีหรือโมดูลต่าง ๆ ของ [**CPython**](https://github.com/python/cpython) มาปรับให้สามารถใช้กับไมโครไพอนได้ สามารถดูรายการของไลบรารีที่ใช้ได้จาก [**Micropython-Lib**](https://github.com/micropython/micropython-lib)
* สามารถสื่อสารกับไมโครไพธอนได้แบบ **interactive** หรือที่เรียกว่า **REPL** **(Read, Eval, Print, Loop)** ผ่านพอร์ต **USB-to-Serial** หรือ **USB-CDC**
* ในกรณีที่ใช้ชิป **Wi-Fi SoC** เช่น **ESP8266** หรือ **ESP32** ก็สามารถใช้ **REPL (WebREPL)** แบบไร้สายผ่าน **Wi-Fi** ได้&#x20;

## การเลือกใช้บอร์ดไมโครคอนโทรลเลอร์สำหรับ MicroPython

สำหรับผู้ที่สนใจจะลองใช้หรือเขียนโค้ดไมโครไพธอน ร่วมกับบอร์ดไมโครคอนโทรลเลอร์ ในปัจจุบัน มีไมโครคอนโทรลเลอร์ให้เลือกใช้ได้หลายตระกูล (32 บิต) อาจลองพิจารณาดูตัวเลือกเหล่านี้&#x20;

* บอร์ดไมโครคอนโทรลเลอร์ **STM32** ซึ่งมีหลายรุ่น แต่แนะนำให้ใช้ **STM32F4 (ARM Cortex-M4F), STM32L4, STM32F7**  อาจเป็นบอร์ดที่ทางผู้พัฒนา **MicroPython** ผลิตขาย หรืออาจเป็นบอร์ดอื่น เช่น **STM32 Nucleo** เป็นต้น&#x20;
  * บอร์ด [**PyBoard**](https://store.micropython.org/product/PYBv1.1) ใช้ชิป **STM32F405 (ARM Cortex-M4F, 168 MHz, 1,024 KB Flash ROM, 192 KB SRAM)** ซึ่งถือว่าเป็นชิปไมโครคอนโทรลเลอร์ 32 บิต ที่มีประสิทธิภาพสูง บอร์ดมีขนาดเล็ก แต่รูปแบบของบอร์ดไม่เหมาะกับการใช้งานบนเบรดบอร์ด
  * บอร์ด [**PyBoard D-Series**](https://store.micropython.org/category/pyboard%20D-series) เป็นรุ่นถัดจาก **PyBoard** และใช้ตัวประมวลผล **STM32F7** ซึ่งมีความเร็วในการประมวลผลในระดับที่สูงกว่า **STM32F4**&#x20;
* บอร์ดไมโครคอนโทรลเลอร์ [**ESP8266**](https://www.espressif.com/en/products/socs/esp8266) หรือ [**ESP32**](https://www.espressif.com/en/products/socs/esp32) ของบริษัท [**Espressif**](https://www.espressif.com/) ซึ่งมีข้อดีคือ สามารถเชื่อมต่อผ่าน **Wi-Fi** ได้ ไปยังอินเทอร์เน็ต จึงเหมาะสำหรับการประยุกต์ใช้งานด้าน **IoT** ในปัจจุบันก็มีบอร์ดหลายรูปแบบให้เลือกใช้งานและราคาแตกต่างกันไป&#x20;
  * [**NodeMCU DevKit**](https://github.com/nodemcu/nodemcu-devkit-v1.0)
  * **Adafruit Feather HUZZAH ESP8266**
  * **Sparkfun ESP32 Thing**
  * **WeMos D1 mini, WeMos LOLIN D32**
  * **WROOM-32 DEVKIT V4**
  * **PyCom WiPy**
* บอร์ด [**BBC Micro:bit**](https://microbit.org/get-started/user-guide/overview/) **v1** ซึ่งใช้ตัวประมวลผล **nRF51822 (ARM Cortex-M0, 16MHz, 256 KB Flash, 16KB SRAM)** และสามารถสื่อสารไร้สายด้วย **Bluetooth 4.0** ได้ และอาจจะเหมาะสำหรับผู้เรียนที่มีประสบการณ์หรือเริ่มต้นใช้งานบอร์ดนี้มาก่อน เช่น การเขียนโปรแกรมโดยการต่อบล็อกและใช้ [**Microsoft MakeCode for Micro:bit**](https://makecode.microbit.org/) เป็นต้น
* บอร์ด [**Adafruit’s Circuit Playground Express**](https://www.adafruit.com/product/3333) มีลักษณะเป็นทรงกลม มีขา **I/O pins** อยู่รอบ ใช้ตัวประมวลผล [**ATSAMD21G18**](https://www.microchip.com/wwwproducts/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**](https://micropython.org/download/) เช่น สำหรับ [**ESP32**](https://micropython.org/download/esp32/), [**ESP8266**](https://micropython.org/download/esp8266/), [**STM32**](https://micropython.org/download/stm32/)**)** และจะต้องทำขั้นตอนติดตั้งลงในหน่วยความจำ **Flash** ของไมโครคอนโทรลเลอร์ (ซึ่งมีขั้นตอนและวิธีการที่แตกต่างกันไป ขึ้นอยู่กับฮาร์ดแวร์ที่นำมาใช้งาน) หรือ เราอาจจะดาวน์โหลด **Source Code** มาจาก [**Github**](https://github.com/micropython/micropython) แล้วทำขั้นตอน **Build** เองก็ได้เช่นกัน

## การเลือกใช้ Editor สำหรับ MicroPython

ตัวอย่างซอฟต์แวร์ประเภท **Open Source** ที่เราสามารถนำมาใช้เขียนโค้ดไมโครไพธอน  และเชื่อมต่อกับบอร์ดไมโครคอนโทรลเลอร์ที่ได้ติดตั้งเฟิร์มแวร์แล้ว ได้แก่

* [**Thonny IDE**](https://thonny.org/) **(Windows, Mac OS X, Linux)**
* [**Mu Editor**](https://codewith.mu/en/download) **(Windows, Mac OS X, Linux)**
* [**uPyCraft IDE**](https://github.com/DFRobot/uPyCraft) **(Windows, Mac OS X, Linux)**
* [**VSCode**](https://code.visualstudio.com/) **+ Extensions for MicroPython (e.g.** [**PyMakr**](https://marketplace.visualstudio.com/items?itemName=pycom.Pymakr)**)**

ถ้าเปิดพอร์ต **Serial** (**Virtual COM port**) เชื่อมต่อกับพอร์ต **USB** ของบอร์ดไมโครคอนโทรลเลอร์ที่ได้ติดตั้งเฟิร์มแวร์สำหรับไมโครไพธอนไว้แล้ว จะเป็นการเชื่อมต่อกับส่วนที่เรียกว่า **REPL** (เหมือน **Python Interactive Shell**) รอให้ผู้ใช้พิมพ์คำสั่งสำหรับไมโครไพธอน

หลักการทำงานของ **REPL** (**Read–Eval–Print Loop)** มีดังนี้&#x20;

1. **R**ead the user input (Python code)
2. **E**valuate Python code
3. **P**rint any results (e.g., output texts or error messages)
4. **L**oop back to step 1

**Python IDE** ที่รองรับการใช้งานสำหรับไมโครไพธอน เช่น **Thonny IDE** นอกจากมีส่วนที่เชื่อมต่อกับ **REPL** ได้แล้ว ยังสามารถทำคำสั่ง เพื่อรันหรืออัปโหลดโค้ด **.py** และบันทึกเป็นไฟล์ลงใน **Flash Storage** ของ **MicroPython Device** ได้ด้วย

![Thonny IDE + MicroPython for ESP32 Demo](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MIIyZ9Z3mFhUco64ag1%2F-MIJ-I8dzcLVJHWCALwU%2Fthonny_ide_esp32_demo.png?alt=media\&token=664ebaf1-d2c2-4b0f-95a2-b98280766308)

ถ้าจะใช้โปรแกรมแบบ **Command Line** ก็มีตัวเลือก เช่น [**micropy-cli**](https://github.com/BradenM/micropy-cli) ซึ่งได้ใช้ภาษา **Python 3** ในการพัฒนา และสามารถใช้ร่วมกับ **VS Code** ได้ด้วย

![MicroPython-ESP32 Demo for Interfacing M5Stack with Rigol Oscilloscope](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MIJ65TZIIHHZ1pby5Eg%2F-MIJ6QadaqPRkfOdvJN_%2Fmicropython_esp32_rigol-2.png?alt=media\&token=df3903d4-facd-405f-ad99-2ebfb5801e24)

## การเขียนโค้ดไมโครไพธอนสำหรับ ESP32: กรณีตัวอย่าง

ผู้เขียนได้เคยลองใช้งานไมโครไพธอนร่วมกับบอร์ดไมโครคอนโทรลเลอร์ **ESP32** (โมดูล **M5Stack Core**) เช่น การเขียนโปรแกรมเพื่อควบคุมและใช้งานอุปกรณ์เครื่องมือวัด **Rigol Digital Oscilloscope** รุ่น **DS2000A Series** ที่เชื่อมต่อผ่าน **LAN (Ethernet Port)** และติดต่อสื่อสารกับบอร์ด **ESP32** ผ่านทาง **Wi-Fi** ในระบบเครือข่ายเดียวกัน&#x20;

ในกรณีตัวอย่างนี้แสดงให้เห็นว่า เราสามารถเขียนโค้ดไมโครไพธอน เพื่อส่งคำสั่งประเภท **SCPI (Standard Commands for Programmable Instruments**) ไปยังอุปกรณ์เครื่องมือวัดที่อยู่ห่างออกไปในระบบเครือข่าย (โดยใช้คำสั่งของไมโครไพธอนสำหรับการเปิดใช้งาน **TCP Socket**)&#x20;

คำสั่ง **SCPI** ที่ถูกส่งไปนั้น จะถูกใช้เพื่อตั้งค่าการใช้งานอุปกรณ์ และอ่านข้อมูลที่ได้จากการวัดสัญญาณ (เช่น หนึ่งช่องสัญญาณ) แล้วส่งกลับมายัง **ESP32** และแสดงผลเป็นรูปกราฟของสัญญาณบนจอภาพ **Graphic LCD** ของโมดูล **M5Stack Core** เป็นต้น

การเขียนโค้ดไมโครไพธอนสำหรับการสื่อสารกับอุปกรณ์เครื่องมือวัดดังกล่าว ผ่านทาง **Wi-Fi** แม้จะมีความแตกต่างจากการเขียนโค้ด **Python** สำหรับคอมพิวเตอร์ที่ใช้ **Windows** หรือ **Linux** อยู่บ้าง แต่ก็ไม่มากนัก มีเพียงบางส่วนเท่านั้น เช่น การตั้งค่าเพื่อเปิดการใช้งานของ **Wi-Fi** ของ **ESP32** และข้อจำกัดของหน่วยความจำ (**SRAM**) สำหรับการทำงานของโค้ด

![MicroPython-ESP32: Interfacing M5Stack with Rigol Oscilloscope](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MIJ65TZIIHHZ1pby5Eg%2F-MIJ6cjMODUGq-0WU9Bs%2Fmicropython_esp32_rigol-1.jpg?alt=media\&token=0d4f7097-afbe-4dea-8de5-484fd974e2eb)

## **การเขียนโค้ดไมโครไพธอนสำหรับไมโครบิต**

ในกรณีที่ใช้บอร์ดไมโครบิต ซึ่งเป็นตัวอย่างหนึ่งของบอร์ดไมโครคอนโทรลเลอร์ที่ได้รับความนิยม และมีการนำมาใช้สอนโค้ดดิ้งสำหรับเด็กและเยาวชนในโรงเรียนต่าง ๆ ทั่วโลก เราก็มีตัวเลือกซอฟต์แวร์ เช่น [**Python Code Editor**](https://python.microbit.org/v/beta) แบบออนไลน์ ไว้ให้ใช้งานได้ฟรี และทำงานบนหน้าเว็บเบราว์เซอร์ หรือจะใช้ [**EduBlocks Editor**](https://edublocks.org/) แบบออนไลน์ได้เช่นกัน

การใช้งานแบบออนไลน์มีข้อดีคือ ไม่ต้องติดตั้งซอฟต์แวร์ในเครื่องคอมพิวเตอร์ของผู้ใช้ และใช้เพียงโปรแกรมเว็บเบราว์เซอร์ เช่น **Google Chrome** ถ้าเชื่อมต่อคอมพิวเตอร์กับบอร์ดไมโครบิตผ่านทางพอร์ต **USB** ([**WebUSB**](https://microbit.org/get-started/user-guide/web-usb/)) ก็สามารถรันโค้ดโดยใช้บอร์ดไมโครบิตเพื่อทดสอบการทำงานได้จริง

ผู้ที่สนใจสามารถศึกษาชุดคำสั่งหรือ **API** ได้จาก "[**Micro:bit MicroPython Documentation**](https://microbit-micropython.readthedocs.io/en/latest/)" แต่มีข้อสังเกตอยู่ว่า ไมโครไพธอนสำหรับแต่ละไมโครคอนโทรลเลอร์ที่เป็นเป้าหมาย (**Target Device**) อาจมีคำสั่งหรือ **API** ไม่เหมือนกันในรายละเอียด โดยเฉพาะอย่างยิ่งที่เกี่ยวข้องกับฮาร์ดแวร์ส่วนต่าง ๆ ทั้งภายในไมโครคอนโทรลเลอร์และภายนอก

![รูปภาพ: Online Python Editor for Micro:bit](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MIIZLAu5zLRTxJlchID%2F-MII_PKeYYr_0wl0qM5c%2Fweb_microbit_micropython_2020-09-28.png?alt=media\&token=4990fb32-ca40-4bac-abff-014954551f9a)

![รูปภาพ: Thonny IDE (MicroPython - BBC Micro:bit)](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MIqm_6OpsnRN4b3p4Pm%2F-MIqn013JgI3HeQmdJnC%2Fthonny_ide_microbit_repl.png?alt=media\&token=52c4b09e-526e-4d7b-b22d-dcaf5a6c7e0b)

![รูปภาพ: EduBlocks Editor for BBC Micro:bit (Blocks View)](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MIIyZ9Z3mFhUco64ag1%2F-MIJ3ofSYzPWzj9_J98s%2Fedublocks_microbit_editor-1.png?alt=media\&token=3a796d51-7bb6-447f-97aa-f12e89f150f9)

ในกรณีที่ใช้ **VS Code** เป็น **IDE** และถ้าได้ติดตั้ง **Extension** อย่างเช่น **Device Simulator Express (**[**Source Code Repository**](https://github.com/microsoft/vscode-python-devicesimulator)**)** ก็สามารถจำลองการทำงานของโค้ดและตรวจสอบความถูกต้องในการทำงานสำหรับบอร์ดไมโครบิตได้&#x20;

**Device Simulator Express** เกิดจากกิจกรรมของผู้เข้าร่วม **Microsoft Garage Project** ในช่วงปีค.ศ. 2019 และช่วยในการเขียนโค้ด **CircuitPython** สามารถจำลองการทำงานของโค้ดเสมือนจริงได้ แม้ว่าอาจมีข้อจำกัดอยู่บ้าง รองรับการใช้งานบอร์ด **Adafruit Circuit Express** และ **Adafruit CLUE** แต่ก็สามารถใช้กับ **BBC Micro:bit** ได้เช่นกัน สามารถอัปโหลดโค้ดไปยังบอร์ดทดลองได้ด้วย

จุดเด่นของ **Device Simulator Express** คือ ความสามารถในการรันโค้ดไมโครไพธอนโดยใช้ **Built-in Simulator** ได้ ดังนั้นจึงทดสอบโค้ดได้ โดยยังไม่จำเป็นต้องมีบอร์ดไมโครบิต

![รูปภาพ: Device Simulator Express Extension in VS Code IDE](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MIIyZ9Z3mFhUco64ag1%2F-MIIzW7gMCAtHjjn98cE%2Fdevice_simulator_express-1.png?alt=media\&token=782a504f-fb5f-411f-8581-137db9835113)

![รูปภาพ: MicroPython Simulator for BBC Micro:bit](https://969412697-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MIHfYo9IV3uTFm2tkDn%2F-MIIyZ9Z3mFhUco64ag1%2F-MIIzkJZvZOl6ug4iCe6%2Fdevice_simulator_express-2.png?alt=media\&token=2d6ca80d-e126-465d-a6f7-e25aa3f114ea)

## **กล่าวสรุป**&#x20;

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://think-embedded.gitbook.io/micropython/master.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
