メインコンテンツまでスキップ

Seeed Studio XIAO RP2350 と MicroPython

Seeed Studio XIAO RP2350


XIAO RP2350 は、Raspberry Pi RP2350(150MHz で動作するデュアル Cortex-M33 コア、強化されたセキュリティと暗号化機能)をクラシックな XIAO フォームファクタに搭載したボードです。サイズはわずか 21×17.8mm で、19 本の多機能 GPIO、RGB LED、50μA の超低消費電力、バッテリー電源供給、バッテリー電圧の直接測定に対応したバッテリーマネジメントシステムを備えています。XIAO エコシステムのおかげで、XIAO RP2350 はディスプレイ、LED マトリクス、Grove モジュール、CAN Bus、Vision AI センサ、mmWave センサなど、幅広いアドオンと互換性があります。MicroPython、C、C++ をネイティブサポートしているため、XIAO RP2350 はスマート制御、ウェアラブル、DIY キーボードなどのコンパクトでバッテリー駆動のアプリケーションを作成したい、あらゆるレベルの開発者に最適です。

対応プラットフォーム

RP2350 を搭載した XIAO RP2350 は、Raspberry Pi が提供する MicroPython と C/C++ SDK をサポートしています。この柔軟性により、開発者はプロトタイピングや開発において、好みのプログラミング言語と環境を選択できます。

C/C++ SDKMicroPython
c-cpp logoMicroPython

はじめに▶️

attention

このページは主に MicroPython ユーザーに焦点を当てています。SDK プログラミングを学びたい方や上級ユーザーの方は、Raspberry Pi Pico-series C/C++ SDK から始めるとよいでしょう。このガイドでは、環境構築とサンプルコードの実行方法を説明しています。さらに、XIAO RP2350 に特化した手順については XIAO RP2350 with C/C++ SDK も参照してください。

ステップ 1:XIAO RP2350 に MicroPython をインストールする

XIAO RP2350 に MicroPython ファームウェアをインストールするには、次の手順に従ってください。

ステップ 1.1. MicroPython ファームウェアをダウンロード:

  • MicroPython Downloads ページに移動します。
  • XIAO RP2350 と互換性のある最新の .uf2 ファームウェアファイルをダウンロードします。
ヒント
  1. デフォルトのファームウェアは ARM アーキテクチャ向けです。RISC-V を使用したい場合は、リンク先の対応するファームウェアバージョンを使用してください。

  2. 古いファームウェアにはさまざまなソフトウェア脆弱性が含まれている可能性があるため、必ず最新バージョンのファームウェアを使用してください。

ステップ 1.2 BOOTSEL モードに入る:

XIAO RP2350 を BOOTSEL モードにするには、次の 2 つの方法のいずれかを使用できます。

  1. BOOT ボタンを押し続ける:
    XIAO RP2350 がパソコンに接続されていない状態で、BOOT ボタンを押し続けます
  2. パソコンに接続する:
    BOOT ボタンを押したまま、USB ケーブルを使って XIAO RP2350 をパソコンに接続します。
  3. BOOT ボタンを離す:
    ボードがパソコンに接続されたら、BOOT ボタンを離します。XIAO RP2350 は BOOTSEL モードになり、パソコンからリムーバブルストレージデバイスとして認識されます。
Hold Boot-> Plug in Cable-> Release Boot

ステップ 1.3. ファームウェアをインストールする:

  • ダウンロードした .uf2 ファイルを、XIAO RP2350 のリムーバブルストレージドライブにドラッグ&ドロップします。
  • ファイルのコピーが完了すると、ボードは自動的に再起動し、ファームウェアのインストールが完了します。

ステップ 2:Thonny IDE をインストールする

about MicroPython

MicroPythonPython に似たインタプリタ言語です。ただし Python と異なり、MicroPython はハードウェア上(ベアメタル)で直接動作し、コマンドを即座に実行できる対話型プロンプト(REPL)や、内蔵ファイルシステムからスクリプトを実行・インポートする機能を提供します。

XIAO RP2350 ボードに接続して Python コードの作成と実行を始めるには、minicom、PuTTY、electerm、warp など、シリアル接続をサポートする任意のターミナルツールを使用できます。よりユーザーフレンドリーな体験を求める場合は、使いやすさ、統合機能、初心者に優しいインターフェースを備えた Thonny を使用することをおすすめします。これにより、デバイス上で直接 Python コードの作成と実行を楽しむことができます。

