Seeeduino XIAOと拡張ボード2種を触る

概要

去年に購入したまま積んでいたXIAOと拡張ボードをやっと触ることができましたので紹介したいと思います。本家ストアから購入したほうが安いですが、時間と送料が結構かかるので秋月電子さんあたりのほうがおすすめです。

Seeeduino XIAO

Seeed Studio Seeeduino XIAO-Arduino IDE 互換ボード SAMD21 Cortex M0+搭載 ブレッドボード互換 USB Type-C(1pcs)
seeed studio
今はテックジェイという店に相乗りされましたが、メイカー専門店はその店に販売権限を与えたことがなく、そこから購入すると偽物が販売される可能性もありますし、技術サポート、アフタサービスなどの対応もしかねますので皆様は是非お気をつけてください。尚、この商品だけではなく、他の商品もテックジェイに相乗りされ、お客様からテックジェイに商品ページと違う商品が届きましたというクレームが来ました。現在、当店もテックジェイと交渉しています。ご購入する時に是非購入ルートをお気をつけてください。

Seeeduino XIAOは非常に小型なボードです。7ピン×2で14ピンと裏側にもパッドがあります。

ちょっと面倒なのがリセットボタンがありません。USB Type-Cコネクタの上にパッドはありますので、ショートさせることでリセットをすることができるようです。

上側にもVINとGNDのパッドの他に、左側に4箇所パッドがありますね。ちなみに標準ではピンヘッダはついていませんので、自分で付ける必要があります。

ピンヘッダ付きも販売はされていますので、国内でもそのうち手にはいると思います。Digi-Keyさんとかだとすでに取り扱っていますね。

ちなみに販売している状態ですと、シールがはられていませんのでまっさらなシールドだけでかっこ悪いです。真っ白を含む4種類のシールが付属しているので、なにか貼ったほうがかっこいいと思います。

Arduino IDEでの開発

上記のページなどにまとまっています。

ボードマネージャのURL追加

Arduino IDEの環境設定から、下の方にある追加のボードマネージャのURL欄の右側にあるボタンを押します。

ここにSeeedstudioのボードマネージャのURLを追記します。

  • https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json

上記のURLになります。

この状態で、「ツール」→「ボード」→「ボードマネージャ」を選択して、検索欄にSeeedで絞り込むと上記の結果になりました。上にあるSeeed SAMDがXIAOのボードマネージャになります。ここの紹介文にXIAOはまだないですが、Wio Terminalと同じシリーズのチップになります。

はい、ボードから選択できるようになりました。

USBシリアル出力

void setup() {
    SerialUSB.begin(115200);
    while (!SerialUSB);
}
 
void loop() {
void setup() {
    Serial.begin(115200);
    while (!Serial);
}
 
void loop() {
    Serial.println("Hello,World");
    delay(1000);
}

SerialもしくはSerialUSBがUSB経由でのシリアル出力のようです。

上記に定義済みの変数が設定されています。

#define SERIAL_PORT_USBVIRTUAL      SerialUSB
#define SERIAL_PORT_MONITOR         SerialUSB
#define SERIAL_PORT_HARDWARE        Serial1
#define SERIAL_PORT_HARDWARE_OPEN   Serial1

// Alias Serial to SerialUSB
#define Serial                      SerialUSB

抜粋してみると、USBシリアルはSerialUSBで、ピンを使ったシリアルはSerial1を使うみたいです。ただし、一般的なSerialはSerialUSBに置換されていますね。

Lチカ

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, LOW);
  delay(200);
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
}

上記でLチカできます。LOWを200ミリ秒、HIGHを1秒に設定してみました。動かしてみたところ一瞬光ってから消える動作をしているのでLOWにすると光るLEDのようです。

#define PIN_LED_13  (13u)
#define PIN_LED     PIN_LED_13
#define LED_BUILTIN PIN_LED

#define PIN_LED_RXL          (12u)
#define PIN_LED_TXL          (11u)
#define PIN_LED2             PIN_LED_RXL
#define PIN_LED3             PIN_LED_TXL

定義を見てみるとこんな感じでした。PIN_LEDか、Arduino UNOなどでもよく使われているLED_BUILTINあたりを使うのが良さそうです。

Groveシールド

Seeed Studio Seeeduino XIAO Arduino互換ボード用Groveシールド バッテリー管理チップ内蔵
seeed studio
[リチウム電池の充電及び管理機能] Seeeduino XIAOマイコン用Groveシールドは、Seeeduino XIAO用のプラグアンドプレイの拡張ボードです。オンボードのバッテリー管理チップとバッテリーボンディングパッドを使用すると、リチウム電池(別途購入必要)でSeeeduino XIAOに簡単に電力を供給し、充電もできます。

