RP2040-Zero で始める MicroPython プログラミング【サンプルコード付き】」

【MicroPython入門】RP2040-ZeroでGPIO・通信を制御する方法
スポンサーリンク

RP2040-Zero は、小型ながら高性能な Raspberry Pi RP2040 を搭載したマイコンボードでアマゾンなどで、互換品が安く購入することができます。MicroPython を使えば、簡単に LED を点滅させたり、センサーを制御したりすることができます。本記事では、RP2040-Zero に MicroPython をインストールする方法から、GPIO の基本操作、PWM、I2C などの通信機能まで、サンプルコードとともに詳しく解説します。初心者の方にもわかりやすく説明しているので、ぜひ参考にしてみてください!

スポンサーリンク

RP2040-Zero とは?

RP2040-Zero の概要と特徴

RP2040-Zero は、Seeed Studio が開発した Raspberry Pi RP2040 を搭載する小型マイコンボードです。Raspberry Pi Pico と同様に デュアルコア Cortex-M0+(133MHz) を搭載し、264KB の SRAM と 2MB のフラッシュメモリ を備えています。

このボードの最大の特徴は、コンパクトな 「XIAO」シリーズのフォームファクタ を採用しており、狭いスペースにも組み込みやすいことです。また、USB Type-C ポートを搭載し、開発や書き込みがより便利になっています。

  • デュアルコア ARM Cortex-M0+(最大 133MHz)
  • 264KB SRAM / 2MB Flash
  • USB Type-C ポート搭載(データ通信・電源供給)
  • GPIO 13本(うち 3 本は ADC 対応)
  • I2C / SPI / UART / PWM / ADC に対応
  • 3.3V ロジックレベル(5V トレラントなし)
  • 超小型(20×17.5mm)で軽量設計

Raspberry Pi Pico との違い

項目RP2040-ZeroRaspberry Pi Pico
サイズ20 × 17.5 mm51 × 21 mm
USB ポートUSB Type-CMicro USB
GPIO ピン数13 本26 本
フラッシュメモリ2MB2MB(Pico W は 4MB)
電圧3.3V(5V トレラントなし)3.3V(GPIO一部5Vトレラント)
ADC ピン3 本3 本
無線通信なしPico W は Wi-Fi 搭載
拡張性小型・省スペース向け標準的なブレッドボード向け

RP2040-Zero は、コンパクトで USB Type-C を採用した使いやすい設計になっており、サイズ重視のプロジェクトに最適です。一方で、拡張性や GPIO の多さを求めるなら Raspberry Pi Pico も良い選択肢になります。

MicroPython のインストール

ファームウェアの書き込み手順

公式サイトから .uf2 ファイルをダウンロード
RP2040-Zero は Raspberry Pi RP2040 を搭載しているため、MicroPython のファームウェアは Raspberry Pi Pico 用(Pico / Pico W 用)の .uf2 ファイル を使用できます。
RP2040-Zero の BOOTSEL ボタンを押しながら USB 接続
RPI-RP2 と表示されるドライブに .uf2 ファイルをドラッグ&ドロップ

回路図

今回の回路図です。

ピンの指定方法

RP2040-Zero の GPIO は GP0 ~ GP28 を使用可能です(GP23GP24 は USB 接続時に使用)。
MicroPython では、machine モジュールを使って GPIO を制御します。

LED の点滅

ボード上の LED は GP25 に接続されています。

from machine import Pin
import time
led = Pin(25, Pin.OUT)  # GP25を出力モードで設定
while True:
    led.toggle()
    time.sleep(0.5)  # 0.5秒ごとに点滅

ボタン入力を読む

GPIO を入力モードに設定し、プルアップ抵抗を有効にしてボタンの状態を読むサンプルです

from machine import Pin
import time
button = Pin(15, Pin.IN, Pin.PULL_UP)  # GP15 にボタン接続
led = Pin(25, Pin.OUT)  # 内蔵 LED
while True:
    if button.value() == 0:  # ボタンが押されたら
        led.on()
    else:
        led.off()
    time.sleep(0.1)

PWM を使った LED のフェードイン・アウト

from machine import Pin, PWM
import time
led = PWM(Pin(25))  # GP25 に PWM 出力
led.freq(1000)  # PWM 周波数を 1kHz に設定
while True:
    for duty in range(0, 65536, 1024):  # 0 から 65535 まで増加
        led.duty_u16(duty)
        time.sleep(0.01)
    for duty in range(65535, 0, -1024):  # 65535 から 0 まで減少
        led.duty_u16(duty)
        time.sleep(0.01)

I2C の使用(BME280 などのセンサー、AQM1602)

RP2040-Zero では GP4 を SDAGP5 を SCL として I2C を使えます。

from machine import Pin, I2C
i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=400000)  # I2C0: SCL=GP5, SDA=GP4
devices = i2c.scan()  # 接続されている I2C デバイスのアドレスを取得
print("I2C デバイス:", devices)

AQM1602のサンプルプログラム

from machine import Pin, I2C
import time
# I2Cの初期化(I2C0を使用)
i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=100000)
# AQM1602 の I2C アドレス(一般的には 0x3E)
LCD_ADDR = 0x3E
# コマンド送信
def lcd_command(cmd):
    i2c.writeto(LCD_ADDR, bytearray([0x00, cmd]))  # 0x00 はコマンド送信
# データ送信
def lcd_data(data):
    i2c.writeto(LCD_ADDR, bytearray([0x40, data]))  # 0x40 はデータ送信
# LCD 初期化
def lcd_init():
    time.sleep(0.05)  # 電源投入後の待機
    lcd_command(0x38)  # Function set: 8-bit, 2-line
    lcd_command(0x39)  # Function set: 8-bit, 2-line, IS=1
    lcd_command(0x14)  # Internal osc frequency
    lcd_command(0x70)  # Contrast set
    lcd_command(0x56)  # Power/ICON/Contrast control
    lcd_command(0x6C)  # Follower control
    time.sleep(0.2)  # 待機
    lcd_command(0x38)  # Function set: IS=0
    lcd_command(0x0C)  # Display ON, Cursor OFF
    lcd_command(0x01)  # Display clear
    time.sleep(0.002)  # クリア後の待機
# LCD に文字列を表示
def lcd_print(text):
    for char in text:
        lcd_data(ord(char))  # 1文字ずつ送信
# 実行
lcd_init()
lcd_print("Hello, AQM1602!")

ADC(アナログ入力)を読む

from machine import ADC, Pin
import time
# ADC0(GP26)を使用
adc = ADC(Pin(26))
# 3.3Vのリファレンス電圧を基準に電圧へ変換
conversion_factor = 3.3 / 65535
while True:
    raw = adc.read_u16()  # 16bitの値(0〜65535)
    voltage = raw * conversion_factor
    print("ADC値:", raw, "電圧:", round(voltage, 3), "V")
    time.sleep(1)

実行結果

まとめ

RP2040-Zero は、Raspberry Pi RP2040 を搭載しながらもコンパクトで手軽に使えるマイコンボードです。MicroPython を活用することで、初心者でも簡単に電子工作や IoT プロジェクトに取り組めます。本記事では、GPIO の基本から通信機能まで幅広く紹介しました。さらに高度なプロジェクトに挑戦する際には、無線通信モジュールやディスプレイを組み合わせることで、より実用的なデバイス開発が可能になります。ぜひ、RP2040-Zero を使って、さまざまなアイデアを形にしてみてください!
追伸、残念ながらアマゾンで買った互換品は内部LEDを点滅させたりすることはできませんでした。

タイトルとURLをコピーしました