Thonny IDE は、MicroPython 開発に最適な初心者向け Python エディタです。インストール方法は次のとおりです。

  1. Thonny をダウンロード:

    • Thonny Download Page にアクセスします。
    • お使いのオペレーティングシステム(Windows、macOS、Linux)に合ったインストーラを選択してダウンロードします。
  2. Thonny をインストール:

    • ダウンロードしたインストーラを実行します。
    • 画面の指示に従ってインストールを完了します。
  3. Thonny を MicroPython 用に設定:

    • Thonny IDE を起動します。
    • Thonny ウィンドウの右下を確認します。
    • interpreter の選択エリアをクリックします。
    • ドロップダウンから 'MicroPython (RP2040)' を選択します。
    • 正しい Port が選択されていることを確認します。通常、Thonny が自動検出します。

これで、Thonny IDE を使って XIAO RP2350 に MicroPython コードを書き込み、実行する準備が整いました。

デバイスに MicroPython の準備ができたら、簡単なプロジェクトから始めましょう。

点滅させてみよう! ✨

LED を点滅させることは、多くの人が最初に実行するプログラムです。XIAO RP2350 でも同様です。

注記

XIAO RP2350 上の黄色い LED である USER LED は、回路図によると GPIO25/D19 に接続されています。 すべての XIAO ファミリーボードにおいて、USER LEDlow level に設定すると点灯し、high level に設定すると消灯します。

from machine import Pin # Import the Pin class from the machine module
from time import sleep # Import the sleep function from the time module

# Initialize GPIO25 as an output pin, which controls the USER LED
led = Pin(25, Pin.OUT)

# Turn off the LED initially
led.value(1) # led.on() -> high level -> light off
sleep(0.5) # Wait for 0.5 seconds

# Turn on the LED
led.value(0) # led.off() -> low level -> light on
sleep(0.5) # Wait for 0.5 seconds

# Enter an infinite loop
while True:
# Toggle the LED state (on to off or off to on)
led.toggle()
# Print the current state of the LED
print(f"LED {'ON' if led.value() == 0 else 'OFF'}")
sleep(0.5) # Wait for 0.5 seconds before the next toggle

下の画像のようにコードを Thonny IDE にコピーしたら、Run current script ボタンをクリックするか、F5 キーを押すだけです。これでコードスニペットが実行され、XIAO RP2350 上の LED が点滅し始めるのが確認できます。

RGB LED で遊ぶ

XIAO RP2350 には、MicroPython を使って制御できる RGB LED が内蔵されています。以下は、さまざまな色を順番に切り替えるサンプルです:

import array, time, random
from machine import Pin
import rp2

NUM_LEDS = 1
LED_PIN = 22 # PICO_DEFAULT_WS2812_PIN
POWER_PIN = 23 # PICO_DEFAULT_WS2812_POWER_PIN

# Global brightness variable (0.0 to 1.0)
BRIGHTNESS = 0.1

@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
def ws2812():
T1 = 2
T2 = 5
T3 = 3
wrap_target()
label("bitloop")
out(x, 1) .side(0) [T3 - 1]
jmp(not_x, "do_zero") .side(1) [T1 - 1]
jmp("bitloop") .side(1) [T2 - 1]
label("do_zero")
nop() .side(0) [T2 - 1]
wrap()

# Set up the power pin
power_pin = Pin(POWER_PIN, Pin.OUT)
power_pin.value(1) # Turn on power to the LED

# Create the StateMachine with the ws2812 program, outputting on LED_PIN
sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(LED_PIN))

# Start the StateMachine, it will wait for data on its FIFO.
sm.active(1)

def set_led_color(color):
sm.put(array.array("I", [color]), 8)

def random_color():
return random.randint(0, 255) | (random.randint(0, 255) << 8) | (random.randint(0, 255) << 16)

def interpolate(color1, color2, factor):
r1, g1, b1 = color1 & 255, (color1 >> 8) & 255, (color1 >> 16) & 255
r2, g2, b2 = color2 & 255, (color2 >> 8) & 255, (color2 >> 16) & 255
r = int(r1 + factor * (r2 - r1))
g = int(g1 + factor * (g2 - g1))
b = int(b1 + factor * (b2 - b1))
return (b << 16) | (g << 8) | r

def apply_brightness(color, brightness):
r, g, b = color & 255, (color >> 8) & 255, (color >> 16) & 255
r = int(r * brightness)
g = int(g * brightness)
b = int(b * brightness)
return (b << 16) | (g << 8) | r

print("Starting random color transitions with adjustable brightness...")

# Main loop
current_color = random_color()
while True:
next_color = random_color()
for i in range(100): # 100 steps for smooth transition
transition_color = interpolate(current_color, next_color, i / 100)
final_color = apply_brightness(transition_color, BRIGHTNESS)
set_led_color(final_color)
time.sleep_ms(20) # Adjust this value to change transition speed
current_color = next_color

# Optionally, you can change the brightness here for demo purposes
# BRIGHTNESS = random.random() # This will set a random brightness each cycle

