Building MicroPython Firmware

ขั้นตอนการคอมไพล์โค้ดของไมโครไพธอน เพื่อให้ได้ไฟล์ที่เป็นเฟิร์มแวร์ (.bin)

MicroPython-ESP32 Firmware

โดยปรกติแล้ว ถ้าต้องการใช้งานไมโครไพธอนกับบอร์ดไมโครคอนโทรลเลอร์ เช่น ESP32 หรือบอร์ดอื่น ๆ ก็มีไฟล์ .bin ที่ทางผู้พัฒนาได้จัดทำไว้แล้ว เพื่อนำไปใช้ติดตั้งเป็นเฟิร์มแวร์ (Firmware) ลงในหน่วยความจำ Flash ของบอร์ดไมโครคอนโทรลเลอร์ เช่น สำหรับ ESP32 ก็สามารถดาวน์โหลดได้จาก https://micropython.org/download/esp32/arrow-up-right

ในบางกรณี ถ้าเราต้องการลองดัดแปลงแก้ไข หรือลองทำขั้นตอน Build Firmware จากซอร์ซโค้ด (Source Code) ของ MicroPythonarrow-up-right ที่ดาวน์โหลดมาจาก Github ก็ต้องติดตั้งเครื่องมือหรือโปรแกรมที่จำเป็น โดยจำแนกตามระบบปฏิบัติการที่เลือกใช้ได้ เช่น Windows, Linux, Mac OS

circle-info

ในการคอมไพล์ซอร์ซโค้ดของไมโครไพธอน เช่น สำหรับ ESP32 หรือ STM32 แนะนำให้ใช้ Linux เช่น Ubuntu สำหรับคอมพิวเตอร์ x86_64 หรือ Raspbian OS สำหรับบอร์ด Raspberry Pi ในกรณีที่ใช้ระบบปฏิบัติการ Windows 10 ก็แนะนำให้ใช้ WSL / WSL2 ที่รองรับการใช้งาน Ubuntu 18.04 LTS หรือใหม่ (ทำตามขั้นตอน Guideline ของ Microsoftarrow-up-right)

ถัดไปเป็นขั้นตอนสำหรับ Ubuntu ที่อ้างอิงจาก: https://github.com/micropython/micropython/tree/master/ports/esp32arrow-up-right

เครื่องคอมพิวเตอร์ที่ได้ลองใช้งานคือ คอมพิวเตอร์บอร์ดเดี่ยว Raspberry Pi 4 Model B ติดตั้งระบบปฏิบัติการ Raspbian OS Buster (32-bit) แต่ก็เราก็สามารถใช้คอมพิวเตอร์ Ubuntu หรือใช้งานผ่าน WSL2 สำหรับ Windows 10 ได้เช่นกัน

ตัวอย่างการทำคำสั่ง เพื่อดูเวอร์ชันของระบบปฏิบัติการ Linux ที่ได้นำมาใช้งาน

$ cat /etc/os-release 

PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
...

ขั้นตอนแรก ให้ติดตั้งโปรแกรมคำสั่งต่าง ๆ ที่จำเป็นต้องใช้ในขั้นตอนถัดไปลงในเครื่องคอมพิวเตอร์ Linux ของผู้ใช้ ดังนี้

ขั้นตอนที่ 2 กำหนดไดเรกทอรี เพื่อทำคำสั่งดาวน์โหลด Repository ของไมโครไพธอน จาก Github มายังคอมพิวเตอร์ของผู้ใช้ (ในตัวอย่างนี้ เลือกเป็น $HOME/MicroPython)

ขั้นตอนที่ 3 เป็นการติดตั้งเครื่องมือต่าง ๆ เช่น ESP-IDF สำหรับ ESP32

ทำคำสั่งเพื่อย้ายไปยังไดเรกทอรีสำหรับ ports/esp32 แล้วทำคำสั่ง make ดังนี้

ให้สังเกตข้อความเอาต์พุตจากการทำคำสั่งดังกล่าว ดูตรงข้อความที่มีคำว่า git hash เช่น

Supported git hash (v3.3): 9e70825d1e1cbf7988cf36981774300066580ea7Supported git hash (v4.0) (experimental): 4c81978a3e2220674a432a588292a4c860eef27b

ในการคอมไพล์โค้ดสำหรับ ESP32 จะต้องใช้โปรแกรมที่เรียกว่า ESP-IDF ของบริษัท Espressif ซึ่งในขณะนี้มีให้เลือกใช้สองเวอร์ชัน คือ v3.3 และ v4.0 ตามข้อความข้างบน

เราจะเลือกใช้ ESP-IDF v4.0 และทำคำสั่งต่อไปนี้เพื่อติดตั้งโปรแกรมต่าง ๆ ที่เกี่ยวข้อง โดยต้องระบุ git commit ID (ค่า hash ในเลขฐานสิบหก) ที่ปรากฏในข้อความเอาต์พุตข้างบน เพื่อใช้กับคำสั่ง git checkout

ขั้นตอนที่ 4 ให้ย้ายไปยังไดเรกทอรีของไมโครไพธอนสำหรับ ESP32 แล้วเริ่มใช้งาน Python Virtual Environment พร้อมติดตั้งซอฟต์แวร์ที่เกี่ยวข้อง

ขั้นตอนที่ 5 ทำคำสั่งต่อไปนี้ เพื่อเริ่มขั้นตอนคอมไพล์โค้ด ซึ่งอาจใช้เวลาหลายนาที

