こんにちは、あろっちです。
Seeed Studio XIAO RP2040を入手したので試してみました。
Seeed Studio XIAO RP2040は、MCUにRP2040を搭載したXIAOで、Seeeduino XIAOとピン配置/形状に互換性があるのが特徴です。
フラッシュメモリの容量(2MB)などRaspberry Pi Picoに近いスペックに見受けられます。

本記事ではArduino(C/C++)で試してみます。
開発環境としてVSCodeを使うこともできます。
参考URL:


他のRP2040搭載Seeeduino XIAO互換のマイコンに、Adafruit QT Py RP2040がありますが、こちらは、フラッシュメモリ8MB、QTコネクタ搭載という特徴があります。
Adafruit QT Py RP2040については記事にしていますので、よろしければご覧ください。
Seeed Studio XIAO RP2350の記事を書きました。
Raspberry Pi Pico Wの記事を書きました。ぜひご覧ください。
RP2040搭載ボードまとめ記事(参考サイト)
Seeed XIAO BLE nRF52840 / Sense(参考サイト)
Seeed Studio XIAO ESP32C3(参考サイト)
スペック
- Seeeduino XIAO互換のピン配置/形状
- USB Type-C
- ユーザLED(RGB 3色)、RGB LED、電源LED
- リセットボタン
- ブートローダーセレクトボタン
- ソフトウェアは、Arduino、MicroPython、CircuitPythonをサポート
MCU | RP2040 デュアルコア ARM Cortex M0+プロセッサ、最大動作周波数 133 MHz |
フラッシュ メモリ | 2MB |
GPIO | 11 ・11xディジタル&PWM, 4xアナログ対応(12bit ADC) |
サイズ | 20×17.5×3.5mm |

現在のXIAOシリーズの正式名称について
ピン配列


GPIOのピン番号は、FRONTのMicropythonで示された番号(Pxx)です。
LED | GPIO(ピン番号) |
---|---|
LED(赤, TX) | 17 |
LED(緑, RX) | 16 |
LED(青, ユーザLED) | 25 |
RGB LED_POWER | 11 |
RGB LED | 12 |
RGB LEDを使用するには
RGB LEDを使用する場合、電源であるGPIO11をHIGHに引き上げる必要があります。
pinMode(11, OUTPUT);
digitalWrite(11, HIGH);
Seeed XIAO RP2040ボードには、RGB LED用の定数(NEOPIXEL_POWER)が定義されていて、この定数を使って次のようにHIGHにできます。
pinMode(NEOPIXEL_POWER, OUTPUT);
digitalWrite(NEOPIXEL_POWER, HIGH);
画像ギャラリー


1 x XIAO RP2040
2 x ピンヘッダ 7ピン
初回起動はこんな感じです。
ピンヘッダー実装後

他のXIAO系ボードと並べてみました。

現在のXIAOシリーズの正式名称について
USBマスストレージモード
「BOOTボタン」を押した状態で、「リセットボタン」を押すと、USBマスストレージモード(RPI-RP2)になります。
USBマスストレージモードの時に、PCからMicroPythonやCircuitPythonのファームウェアがインストールできます。
XIAO RP2040 with MicroPython

XIAO RP2040 with CircuitPython

MicroPythonでPicoインベーダーを再現するとこんな感じです。
XIAO 拡張ボードとGroveのボリュームを使っています。
電源にはリチウムイオンバッテリーを使ってみました。

Picoインベーダーについては以下の記事をご覧ください。
なお、市販のバッテリーはマイコン用と極性が反対ですが、極性は入れ替えられます。
以下の記事をご参照ください。
Arduinoボード設定
- Arduino IDEにボードを追加
※実施済みの場合、この手順は不要です。
事前にRaspberry Pi Pico/RP2040ボード(Arduino-Pico)を追加します。
追加方法は、以下の記事をご覧ください。
- Raspberry Pi Pico/RP2040ボード(Arduino-Pico)のインストール
[ツール] > [ボード] > [ボードマネージャ]をクリックし、検索ボックスに「rp2040」と入力し、[Raspberry Pi RP2040 Boards(バージョン1.13.2以降)]をインストールします。

