การใช้งาน Micropython
เนื้อหา
Micropython คือ
ประวัติของ MicroPython เริ่มต้นโดย Damien P. George (http://dpgeorge.net/) ซึ่งเป็นนักฟิกส์ชาวออสเตรเลีย มีความคิดที่จะเขียนโปรแกรมไมโครคอนโทรลเลอร์โดยใช้ภาษา Python ขณะที่ทำงานเป็น Post-Doctoral Fellow และทำวิจัยด้านอนุภาคพลังงานสูง ในมหาวิทยาลัย Cambridge ประเทศอังกฤษ (UK) ตอนเรียนระดับป.ตรี เขามีโอกาสได้ร่วมทีม RobotCup แข่งขันหุ่นยนต์เตะฟุตบอล (Robot Soccer League) จึงมีประสบการณ์ด้านฮาร์ดแวร์ อิเล็กทรอนิกส์ และเขียนโปรแกรมด้านสมองกลฝังตัว
เขาจึงเริ่มพัฒนาคอมไพเลอร์ (Compiler) เพื่อแปลงโค้ด Python 3.x Script (.py) ให้เป็นโปรแกรมหรือเฟิร์มแวร์ที่ทำงานได้โดยใช้ไมโครคอนโทรลเลอร์ และสร้างบอร์ด 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 เขาจึงได้นำ MicroPython มาปรับให้ใช้งานได้สำหรับบอร์ดดังกล่าว
ความสำเร็จของ MicroPython ได้ดึงดูดความสนใจของ Limor "Ladyada" ผู้ก่อตั้งบริษัท Adafruit Industries ในสหรัฐอเมริกา ทางบริษัทได้พัฒนาไลบรารีมารองรับการใช้งาน MicroPython สำหรับฮาร์ดแวร์ต่าง ๆ ที่ทางบริษัทจำหน่าย รวมถึงพัฒนาบอร์ดสำหรับ MicroPython เช่น บอร์ด Circuit Playground Express และต่อได้มาพัฒนา CircuitPython ต่อยอดมาจาก MicroPython
บอร์ดที่ใช้ชิปหรือโมดูล ESP8266 และ ESP32 ของบริษัท Espressif Systems ซึ่งมีความสามารถในการเชื่อมต่อ Wi-Fi และนำไปใช้งานด้าน IoT ก็สามารถใช้งานร่วมกับ MicroPython ได้แล้ว ในปัจจุบันขณะที่เขียนบทความนี้ จะเห็นได้ว่า มีฮาร์ดแวร์หลายแบบที่สามารถนำมาใช้ได้กับ MicroPython
ข้อสังเกตเกี่ยวกับ MicroPython
- สามารถ "รัน" โดยตรงกับไมโครคอนโทรลเลอร์ได้ ไม่เหมือนการทำงานของ Python 3 ที่ใช้งานสำหรับคอมพิวเตอร์โดยทั่วไป ซึ่งต้องมีระบบปฏิบัติการ (Operating System: OS)
- เข้าถึงฮาร์ดแวร์ เช่น GPIO, SPI, I2C, Wi-Fi ได้
- เนื่องจากมีข้อจำกัดเรื่องหน่วยความจำ จึงเลือกได้มีการนำไลบรารีจำนวนหนึ่งเท่านั้นมาใช้งาน และสามารถดูรายการของไลบรารีที่ใช้ได้จาก https://github.com/micropython/micropython-lib
- สื่อสารกับ MicroPython firmware ได้แบบ interactive หรือที่เรียกว่า REPL (Read, Eval, Print, Loop) ผ่านพอร์ต USB-to-Serial
เพิ่มเติม:
นอกเหนือจาก MicroPython สำหรับไมโครคอนโทรลเลอร์แล้ว ยังมีตัวเลือกอื่นอีกที่น่าสนใจ เช่น Zerynth (Viper) สามารถนำมาใช้ได้กับ ESP8266/ESP32 และบอร์ดไมโครคอนโทรลเลอร์อื่น ๆ อีกหลายบอร์ด
การติดตั้ง Micropython
1.ดาวน์โหลดและติดตั้ง esptool.py โดยใช้คำสั่งต่อไปนี้ (ต้องติดตั้ง Python 3 และ PIP ในเครื่องของผู้ใช้แล้ว)
curl -O -J http://micropython.org/resources/firmware/esp8266-20180511-v1.9.4.bin ; สำหรับดาวน์โหลด esptool.py
python3 -m pip install esptool ติดตั้ง
2.ดาวน์โหลดและติดตั้ง Adafruit Micropython Tool โดยใช้คำสั่งต่อไปนี้
python3 -m pip install adafruit-ampy สำหรับติดตั้งครั้งแรก
python3 -m pip install adafruit-ampy -U
3.เมื่อดาวน์โหลดแล้วติดตั้งเสร็จแล้วให้ตรวจสอบว่าติดตั้งสำเร็จไหม ตรวจสอบ esptool.py
$esptool.py version esptool.py v2.6 2.6
ถ้าขึ้นแบบนี้แสดงว่าสำเร็จ
ตรวจสอบ ampy
ampy --version ampy, version 1.0.7
การ flash firmware esp 8266 ลงไปในบอร์ด
ดาวน์โหลดไฟล์และติดตั้ง Micropython Firmware (.bin) เลือกใช้เวอร์ชัน 1.9.4 (latest)
- ไปที่หน้าเว็บ MicroPython downloads
- เลือกหัวข้อของบอร์ด
- จากนั้นพิมพ์คำสั่งนี้ไปเพื่อ clear flash
python3 -m esptool --port <COM PORT> erase_flash
- ต่อมาเพิ่ม flash Esp 8266 ลงไป
esptool.py --port /dev/ttyUSB0 <--baud ค่าอัฟโหลดสปีด> write_flash <--flash_mode จะใส่ก็ได้ไม่ใส่ก็ได้> <--flash_size จำนวนไชส์ของบอร์ดเรา>
หมายเหตุ COM PORT ของแต่ละเครื่องไม่เหมือนกัน ถ้าเป็นของ Linux จะเป็น dev/tyyUSB <0,1,2,3,4> ถ้าเป็น Windows com(หมายเลข)
การใช้งาน ampy
- หลังจากที่ทำการแฟลชลงเรียบร้อยละ ต่อมาจะ putfile ลงไปในบอร์ด cd เข้าไปในไฟล์ที่เราเขียนไว้
ampy --port <COM PORT> put <SCRIPT.py>
- พอเพิ่มไฟล์เข้าไปแล้วให้ลองรันดู
copyโค้ดนี้ไปทดสอบได้นะครับ
import time from machine import Pin LED_PIN = 2 led = Pin( LED_PIN, Pin.OUT ) # use GPIO5 as output, connected to the onboard LED (WeMos LOLIN32) led.value( 1 ) cnt = 0 while True: led.value( not led.value() ) # toggle the LED output time.sleep(1) led.value( led.value() ) # toggle the LED output time.sleep(1)
รันใช้คำสั่งนี้
ampy --port <COM PORT> run <SCRIPT.py>
- ต่อมาเขาจะอัฟไฟล์ไปไว้ในบอร์ดโดยให้มันบูทโปรแกรมได้ตลอดเวลา
ลองพิมพ์คำสั่งนี้ดู
ampy --port <COM PORT> ls
- จะสังเกตจะมีไฟล์ของเราและไฟล์ boot.py เราต้องทำการ put ไฟล์ของเราให้ไปอยู่ในไฟล์ boot.py ทำได้ดังนี้
ampy --port <COM PORT> put <SCRIPT.py> /<boot.py>
คำสั่งเพิ่มเติ่ม
- พิมพ์ ampy --help เพื่อดูคำสั่งเพื่อเติ่ม
get download file จากบอร์ด ls แสดงรายชื่อ file ที่อยู่ใน file system ของบอร์ด mkdir สร้างไดเรกทอรี ที่อยู่ใน file system ของบอร์ด put upload file จากคอมพิวเตอร์ไปยัง file sstem ของบอร์ด reset Perform soft reset/reboot of the board. rm ลบ file ออกจากระบบ file system ของบอร์ด rmdir ลบไดเรกทอรี ที่อยู่ใน file system ของบอร์ด run รันสคลิปที่อยู่ในเครื่องคอมพิวเตอร์เราโดยที่ไม่ต้อง upload ไปที่ file system ของอบร์ด
อ้างอิง
- https://www.iot.eng.kmutnb.ac.th/pub/docs/2018/esp8266_esp32_micropython_getting_started/
- http://docs.micropython.org/en/latest/esp8266/tutorial/intro.html
- https://github.com/lvidarte/esp8266/wiki/Micropython%3A-Installation
- https://medium.com/@sittipongjansorn/micropython-file-system-%E0%B8%81%E0%B8%B1%E0%B8%9A-ampy-53d3345796a3
- https://learn.adafruit.com/micropython-basics-load-files-and-run-code/boot-scripts