การใช้งาน Micropython

จาก Morange Wiki

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 ของอบร์ด

ตัวอย่างของโค้ดพื้นฐาน

  1. LED
  2. Button
  3. NeoPixels
  4. เพิ่มเติม


อ้างอิง

  1. https://www.iot.eng.kmutnb.ac.th/pub/docs/2018/esp8266_esp32_micropython_getting_started/
  2. http://docs.micropython.org/en/latest/esp8266/tutorial/intro.html
  3. https://github.com/lvidarte/esp8266/wiki/Micropython%3A-Installation
  4. https://medium.com/@sittipongjansorn/micropython-file-system-%E0%B8%81%E0%B8%B1%E0%B8%9A-ampy-53d3345796a3
  5. https://learn.adafruit.com/micropython-basics-load-files-and-run-code/boot-scripts