หลังจากที่ได้แนะนำบอร์ดไมโครคอนโทรลเลอร์ SAM-D21 ดังภาพที่ 1 และการใช้ ADC/DAC ของชิพตัวนี้ที่เป็นไมโครคอนโทรลเลอร์สถาปัตยกรรม ARM 32 บิต แบบ Cortex-M0+ ในครั้งนี้เรามาลองคอมไพล์และใช้ภาษาไพธอนสำหรับบอร์ดตัวนี้กัน
ขั้นตอน
ในการทดลองนี้เลือกใช้ระบบปฏิบัติการ Linux Mint และสิ่งที่ต้องมีก่อนคอมไพล์คือชุดคอมไพล์ของ ARM ซึ่งสั่งติดตั้งด้วยคำสั่งต่อไปนี้
sudo apt install gcc-arm-none-eabi
ดาวน์โหลด
ให้ดาวน์โหลดไฟล์ต้นฉบับของ MicroPython จาก github ด้วยคำสั่งต่อไปนี้
git clone --recurse-submodules https://github.com/micropython/micropython.git
ตัวอย่างผลลัพธ์ของการทำงานเป็นดังภาพที่ 2
เมื่อดาวน์โหลดเป็นที่เรียบร้อยให้ใช้คำสั่งย้ายเข้าไปในโฟลเดอร์ของ micropython ดังนี้
cd ~/micropython
คอมไพล์ mpy-cross
ตัวคอมไพล์ภาษาไพธอนของ MicroPython หรือ mpy-cross ให้เป็นไบต์โค้ดที่มีนามสกุลเป็น .mpy ซึ่งมีประโยชน์ในแง่ของการทำให้โค้ดนั้นมีขนาดเล็กลงสะดวกต่อการนำไปใช้เนื่องจากประหยัดพื้นที่ของรอม/แรม และไม่ต้องประมวลผลขณะที่เรียกทำงาน นอกจากนี้ ในการคอมไพล์ MicroPython เองก็ต้องใช้ตัว mpy-cross ด้วยเช่นกัน ดังนั้น สิ่งที่ต้องทำในขัเนตอนที่ 2 คือ คอมไพล์ mpy-cross เพื่อเป็นเครื่องมือสำหรับคอมไพล์ MicroPython ต่ออีกชั้นหนึ่ง โดยเข้าไปที่ mpy-xxx หลังจากนั้นสั่ง make ดังนี้
cd mpy-cross
make clean
make
เมื่อคอมไพล์เสร็จจะพบไฟล์ชื่อ mpy-cross
คอมไพล์ submodules ของ sam-d21
เมื่อมี mpy-cross แล้ว ขั้นตอนต่อไปคือสร้างไลบรารีที่จะถูกเรียกใช้ด้วย sam-d21 โดยเข้าไปที่ ports ของ samd ดังนี้
cd ~/micropython/ports/samd
หลังจากนั้นสั่งคอมไพล์ด้วยคำสั่งดังต่อไปนี้
make clean
make submodules
คอมไพล์ MicroPython
คำสั่งสำหรับคอมไพล์ MicroPython เพื่อใช้กับ SAM-D21 คือ กำหนดให้บอร์ดที่ใช้งานเป็น ADAFRUIT_TRINKET_M0 ดังนี้
make BOARD=ADAFRUIT_TRINKET_M0
เมื่อการคอมไพล์เสร็จสิ้นโดยไม่เกิดข้อผิดพลาดเกี่ยวกับ arm-none-eabi-gcc หรือลืม mpy-cross จะได้โฟลเดอร์ชื่อ build-ADAFRUIT_TRINKET_M0
อัพโหลด
เมื่อคอมไพล์เรียบร้อย ขั้นตอนต่อไปคืออัพโหลดเข้าบอร์ด โดยการลากไฟล์ firmware.uf2 ไปวางในโฟลเดอร์ของบอร์ด โดยให้เปลี่ยนโหมดเป็น DFU ด้วยการกด Reset สองครั้งติดกันก่อน เมื่อโยนไฟล์ลงไปแล้ว ตัวบอร์ดจะอัพโหลดเข้ารอมและรีเซ็ตตัวเอง เพียงเท่านี้ทำให้พร้อมใช้งาน MicroPython
ทดสอบการทำงาน
ตัวอย่างโปรแกรมอ่านข้อมูลของบอร์ด เขียนได้ดังนี้
##################################################################################
import gc
import os
import sys
import time
import machine as mc
gc.enable()
gc.collect()
stat = os.statvfs('/flash')
block_size = stat[0]
total_blocks = stat[2]
free_blocks = stat[3]
rom_total = (total_blocks * block_size)
rom_free = (free_blocks * block_size)
rom_usage = (rom_total-rom_free)
print("Platform .......: {}".format(sys.platform))
print("Frequency ......: {}".format(mc.freq()))
print("ID .............: {}".format(mc.unique_id()))
print("Memoey")
print(" Total ......: {} bytes".format(gc.mem_alloc()+gc.mem_free()))
print(" Used .......: {} bytes".format(gc.mem_alloc()))
print(" Free .......: {} bytes".format(gc.mem_free()))
print("Flash ROM")
print(" Total ......: {} bytes".format(rom_total))
print(" Used .......: {} bytes".format(rom_usage))
print(" Free .......: {} bytes".format(rom_free))
ตัวอย่างผลลัพธ์ของการทำงานเป็นดังภาพที่ 3
สรุป
จากบทความนี้จะพบว่าการสร้าง MicroPython เพื่อใช้กับไมโครคอนโทรลเลอร์ SAM-D1 นั้นไม่ยุ่งยาก และติดตั้งได้สะดวกผ่านทางการใช้ boot loader แบบ UF2 ส่วนการเขียนโปรแกรมนั้น ใช้ภาษาไพธอนเหมือนกับไมโครคอนโทรลเลอร์อื่น ๆ แต่รายละเอียดขาและการใช้ฟังก์ชันต่าง ๆ จะแตกต่างกันออกไปและ สุดท้ายขอให้สนุกกับการเขียนโปรแกรมครับ
แหล่งอ้างอิง
(C) 2020-2022, โดย อ.ดนัย เจษฎาฐิติกุล/อ.จารุต บุศราทิจ
ปรับปรุงเมื่อ 2021-11-26, 2022-01-27