Seeedさんの商品ですので、Groveシールドも販売されています。このシールドを使うことでGroveが使えるようになります。XIAOは小さくて便利なのですが、入出力の接続が面倒なんですよね。

上記で購入できます。

こんなボードで、右側を折って短くすることも可能です。

裏側はこんな感じになっています。

こんな感じにGroveケーブルでボタンを接続してみました。

const int8_t btnPin = 0;

void setup() {
  Serial.begin(115200);
  while(!Serial);

  pinMode(btnPin, INPUT);
}

void loop() {
  Serial.println(digitalRead(btnPin));
  delay(100);
}

単純なスケッチですね。

拡張ボード

去年の年末にさらにすごい拡張ボードが販売されました。上記のようにXIAOの裏側にあるパッドにピンが伸びていますね。これで裏側にあるリセットピンが使えるようになっています。Grove端子もあります。

裏側です。マイクロSDカードとコイン電池がありますね。電池があるってことはRTCも内蔵されていますね。電池はCR1220でしたが手元にはない、、、

A0/D0のGroveにボタンを接続して、前回のスケッチを動かすとGrove経由でボタンの状態が取得できました。

上記で購入できます。

I2Cスキャン

#include <Wire.h>

void setup() {
  Wire.begin();

  Serial.begin(115200);
  while (!Serial);
  Serial.println("\nI2C Scanner");
}

void loop() {
  int nDevices = 0;

  Serial.println("Scanning...");

  for (byte address = 1; address < 127; ++address) {
    Wire.beginTransmission(address);
    byte error = Wire.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);
}

とりあえず汎用的なI2Cスキャナを動かしてみたいと思います。

Scanning...
I2C device found at address 0x3C  !
I2C device found at address 0x51  !
done

2つデバイスを発見しました。

  • 0x3C:SSD1315?(LCD)
  • 0x51:PCF8563(RTC)

上記の2つですね。

LCDライブラリ

定番のu8g2ライブラリを利用します。

上記のキットと同じSSD1315が搭載されていると思います。ただし、SSD1306と互換性があるようですので、ライブラリ上ではSSD1306として動きます。

RTCライブラリ

上記ライブラリを利用する必要があるようです。他のライブラリマネージャに登録されているPCF8563用ライブラリはXIAOでは利用できないようです。

ZIP形式でダウンロードしてZIP形式のライブラリをインストールから入れておく必要があります。

スケッチ例

#include <Arduino.h>
#include <U8x8lib.h>
#include <PCF8563.h>
PCF8563 pcf;
#include <Wire.h>
 
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
//U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // OLEDs without Reset of the Display
 
void setup() {
  Serial.begin(115200);
  u8x8.begin();
  u8x8.setFlipMode(1);
  Wire.begin();
  pcf.init();//initialize the clock
  pcf.stopClock();//stop the clock
  pcf.setYear(20);//set year
  pcf.setMonth(10);//set month
  pcf.setDay(23);//set dat
  pcf.setHour(17);//set hour
  pcf.setMinut(33);//set minut
  pcf.setSecond(0);//set second
  pcf.startClock();//start the clock
}
 
void loop() {
  Time nowTime = pcf.getTime();//get current time
  u8x8.setFont(u8x8_font_chroma48medium8_r);   // choose a suitable font
 
  u8x8.setCursor(0, 0);
  u8x8.print(nowTime.day);
  u8x8.print("/");
  u8x8.print(nowTime.month);
  u8x8.print("/");
  u8x8.print("20");
  u8x8.print(nowTime.year);
  u8x8.setCursor(0, 1);
  u8x8.print(nowTime.hour);
  u8x8.print(":");
  u8x8.print(nowTime.minute);
  u8x8.print(":");
  u8x8.println(nowTime.second);
  delay(1000);
}

本家のサンプルスケッチです。これで画面上に時刻が表示されますね。

動作が不安定な場合

ちょっと変なスケッチを転送してしまうとシリアルポートとして認識しなくなることがあります。その場合にはWio Terminalと同じなんですが2連続でリセットをするとダウンロードモードに強制的になります。その状態で転送しなおすことで元に戻ると思います。

とはいえ、標準だとリセットボタンがないのでちょっと面倒です。拡張ボードを使うとリセットボタンが押しやすくていいですね。

まとめ

まだあまり日本語の情報が無い気もしますが、結構使いやすいボードだと思います。USBコントローラも内蔵されているので、USBデバイスとしてパソコンからUSBキーボードなどに見せたり、USBホストとして他のUSBデバイスから情報を取得することも可能です。

値段のわりにかなりパワフルなボードなので、通信を利用しない場合にはこのボードをシステムの中に内蔵してしまうのが良さそうです。

コメント