MicroPython for RP2040 Pico

แนะนำการใช้งานไมโครไพธอนสำหรับบอร์ด Raspberry Pi Pico ที่ใช้ตัวประมวลผล RP2040 -- เริ่มต้นเขียนเมื่อวันที่ 12 กุมภาพันธ์ พ.ศ. 2564

บอร์ดไมโครคอนโทรลเลอร์ Raspberry Pi Pico

บริษัท Raspberry Pi (Trading) Ltd. (Cambridge, UK) ได้เปิดตัวบอร์ดไมโครคอนโทรลเลอร์ที่มีชื่อว่า "Raspberry Pi Pico" ในวันที่ 21 มกราคม พ.ศ. 2564 ซึ่งถือว่าเป็นก้าวแรกในทิศทางการพัฒนาฮาร์ดแวร์ที่ไม่ใช่คอมพิวเตอร์บอร์ดเดี่ยว (Single-Board Computer: SBC) และได้มีการตั้งราคาไว้ที่ $4 จึงเป็นบอร์ดประเภท Low-Cost (ราคาจำหน่ายในประเทศไทยจะอยู่ราว ๆ ไม่เกิน 200 บาท)

รายละเอียดเกี่ยวกับบอร์ด RPi Pico มีดังนี้ (Board Specifications)

  • RP2040 microcontroller chip designed by Raspberry Pi (UK)

  • Dual-core Arm Cortex M0+ processor, clock running up to 133 MHz

  • 264KB of SRAM, and 2MB of on-board Flash memory

  • USB 1.1 with device and host support

  • Low-power sleep and dormant modes

  • Drag-and-drop programming using mass storage over USB

  • 26 × multi-function GPIO pins (Pico I/O voltage is fixed at 3.3V!!!)

  • 2 × SPI, 2 × I2C, 2 × UART, 3 × 12-bit ADC, 16 × controllable PWM channels

  • On-chip temperature sensor

  • Accelerated floating-point libraries on-chip

  • 8 × Programmable I/O (PIO) state machines for custom peripheral support

หน่วยความจำ SRAM ขนาด 264 KB ก็คือว่า คอนข้างมากสำหรับไมโครคอนโทรลเลอร์ 32 บิต และความจุของ Flash ขนาด 2 MB ก็เหมาะสำหรับการสร้าง Flash-based File System เอาไว้ใช้งาน

Source: https://datasheets.raspberrypi.org/pico/pico_datasheet.pdf

รหัส “RP2040” มีความหมายอย่างไร ?

  • RP = Raspberry Pi

  • 2 = Dual Core

  • 0 = Arm Cortex M0+

  • 4 = floor(log2(264 KB/16 KB)) — 264 KB SRAM

  • 0 = floor(log2(0 / 16KB)) — no on-chip Flash memory

Ref.: https://www.raspberrypi.org/documentation/pico/getting-started/

ในเชิงฮาร์ดแวร์ เราอาจกล่าวเกี่ยวกับบอร์ด Raspberry Pi Pico (RP2040) ได้ดังนี้

  • ตัวประมวลผลแบบสองแกน: ภายในชิปไมโครคอนโทรลเลอร์ RP2040 มีซีพียูตระกูล ARM Cortex M0+ อยู่สองแกน (Dual-Core) ความเร็วปรกติ 48 MHz แต่ก็สามารถปรับโดยซอฟต์แวร์ให้ รันได้สูงถึง 133 MHz

  • ไม่มี on-chip Flash และใช้ Serial Flash ภายนอก: บอร์ด RPi Pico มี 2 MB external Quad-SPI Flash (สูงสุด 16 MB)

  • มาพร้อมกับ UF2 Bootloader ใน ROM ทำให้ง่ายต่อการอัปโหลดโปรแกรมลงไปในหน่วยความจำของบอร์ด

  • ตัวประมวลผลที่รองรับการใช้งาน Native USB: สามารถโปรแกรมให้รองรับการทำงานแบบ USB CDC จึงไม่จำเป็นต้องใช้ USB-to-Serial Chip (เช่น CP210x, CH34x) และรองรับ USB MSC (Mass Storage) เป็นต้น

  • ใช้ SWD (Serial-Wire Debug) สำหรับ Flashing / In-Circuit Debugging

  • รับอินพุตแรงดันไฟเลี้ยงสำหรับบอร์ดได้จากขา VUSB / VSYS: ขา 5V (VSUB) หรือขา VSYS (รับแรงดันไฟฟ้าในช่วงกว้าง ตัังแต่ 1.8V ถึง 5.5V)

  • มีวงจรประเภท Programmable I/O (PIO) จำนวน 2 ชุด แต่ละวงจรประกอบด้วยวงจรหน่วยย่อยที่ทำงานแบบ State Machine อีก 4 ชุด เหมาะสำหรับงานประเภท Real-Time I/O

  • เขียนโปรแกรมได้โดยใช้ภาษา C/C++ และ MicroPython / CircuitPython ในเบื้องต้น

