Seeed K.K.の中井です。
Seeed XIAO RP2040とSeeeduino XIAO Expansion boardを組み合わせてMicroPythonで動作確認をしてみたので、参考までにそれらのスクリプトを掲載したいと思います。
この記事で動作確認に使用したファームウェアは、
MicroPython v1.18 on 2022-01-17; Raspberry Pi Pico with RP2040
です。動作確認時の最新版です。
バージョンが違う場合には記載のコードから多少の変更が必要な場合がありますのでご注意ください。
https://micropython.org/download/rp2-pico/
サンプル集
Wikiの下の方からMicroPythonのサンプル集をダウンロードすることができます。参考までにコードを確認してみるのも良いかもしれません。
https://files.seeedstudio.com/wiki/XIAO-RP2040/img/micropython/XIAO-RP2040-MicroPython-Grove.zip
収録されているライブラリとそれに対応するGroveモジュールは下記です。
ライブラリ | Groveモジュール |
---|---|
Acc_Adxl345.py | Grove - ADXL345 - 3-Axis Digital Accelerometer(±16g) |
buzzer.py | Grove - Buzzer |
dht11.py | Grove - Temperature & Humidity Sensor (DHT11) |
dht20.py | Grove - Temperature & Humidity Sensor V2.0 (DHT20) |
lcd1602.py | Grove - 16x2 LCDなど |
servo.py | Grove - Servo |
ssd1306.py | Grove - OLED Display 0.96" (SSD1315) など |
ws2812.py | Grove - RGB LED (WS2813 Mini)など |
例えばssd1306.py
なんかはExpansion boardを使用する場合にも利用することができます。また、ライブラリ以外にもexample/
の下に実装例が収録されています。
XIAO RP2040
XIAO RP2040のRGB LED
Wikiにも動かし方が掲載されているので詳細は割愛しますが、ポイントとしてはws2812.py
をXIAO RP2040に転送しておく必要があります。ws2812.py
はWikiからダウンロードするか、上述したサンプル集のlibrary/ws2812.py
にも収録されています。
from ws2812 import WS2812 from machine import Pin import time switch = Pin(11, Pin.OUT, value=1) led = WS2812(12, 1) while True: colors = ((255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 255)) for color in colors: led.pixels_set(0, color) led.pixels_show() time.sleep(1.0)
XIAO RP2040のUSER LED
USER LEDは3色のLEDにそれぞれ下記信号がつながっています。
LED COLOR | Pin(n) |
---|---|
RED | 17 |
GREEN | 16 |
BLUE | 25 |
from machine import Pin, PWM import time ledb = PWM(Pin(25)) ledb.freq(100) while True: for i in list(range(0x100)) + list(range(0x100, 0, -1)): ledb.duty_u16(i * 0x100) time.sleep(0.005)
Expansion board
Seeeduino XIAO Expansion boardにXIAO RP2040を接続した時のピンマップです。MicroPythonで使用するピン番号(Px)を入れたので多少わかりやすくなったかなと思います。
Expansion boardのRTC
Expansion boardには、RTCとしてNXP PCF8563が採用されています。
PCF8563用のドライバpcf8563.py
は下記からダウンロードしてXIAO RP2040に保存しておく必要があります。
https://github.com/lewisxhe/PCF8563_PythonLibrary/blob/master/pcf8563.py
from pcf8563 import PCF8563 from machine import Pin, I2C import time i2c = I2C(1, scl=Pin(7), sda=Pin(6), freq=200000) rtc = PCF8563(i2c) rtc.set_datetime((22, 4, 1, 9, 30, 0, 6)) while True: print('{0:02d}/{1:02d}/{2:02d} {4:02d}:{5:02d}:{6:02d}'.format(*rtc.datetime())) time.sleep(1.0)
Expansion boardのボタン
ボタンに接続されている信号P27
はハード的にプルアップされていないようなので、ソフトウェアで設定する必要があります。
from machine import Pin def handler(p): status = 'Released' if p.value() == 1 else 'Pushed' print(status) button = Pin(27, Pin.IN, Pin.PULL_UP) button.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=handler) while True: pass
ボタンを押すとPushedと表示され、離すとReleasedと表示されます。
Expansion boardのブザー
下記のコードはビープ音を鳴らすものですが、サンプル集にはexample/music.py
に音階を鳴らす例もあります。
from machine import Pin, PWM import time buzzer = PWM(Pin(29, Pin.OUT)) buzzer.freq(440) buzzer.duty_u16(32768) # duty比を50%に設定 time.sleep(1.0) buzzer.deinit()
Expansion boardのOLED
サンプル集に含まれるexample/oled.py
とlibrary/ssd1306.py
で動作するのですがHello World!
が表示されるだけなので、
表示に多少の変化がつくようにRP2040内蔵RTCを使って時間を表示するコードにしてみました。
ssd1306.py
はXIAO RP2040に保存しておく必要があります。
from ssd1306 import SSD1306_I2C from machine import Pin, I2C, RTC import time i2c = I2C(1, scl=Pin(7), sda=Pin(6), freq=200000) oled = SSD1306_I2C(128, 64, i2c) rtc = RTC() rtc.datetime((2022, 4, 1, 6, 9, 30, 0, 0)) while True: oled.fill(0) oled.text('{0:04d}/{1:02d}/{2:02d}'.format(*rtc.datetime()),0,0) oled.text('{4:02d}:{5:02d}:{6:02d}'.format(*rtc.datetime()),0,10) oled.show() time.sleep(0.1)
Expansion boardのマイクロSD
Expansion boardの回路図をみるとmicro SDスロットに接続されているCSピンはD2/P28
でした。
SD Card over SPI用のドライバsdcard.py
を下記からダウンロードしてXIAO RP2040に保存しておく必要があります。
https://github.com/micropython/micropython/blob/v1.18/drivers/sdcard/sdcard.py
from machine import Pin, SPI import os, sdcard spi = SPI(0, sck=Pin(2), mosi=Pin(3), miso=Pin(4)) sd = sdcard.SDCard(spi, Pin(28)) os.mount(sd, '/sd') os.chdir('sd') print(os.listdir()) print() print(open('README.txt').read())
PCなどでmicroSDをFAT32にフォーマットし、README.txtを保存したmicro SDカードを接続して実行するとその内容が表示されます。
変更履歴
日付 | 変更者 | 変更内容 |
---|---|---|
2022/4/15 | mnakai | 作成 |
2023/2/17 | mnakai | sdcard.pyのリンクを変更 |