- ボードの選択
[ツール] > [ボード] > [Raspberry Pi RP2040 Boards(Ver)※] > [Seeed XIAO RP2040]を選択します。
※(Ver)の表示はArduino IDE 1系のみ
- シリアルポートの選択
[ツール] > [シリアルポート]からXIAO RP2040が接続されているシリアルポートを選択します。
Chromebookなどシリアルポートから書き込みできない場合、手動でスケッチを書き込みできます。
サンプルプログラム(Arduinoスケッチ)
公式WikiサイトにArduinoの情報やサンプルスケッチがあります。

また、Arduino IDEにスケッチ例([ファイル] > [スケッチ例] > [Seeed XIAO RP2040用のスケッチ例])があります。
RGB LEDを試してみました
上記のXIAO RP2040 Wikiに掲載されているRGB LEDのスケッチを試してみました。
LEDをLチカしてみる
XIAO RP2040のユーザLEDはRGB3色あります。それぞれの色をLチカするスケッチを書いてみました。
ポイントとして、ユーザLEDは、HIGHで消灯、LOWで点灯となっています。※負論理
#define LED_COUNT 3
#define LED_RED 17
#define LED_GREEN 16
#define LED_BLUE 25
#define COLOR_REPEAT 2
uint8_t led[LED_COUNT] = {LED_RED, LED_GREEN, LED_BLUE};
uint8_t repeatCount = 0, ledCount = 0;
void setup()
{
for (int i = 0; i < LED_COUNT; i++)
{
pinMode(led[i], OUTPUT);
digitalWrite(led[i], HIGH); // LEDをOFFにする(HIGHでOFF)
}
}
void loop()
{
digitalWrite(led[ledCount], LOW); // LOWでON
delay(1000); // wait for a second
digitalWrite(led[ledCount], HIGH); // HIGHでOFF
delay(1000); // wait for a second
repeatCount++;
if (repeatCount >= COLOR_REPEAT)
{
repeatCount = 0;
ledCount++;
if (ledCount >= LED_COUNT)
{
ledCount = 0;
}
}
}
一撃入魂
BOOTボタンを押すと、1/2でRGB LEDがレインボーに光るというスケッチです。
後述の「XIAO 拡張ボードを試してみました」に掲載のスケッチを以下のように修正します。
117行目(入力ボタンをBOOTボタンになるよう修正します。)
// while (digitalRead(BTN) == HIGH)
while (!BOOTSEL)
{
以下、落選時と当選時の流れです。
QT Py RP2040のサンプルスケッチを試してみる
RGB LEDのピン番号は、QT Py RP2040のNeoPixelと同じということが分かりました。
ということで、試しにQT Py RP2040の以下の記事のサンプルスケッチを動かしてみます。
RGB LED Lチカ
「NeoPixelをLチカしてみる」に掲載しているスケッチを書き込みました。
このようにLチカできました。スケッチの修正は不要でした。
レインボー
「NeoPixelをレインボーに光らせてみる」に掲載のスケッチを書き込みました。
こちらもスケッチの修正は不要でした。
眩しいですね。
PWMでオーディオ再生してみました (ブレッドボード使用編)
後述の「PWMでオーディオ再生してみました」のtypewriterをブレッドボードで再現してみました。
ブザーは圧電スピーカー(秋月電子)を使用しています。
OLEDは0.96インチ I2C

PWMオーディオ出力ピンはA3(GPIO29)です。
ライブラリについては以下の記事をご覧ください。
XIAO 拡張ボードを試してみました
XIAO RP2040はXIAO 拡張ボードという便利なボードが使えます。
- OLEDディスプレイ
- RTC
- 拡張可能なメモリスペース
- パッシブブザー
- ユーザーボタン
- Groveコネクタ
- オンボードバッテリー管理チップなど
なにか試したい時によく使うボードですね。
使用例
なお、市販のバッテリーはマイコン用と極性が反対ですが、極性は入れ替えられます。
以下の記事をご参照ください。
PWMでオーディオ再生してみました
PWMオーディオライブラリを作ってみました。
ダウンロード&インストール方法は以下の記事をご参照ください。
スケッチ例 nt_se
スケッチ例はそのまま書き込みます。
こんな感じで再生されます。
スケッチ例 typewriter
スケッチ例はそのまま書き込みます。
キーボードショートカット(USB HIDキーボードデバイス)を再現してみました
ボタン(D1)を押すとWindowsデスクトップ表示がされるUSBキーボードを作成してみました。
#include <Keyboard.h>
#define BTN D1
#define LED LED_BUILTIN
void setup()
{
pinMode(BTN, INPUT_PULLUP);
pinMode(LED, OUTPUT);
Keyboard.begin();
}
void loop()
{
if (digitalRead(BTN) == LOW)
{
digitalWrite(LED, HIGH);
//Windowsキー(KEY_LEFT_GUI)+'D'の同時押しを再現
Keyboard.press(KEY_LEFT_GUI);
delay(10); //Windowsキー押下後ウエイト
Keyboard.write('d'); //※大文字'D'はではなく、小文字の'd'を送信
Keyboard.releaseAll();
while (digitalRead(BTN) == LOW); //ボタンがリリースされるまで待機
digitalWrite(LED, LOW);
}
delay(10);
}
一撃入魂
ボタン(D1)を押すと、1/2でレインボーに光るというスケッチです。
ルール
チャンスは1回、ボタン押下時に抽選
ということで、今回のスケッチは、あえてボタン入力の受付は1回のみとしてみました。
再チャレンジしたい場合は、リセットボタンを押してみてください。
RGB LEDの状態について
ボタン入力受付は、白点滅
抽選演出は、赤で表現
抽選結果は、当選時 > レインボー、落選時 > フェードアウト
動画は、落選時の流れです。
後述のボタン製作のところに当選時の動画を掲載しています。
#include <Adafruit_NeoPixel.h>
#define BTN D1
#define LED_POWER 11
#define LED_PIN 12
#define TOGGLE_PERIOD (1000u)
#define LED_STAND_BY_COLOR 0xffffff
#define LED_READY_COLOR 0xff0000
Adafruit_NeoPixel pixels(1, LED_PIN);
uint8_t rgbValues[7][3] = {
{255, 0, 0}, {255, 165, 0}, {255, 255, 0}, {0, 128, 0}, {0, 255, 255}, {0, 0, 255}, {128, 0, 128}};
int16_t randNumber;
int16_t brightness = 0;
int16_t fadeAmount = 10;
void toggleLED_nb(void)
{
static bool toggle = true;
static auto lastToggle = millis(); // saved between calls
auto now = millis();
if (now - lastToggle > TOGGLE_PERIOD)
{
if (toggle)
{
pixels.setPixelColor(0, LED_STAND_BY_COLOR);
pixels.setBrightness(18);
pixels.show();
}
else
{
pixels.clear();
pixels.show();
}
toggle = !toggle;
lastToggle = now;
}
}
void readyLED()
{
for (uint8_t i = 0; i < 3; i++)
{
brightness = 0;
pixels.clear();
pixels.show();
delay(100);
for (uint8_t j = 0; j < (100 / fadeAmount); j++)
{
pixels.setPixelColor(0, LED_READY_COLOR);
pixels.setBrightness(brightness);
pixels.show();
brightness = brightness + fadeAmount;
delay(80);
}
delay(1000);
}
brightness = 150;
pixels.setPixelColor(0, LED_READY_COLOR);
pixels.setBrightness(brightness);
pixels.show();
delay(3000);
}
void successLED()
{
for (uint8_t i = 0; i < 8; i++)
{
for (uint8_t j = 0; j < 7; j++)
{
pixels.setPixelColor(0, pixels.Color(rgbValues[j][0], rgbValues[j][1], rgbValues[j][2]));
pixels.setBrightness(18);
pixels.show();
delay(50);
}
}
}
void failureLED()
{
while (0 < brightness)
{
pixels.setPixelColor(0, LED_READY_COLOR);
pixels.setBrightness(brightness);
pixels.show();
brightness = brightness - fadeAmount;
delay(80);
}
pixels.clear();
pixels.show();
delay(200);
pixels.setPixelColor(0, LED_READY_COLOR);
pixels.setBrightness(10);
pixels.show();
delay(150);
}
void setup()
{
pinMode(BTN, INPUT_PULLUP);
pinMode(LED_POWER, OUTPUT);
digitalWrite(LED_POWER, HIGH);
pixels.begin();
while (digitalRead(BTN) == HIGH)
{
toggleLED_nb();
delay(10);
}
// 抽選
randomSeed(analogRead(A0));
randNumber = (int16_t)random(0xffff + 1);
readyLED();
if (randNumber < 0)
{
// おめでとう
successLED();
}
else
{
// 残念
failureLED();
}
pixels.clear();
pixels.show();
}
void loop()
{
}
デバッガーを使う
拡張ボードを使うとSWD(Serial Wire Debug)
でデバッグできます。


以下の記事を参照してください。
Raspberry Pi Picoをデバッグプローブにしてデバッグすることもできます。

バッテリーで動かしてみました
拡張ボードに搭載のOLEDディスプレイとSPIのTFT(IPS) 1.54インチディスプレイを同時に表示するスケッチをバッテリーで動かしてみました。
バッテリーは、コネクタがJST PH 2.0のリチウムイオンバッテリーが使用できます。
XIAO 拡張ボードは、充電にも対応しています。
なお、市販のバッテリーはマイコン用と極性が反対ですが、極性は入れ替えられます。
以下の記事をご参照ください。
XIAO拡張ボードのバッテリーコネクタではなく、電圧変換モジュールを使ってTFT 4.0インチ(ILI9486)のベンチマーク(LovyanGFXのスケッチ例 > test > TFT_graphicstest_PDQ)をバッテリーで動かしてみました。
単三乾電池2本


リチウムイオンバッテリー


電圧変換モジュールの製作については以下の記事をご覧ください。
パッシブブザーでメロディを鳴らしてみる
スケッチ例から[rp2040] > [ToneHappyBirthday]を選択します。
ブザーのピンをA3に書き換えて、スケッチを書き込みます。
// pin_buzzer should be defined by the supported variant e.g CPlay Bluefruit or CLUE.
// Otherwise please define the pin you would like to use for tone output
#ifndef PIN_BUZZER
#define PIN_BUZZER A3
#endif
QT Py RP2040の記事に掲載している「パッシブブザーでメロディを鳴らしてみる」のスケッチも試してみました。
こちらもメロディー再生できました。
ボタンを製作してみました
タクトスイッチを組み込んだボタンを製作してみました。


製作過程については、以下の記事にまとめてみました。
ガチャポンボタンで手元スイッチを作る(参考サイト)
キーボードショートカット(USB HIDキーボードデバイス)を再現してみました
本記事に掲載のボタンを押すとWindowsデスクトップ表示がされるUSBキーボードのスケッチをこのボタンに組み込んであるXIAO RP2040に書き込んで動かしてみました。
一撃入魂
本記事に掲載の一撃入魂スケッチをこのボタンで動かしてみました。
このボタンでは、直接リセットボタンを押せないため、ガチの1回抽選を再現できたのではないでしょうか。
最後に
USB HIDデバイス(例: マウスやキーボード)の製作、XIAO 拡張ボードを使ったラピッドプロトタイピングなどいろいろと応用できそうですよね。
RP2040搭載ボードの中では比較的安価なのも嬉しいポイントですね。
ということで、お気に入りのマイコンがまた一つ増えました。
当ブログのマイコン記事です。ぜひご覧ください。
コメント