Seeed XIAO RP2040を試してみました【Arduino使用】

Raspberry Pi/電子工作
スポンサーリンク

こんにちは、あろっちです。

Seeed XIAO RP2040を入手したので試してみました。

Seeed XIAO RP2040は、MCUにRP2040を搭載したXIAOです。Seeeduino XIAOとピン配置/形状に互換性があるのが特徴です。
RP2040搭載のSeeeduino XIAO互換というものでは、Adafruit QT Py RP2040がありますが、スペックに関しては、フラッシュメモリの容量などRaspberry Pi Picoに近いものとなっています。

Adafruit QT Py RP2040については記事にしていますので、よろしければ、ご覧ください。

特徴

  • Seeeduino XIAO互換のピン配置/形状
  • USB Type-C
  • ユーザLED(RGB 3色)、RGB LED、電源LED
  • リセットボタン
  • ブートローダーセレクトボタン
  • ソフトウェアは、Arduino、MicroPython、CircuitPythonをサポート
MCURP2040 デュアルコア ARM Cortex M0+プロセッサ、最大動作周波数 133 MHz
フラッシュメモリ2MB
GPIO11
・11xディジタル&PWM, 4xアナログ対応(12bit ADC)
サイズ20×17.5×3.5mm
Seeed XIAO RP2040 - Supports Arduino, MicroPython and CircuitPython
XIAO RP2040 is a microcontroller using the Raspberry RP2040 chip. It runs at up to 133MHz, is built with rich interfaces in a tiny thumb size, and fully suppo...
Overview - Seeed Wiki
Seeed Product Document

本記事ではArduino(C/C++)で試してみます。

ちなみに、開発環境としてVS Codeを使うこともできたりします。

スポンサーリンク

ピン配列

GPIOのピン番号は、上図(FRONT)のMicropythonで示された番号(Pxx)です。

LEDGPIO(ピン番号)
LED(赤, TX)17
LED(緑, RX)16
LED(青, ユーザLED)25
RGB LED_POWER11
RGB LED12

ArduinoのLED_BUILTIN(定数)は、上表のLED(青, ユーザLED)=GPIO25に対応しています。

I2Cは、I2C1(SDA=GPIO6、SCL=GPIO7)です。

例えば、ArduinoでI2Cを使う場合、Wire1(=I2C1)を使う形になります。(WireはI2C0に対応)
Wire1は、setup関数内で以下のように初期化します。

  Wire1.setSDA(SDA);
  Wire1.setSCL(SCL);

()内のSDA、SCLは、ArduinoのSeeed XIAO RP2040ボードに定義された定数です。
したがって、次のように直接GPIOのピン番号に置き換えることもできます。

  Wire1.setSDA(6);
  Wire1.setSCL(7);

本記事のサンプルプログラムにI2Cを使った例として「I2Cスキャナ」「OLEDディスプレイを表示してみる」を掲載していますので、ご参考にしてみてください。

※本記事のGPIOについては、Raspberry Pi Pico(RP2040のリファレンスボード)のPinoutを参考にしています。
例えば、I2Cについては、GPIO6、GPIO7がI2C1であることが読み取れます。

XIAO RP2040 回路図

内容物

1 x XIAO RP2040
2 x ピンヘッダ 7ピン

初回起動はこんな感じです。

ピンヘッダー装着後

USBマスストレージモード

BOOTボタンを押した状態で、リセットボタンを押すと、USBマスストレージモード(RPI-RP2)になります。

USBマスストレージモードの時に、PCからMicroPythonやCircuitPythonのファームウェアなどがインストールできます。

XIAO RP2040 with MicroPython(公式Wiki)

XIAO RP2040 with MicroPython - Seeed Wiki
Seeed Product Document

XIAO RP2040 with CircuitPython(公式Wiki)

XIAO RP2040 with CircuitPython - Seeed Wiki
Seeed Product Document

Arduinoボード設定

  • Arduino IDEにボードを追加
    ※実施済みの場合、この手順は不要です。

事前にSeeeduino XIAOボードを追加します。追加方法は、以下の記事をご参照ください。

  • Seeed XIAO RP2040ボードのインストール

[ツール] > [ボード] > [ボードマネージャ]をクリックし、検索ボックスに「XIAO RP2040」と入力し、[Seeed XIAO RP2040]をインストールします。

  • ボードの選択

[ツール] > [ボード] > [Seeed RP2040 Boards] > [Seeed XIAO RP2040]を選択します。

  • シリアルポートの選択

[ツール] > [シリアルポート]からXIAO RP2040のシリアルポートを選択します。

サンプルプログラム(Arduinoスケッチ)

公式WikiサイトにArduinoの情報やサンプルスケッチがあります。

XIAO RP2040 with Arduino - Seeed Wiki
Seeed Product Document

また、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;
    }
  }
}

QT Py RP2040のサンプルスケッチを試してみる

RGB LEDのピン番号は、QT Py RP2040のNeoPixelと同じということが分かりました。
ということで、試しにQT Py RP2040の以下の記事のサンプルスケッチを動かしてみます。