バッテリーと電源管理

追加のコンポーネントなしでバッテリー電圧を読み取ることは可能でしょうか?はい、XIAO RP2350 ならこれまで以上に簡単です。以前の XIAO ファミリー、たとえば XIAO ESP32C3 では、バッテリー電圧を読み取るには抵抗を使って手動で A0 に接続する必要がありました。

しかし XIAO RP2350 では、このプロセスが簡略化されています。A3/GPIO29 ピンを直接使用してバッテリー電圧レベルを読み取ることができ、設計と開発を効率化できます。バッテリーレベルの読み取りを有効にするには、GPIO19 ピンを High に設定する必要があることを忘れないでください。

Pico SDK を使ってバッテリー電圧を読み取るには、次のコードスニペットに従ってください:

from machine import Pin, ADC
import time

# Function to initialize the GPIO pin for enabling battery voltage reading
def init_gpio():
enable_pin = Pin(19, Pin.OUT)
enable_pin.value(1) # Set the pin to high to enable battery voltage reading

def main():
print("ADC Battery Example - GPIO29 (A3)")

init_gpio() # Initialize the enable pin
adc = ADC(Pin(29)) # Initialize the ADC on GPIO29

conversion_factor = 3.3 / (65535) # Conversion factor for 12-bit ADC and 3.3V reference

while True:
result = adc.read_u16() # Read the ADC value
voltage = result * conversion_factor * 2 # Calculate the voltage, considering the voltage divider (factor of 2)
print("Raw value: 0x{:03x}, voltage: {:.2f} V".format(result, voltage))
time.sleep(0.5) # Delay for 500 milliseconds

if __name__ == '__main__':
main()

拡張性とアプリケーション

The XIAO series には、学習や活用のための豊富な周辺機器および周辺アクセサリが用意されています。カラフルでインタラクティブな表示ができるスクリーンや、明るくシンプルな RGB ライトを備えた統合ボードなど、さまざまなものがあり、あなたに使われるのを待っています。

XIAO ファミリーの一員として、XIAO RP2350 も同様です。もちろん、引き出された追加ピンをより有効に活用するために、新しい peripherals and boards が今後も続々と登場し、その性能を余すところなく引き出していきます。

  • 🌟 Expanding with Accessories
    ディスプレイや LED マトリクスから Grove モジュールやセンサーまで、XIAO ファミリーと互換性のある多彩なアドオンやモジュールを発見し、それらがどのようにプロジェクトを強化できるかを学びましょう。

コミュニティと学習

さらに、活気ある Raspberry Pi コミュニティに飛び込んで、知識を広げたり新しいプロジェクトアイデアを見つけたりしましょう。コミュニティが共有するリソース、フォーラム、チュートリアルを活用して、XIAO RP2350 の体験をより充実させてください。Seeed Studio Wiki に加えて、学習におすすめの場所をいくつかご紹介します:

  • Raspberry Pi Documentation: RP2350 に関する信頼性が高く最新の情報を入手できます。
  • Raspberry Pi Forums: 他の愛好家と交流し、質問したり、プロジェクトを共有したりできます。
  • XIAO GitHub Repository: 公式 XIAO リポジトリを探索して、より集約されたドキュメントや、私たちのチームとのさらなる交流を行いましょう。Join Us!
  • r/embedded on Reddit: 組み込みシステムのコミュニティに参加し、知見を共有し、さまざまなトピックについて議論しましょう。
  • Pico Topic on GitHub: Pico に関連するリポジトリやディスカッションを探索できます。
  • Hackster.io: XIAO や Raspberry Pi を含むさまざまなハードウェアプラットフォームに関するプロジェクトやチュートリアルを見つけましょう。
  • Instructables: XIAO やその他のハードウェアを使った DIY プロジェクトやステップバイステップのガイドを探せます。
  • Element14 Community: エレクトロニクスや組み込みシステムに関するディスカッション、ウェビナー、プロジェクトに参加しましょう。

さらに、あなたのプロジェクトを私たちの Seeed Studio DiscordSeeed Studio Forum で共有することも、いつでも大歓迎です。これらのプラットフォームは、他のメイカーとつながり、フィードバックを得て、インスピレーションを見つけるための絶好の場を提供します。問題のトラブルシューティングの助けが必要なとき、最新の作品を披露したいとき、あるいは単に支え合うコミュニティの一員になりたいときなど、Seeed Studio の Discord と Forum は交流とコラボレーションに最適な場所です。

技術サポートと製品ディスカッション

弊社製品をお選びいただきありがとうございます。私たちは、製品をできるだけスムーズにご利用いただけるよう、さまざまなサポートを提供しています。お好みやニーズに合わせて選べる複数のコミュニケーションチャネルをご用意しています。

Loading Comments...