ข้อสังเกต: สำหรับบอร์ด ESP32 โดยทั่วไป จะมีสองประเภทคือ บอร์ด ESP32 ที่ไม่มีชิปหน่วยความจำภายนอกประเภท SPIRAM (เรียกว่า GENERIC) และบอร์ดที่มี SPIRAM อย่างน้อย 4MB (เรียกว่า GENERIC_SPIRAM) และเมื่อคอมไพล์โค้ดแล้ว จะได้ไฟล์เฟิร์มแวร์ (.bin) แยกกัน ต้องเลือกให้ถูกต้อง เมื่อจะนำไปใช้งาน

รูปภาพ: ข้อความเอาต์พุตเมื่อคอมไพล์ firmware.bin (ESP32 GENERIC) ได้สำเร็จ
รูปภาพ: เมื่อคอมไพล์ firmware.bin (ESP32 GENERIC_SPIRAM) ได้สำเร็จ

ขั้นตอนที่ 6 (สุดท้าย) เป็นการเขียนไฟล์ firmware.bin ไปยังบอร์ดเป้าหมาย

เมื่อได้ไฟล์ firmware.bin แล้ว ก็สามารถนำไปเขียนลงให้หน่วยความจำ Flash ของบอร์ด ESP32 ได้ โดยใช้โปรแกรมแบบ Command Line เช่น esptool.py

เสียบสาย USB เชื่อมต่อระหว่างคอมพิวเตอร์ผู้ใช้กับบอร์ด ESP32 แล้วลองทำคำสั่งดังนี้

รูปภาพ: ตัวอย่างข้อความเมื่อทำคำสั่ง esptool.py flash_id

ถ้าสามารถเชื่อมต่อและอ่านค่าจากบอร์ด ESP32 ก็ให้ทำคำสั่งเขียนข้อมูลจากไฟล์ firmware.bin ไปยังบอร์ดเป้าหมาย

เมื่อทำได้แล้ว ให้ลองเชื่อมต่อกับบอร์ด ESP32 ผ่านทาง Serial REPL จะเห็นข้อความเริ่มต้นหลังจากรีเซตการทำงานของบอร์ด เช่น

MicroPython v1.13-189-g76a2dff61 on 2020-11-27; ESP32 module (spiram) with ESP32 Type "help()" for more information.

ซึ่งแสดงว่า เราสามารถใช้งานไมโครไพธอนได้แล้ว

Micropython-STM32 Firmware

ขั้นตอนการติดตั้ง MicroPython for STM32 อ้างอิงตามเอกสารออนไลน์ดังนี้ https://github.com/micropython/micropython/wiki/Getting-Started-STMarrow-up-right

1) การคอมไพล์โค้ดสำหรับ STM32 จำเป็นต้องใช้ GNU ARM Embedded Toolchainarrow-up-right ให้ดาวน์โหลดไฟล์ ติดตั้งตามเวอร์ชันและระบบปฏิบัติการที่ต้องการใช้ได้ ในตัวอย่างนี้เราได้เลือกใช้เวอร์ชัน “GNU Tools for Arm Embedded Processors 8–2019q4-major”

2) ติดตั้งโปรแกรมสำหรับการคอมไพล์โค้ดใน Ubuntu

3) ดาวน์โหลดซอร์ซโค้ดของ MicroPython จาก Github

4) คอมไพล์โค้ดสำหรับ MicroPython Cross Compiler (mpy-cross)

5) คอมไพล์โค้ดสำหรับ MicroPython-STM32 Port เช่น บอร์ดเป้าหมายเป็น NUCLEO_L476RG

เมื่อทำขั้นตอนคอมไพล์ซอร์ซโค้ดให้ได้ไฟล์เฟิร์มแวร์ ซึ่งจะอยู่ในไดเรกทอรี build-NUCLEO_L476RG และเป็นไฟล์ .dfu และ .hex

  • ไฟล์ .hex จะใช้สำหรับการอัปโหลดด้วยอุปกรณ์ ST-Link V2 และใช้ร่วมกับโปรแกรมเช่น OpenOCD หรือ ST-Link Utility

  • ไฟล์ .dfu จะใช้วิธีการทำให้ STM32 อยู่ในโหมด DFU (Device Firmware Upgrade Mode) แล้วสามารถใช้โปรแกรมอย่างเช่น dfu-util อัปโหลดไฟล์ไปยังบอร์ดโดยใช้เพียงสาย USB

ถ้าต้องการได้ไฟล์ .bin ก็ทำคำสั่งดังนี้

ถ้าใช้บอร์ด NUCLEO เมื่อเสียบสาย USB กับคอมพิวเตอร์ จะมองเห็นไดรฟ์ปรากฎขึ้นมา เราสามารถลากไฟล์ .bin ไปใส่ลงในไดรฟ์ดังกล่าว เพื่อทำการโปรแกรมไฟล์เฟิร์มแวร์สำหรับไมโครไพธอนได้

ข้อสังเกต: ถ้าใช้ WSL Ubuntu จะไม่สามารถมองเห็นพอร์ต USB และไม่สามารถใช้คำสั่ง make deploy ได้ ดังนั้นจึงใช้วิธีสำเนาไฟล์จาก Ubuntu File System ไปยังไดเรกทอรีของ Windows 10 เช่น ไดรฟ์ C คือ /mnt/c แล้วใช้โปรแกรมสำหรับ Windows ทำการอัปโหลดไฟล์ เช่น โปรแกรม STM32CubeProgrammer ที่ใช้สามารถใช้ร่วมกับอุปกรณ์ ST-Link Programmer เป็นต้น

Last updated

Was this helpful?