การติดตั้งไมโครไพธอนสำหรับ RPi Pico

ผู้พัฒนาไมโครไพธอน (Damien George) ได้พัฒนาโค้ดไมโครไพธอนให้สามารถใช้ได้กับ RP2040 และเรียก MicroPython port (เริ่มต้นที่เวอร์ชัน v1.13) นี้ว่า "rp2"

การติดตั้งเฟิร์มแวร์สำหรับไมโครไพธอนไปยังบอร์ด RPi Pico ก็ทำได้ไม่ยาก มีขั้นตอนดังนี้

1) ดาวน์โหลดไฟล์ .uf2 (เช่น ไฟล์pico_micropython_20210121.uf2) มายังเครื่องผู้ใช้ และสามารถเลือกไฟล์ล่าสุดได้จาก https://micropython.org/download/rp2-pico/

2) กดปุ่ม BOOTSEL บนบอร์ด RPi Pico ค้างไว้ จากนั้นเสียบสาย microUSB เชื่อมต่อกับคอมพิวเตอร์ของผู้ใช้ แล้วปล่อยปุ่ม BOOTSEL

3) จากนั้นจะมองเห็น USB Drive ในคอมพิวเตอร์ ให้ลากไฟล์ .uf2 ไปใส่ลงในไดรฟ์ดังกล่าว แล้วรอให้บอร์ด RPi Pico รีเซตการทำงานใหม่อีกครั้ง

เมื่อได้ติดตั้งไฟล์ไมโครไพธอนไปยังบอร์ด RPi Pico แล้วก็สามารถใช้โปรแกรมอย่างเช่น Thonny IDE เชื่อมต่อกับบอร์ด RPi Pico และเริ่มต้นการเขียนโปรแกรม

โค้ดตัวอย่าง: การทำให้ LED ที่อยู่บนบอร์ด ซึ่งตรงกับขา GPIO-25 (GP25) กระพริบได้โดยการเปลี่ยนสถานะลอจิก High และ Low สลับไปเรื่อย ๆ

import machine
import utime

# use onboard LED
led = machine.Pin(25, machine.Pin.OUT)
try: 
    while True:
        state = not led.value()
        led.value( state )
        print('LED state:', state)
        utime.sleep(0.5)
except KeyboardInterrupt:
    pass
led.value(0) # turn off LED

แหล่งข้อมูลและเอกสารอ้างอิง

กล่าวสรุป

บอร์ด RPi Pico มีจุดเด่นหลายประการ และราคาก็ไม่แพง แม้ว่าจะไม่รองรับการเชื่อมต่อกับระบบเครือข่าย เช่น Wi-Fi หรือ Bluetooth ถ้าไม่มีโมดูลเสริม แต่ก็ถือว่าเป็นอีกหนึ่งตัวเลือกสำหรับผู้ที่สนใจจะลองใช้บอร์ดไมโครคอนโทรลเลอร์ที่มีตัวประมวลผลตระกูล ARM Cortex-M Series และนำมาเขียนโค้ดไมโครไพธอน หรือภาษา C/C++

เผยแพร่ภายใต้ลิขสิทธิ์ Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)

Last updated