RGB LED Lチカ

「NeoPixelをLチカしてみる」に掲載しているスケッチを書き込みました。

このようにLチカできました。スケッチの修正は不要でした。

レインボー

「NeoPixelをレインボーに光らせてみる」に掲載のスケッチを書き込みました。

こちらもスケッチの修正は不要でした。

眩しいですね。

I2Cスキャナ

以下のリンクのI2CスキャナをXIAO RP2040用に修正してみました。

Arduino Playground - I2cScanner
#include <Wire.h>
 
 
void setup()
{
  Wire1.setSDA(SDA);
  Wire1.setSCL(SCL);
  Wire1.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire1.beginTransmission(address);
    error = Wire1.endTransmission();
 
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknown error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}

シリアルモニターを開くと接続されているI2Cデバイスのアドレスが確認できます。

Seeeduino XIAO 拡張ボードを試してみました

XIAO RP2040は、Seeeduino XIAO互換ということで、Seeeduino XIAO 拡張ボードという便利なボードが使えます。

※2021年12月28日現在 秋月電子通商やマルツオンラインなどで入手できそうです。

Seeeduino XIAO 拡張ボードは、以下のような豊富なインターフェースが備わっています。

  • OLEDディスプレイ
  • RTC
  • 拡張可能なメモリスペース
  • パッシブブザー
  • ユーザーボタン
  • Groveポート
  • オンボードバッテリー管理チップなど

なにか試したい時によく使うボードですね。

OLEDディスプレイを表示してみる

スケッチ例を使った表示方法を紹介します。

ボード搭載のOLEDディスプレイは、0.96インチ(128×64)、制御IC: SSD1306、通信: I2Cのものです。

単体でもよく見かけるポピュラーなOLEDディスプレイですね。

事前にライブラリマネージャから、Adafruit SSD1306ライブラリをインストールしておきます。

スケッチ例から、[Adafruit SSD1306] > [ssd1306_128x64_i2c]を選択します。

注意点は、XIAO RP2040のI2CはI2C1です。
したがって、ArduinoではWire1を使用します。

コードの修正箇所は、大きく2箇所です。
以下のように修正します。

修正箇所1(OLED初期化)

修正前

#define OLED_RESET 4
#define SCREEN_ADDRESS 0x3D
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

修正後

#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire1, OLED_RESET);

修正箇所2(setup関数にI2C1(Wire1)のピン(SDA、SCL)を明示するコードを追記)

void setup() {
  Wire1.setSDA(SDA);
  Wire1.setSCL(SCL);

修正したのち、スケッチを書き込みます。

こんな感じで、表示されます。

バッテリーで動かしてみました

拡張ボードに搭載のI2CのOLEDディスプレイとSPIのTFT(IPS) 1.54インチディスプレイを同時に表示するスケッチをバッテリーで動かしてみました。

バッテリーは、コネクタがJST 2.0のリチウムイオンバッテリーが使用できます。
Seeeduino XIAO 拡張ボードは、充電にも対応しています。

パッシブブザーでメロディを鳴らしてみる

※注意点
Seeed XIAO RP2040ボード(バージョン1.9.3)においてTone関数を使った一部のスケッチにて、動作が途中で止まるという現象が確認されました。
回避策としてRaspberry Pi Picoボード(earlephilhower版)でコンパイル&書き込みすることで、(ひとまずは)動作させることができることを確認しました。

Raspberry Pi Picoボードのインストールについては、以下の記事をご参照ください。

まずは、スケッチ例を使って試してみました。

ボードとして、[ツール] > [ボード] > [Raspberry Pi RP2040 Boards(1.9.7)] > [Raspberry Pi Pico]を選択します。

スケッチ例から、[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の記事に掲載している「パッシブブザーでメロディを鳴らしてみる」のスケッチも試してみました。

Seeed XIAO RP2040ボードでは、正常に動作しなかったのですが、ボードをRaspberry Pi Picoに設定することで動作することを確認しました。

2行目のピンをA3に変更し、スケッチを書き込みます。

int duration = 250;
int pin = A3;

まとめ

デバイス等への組み込み、USBデバイス(マウスやキーボードHIDなど)の作成、Seeeduino XIAO 拡張ボードなどを使ったラピッドプロトタイピングなど、いろいろと応用できそうですよね。

RP2040搭載ボードの中では比較的安価なのも、嬉しいポイントですね。

ということで、お気に入りのマイコンがまた一つ増えました。

以下は、当ブログで紹介したマイコンの記事です。よろしければ、ご覧ください。

スポンサーリンク
この記事を書いた人
あろっち

元ITエンジニア
エンジニア時代は大手企業などでSE・プログラマを経験してきました。

当ブログでは、経験や日々の暮らしの中で、興味があること、役に立ちそうなこと、気になったことを発信していきます。

IT関係(技術的な内容もあります) / スマホ・PC / ガジェット / 生活に役立ちそうなこと ... etc

あろっちをフォローする
Raspberry Pi/電子工作IT
スポンサーリンク
あろっちをフォローする
あろしーど

コメント

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