> For the complete documentation index, see [llms.txt](https://think-embedded.gitbook.io/micropython/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://think-embedded.gitbook.io/micropython/micropython-for-rp2040-pico.md).

# MicroPython for RP2040 Pico

## บอร์ดไมโครคอนโทรลเลอร์ 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** เอาไว้ใช้งาน

![รูป: บอร์ด Raspberry Pi Pico มุมมองจาก Top View และ Bottom View ](/files/-MTAIEPd3pE5tu_ES6gQ)

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**

![](/files/-MTAIo_TbCi19LB1En3s)

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

![รูป: Pico Pinout Diagram](/files/-MTAIXr6CnpLTO1L569z)

ในเชิงฮาร์ดแวร์ เราอาจกล่าวเกี่ยวกับบอร์ด **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)&#x20;
* มาพร้อมกับ **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 (**&#xE23;ับแรงดันไฟฟ้าในช่วงกว้าง ตัังแต่ **1.8V** ถึง **5.5V)**&#x20;
* มีวงจรประเภท **Programmable I/O (PIO)** จำนวน 2 ชุด แต่ละวงจรประกอบด้วยวงจรหน่วยย่อยที่ทำงานแบบ **State Machine** อีก 4 ชุด เหมาะสำหรับงานประเภท **Real-Time I/O**
* เขียนโปรแกรมได้โดยใช้ภาษา **C/C++** และ [**MicroPython**](https://github.com/raspberrypi/micropython/) **/** [**CircuitPython**](https://circuitpython.org/board/raspberry_pi_pico/) ในเบื้องต้น

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

ผู้พัฒนาไมโครไพธอน (**Damien George**) ได้พัฒนาโค้ดไมโครไพธอนให้สามารถใช้ได้กับ **RP2040** และเรียก **MicroPython port**  (เริ่มต้นที่เวอร์ชัน **v1.13**) นี้ว่า "[**`rp2`**](https://github.com/raspberrypi/micropython/tree/pico/ports/rp2)" &#x20;

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

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

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

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

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

![](/files/-MTARDSWf1w5aJprEdAR)

![รูป: หน้าเว็บสำหรับดาวน์โหลดไฟล์ .uf2](/files/-MUgubs2uid15eFXItCX)

![รูป: การเขียนและรันโค้ดตัวอย่างสำหรับไมโครไพธอน](/files/-MTASA5BbSksndByTZNz)

![รูป: ตัวอย่างการตั้งค่าใน Thonny IDE เพื่อเชื่อมต่อกับบอร์ด RPi Pico](/files/-MTAQbI8omEGmcqQ1HtF)

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

```python
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
```

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

* ไฟล์โค้ดตัวอย่างสาธิตการทำงานไมโครไพธอนสำหรับ **RP2040:** \
  [https://github.com/raspberrypi/pico-micropython-examples ](<https://github.com/raspberrypi/pico-micropython-examples&#xD;&#xA;>)
* ไฟล์เอกสาร .**PDF** แนะนำการใช้งาน **MicroPython API / SDK:** \
  <https://datasheets.raspberrypi.org/pico/sdk/pico_python_sdk.pdf>
* ไฟล์เอกสาร .**PDF** สำหรับ **RP2040 Datasheet:** \
  <https://datasheets.raspberrypi.org/rp2040/rp2040_datasheet.pdf>
* ไฟล์เอกสาร .**PDF** สำหรับ **Pico Datasheet:** \
  <https://datasheets.raspberrypi.org/pico/pico_datasheet.pdf>

  [  ](<https://github.com/raspberrypi/pico-micropython-examples&#xD;&#xA;>)

## กล่าวสรุป

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

{% hint style="info" %}
**เผยแพร่ภายใต้ลิขสิทธิ์**\
**Attribution-ShareAlike 4.0 International (**[**CC BY-SA 4.0**](https://creativecommons.org/licenses/by-sa/4.0/)**)**
{% endhint %}
