超小型Arduino互換ボード:Seeeduino XIAOを動かす
秋月で最近発売された超小型Arduino互換ボードのXIAOを動かしてみます。(物自体はマルツとか共立でも1ヶ月前くらいから売ってたみたいだけどね)めっっっっっっちゃ小さいんですこれ。そんでもってそこそこ強い32bitCPU(ARM CortexM0)が乗ってて、フラッシュもいっぱいあって、安いしもうおそるべしチャイナパワーって感じ。ESPといい,最近の中国製品ほんとすごい...どうしたらそんなものが売れるの...って感じ.ちなみにXIAOは中国語で「小」という意味があります。(Maker界隈は中国語少しでもやっとくと役に立つことが多いのでお勧め)名前だけあって、たったの2cmの小型サイズ.なのにちゃんとUSB-Cついててつないでサクッと開発できる。めちゃ便利だなと思ってみてたら家に届いてました。おかしいなぁ. スペックを簡単に書いておきます。
- ARM Cortex M0+ 搭載
- 32bitCPU 48MHz(SAMD21G18)
- Flash 256KB
- SRAM 32KB
- 超小型20mm*17.5mm
- IOいっぱい(UART, I2C, SPI, DAC, ADC×10, PWM×10, Digital×11, Analog×11)
- バッテリー電源用PADあり
- USB Type-Cコネクタ搭載
- IOは3.3V
もう全部これでいいんじゃないかなっていうモリモリなマイコンボード。これが500円で手に入るんだからたまげたなぁ…。自作キーボード、ウェアラブルデバイスとかの組み込み開発にとってもよさそう。こんなに豊富なリソースを見せつけられちゃったら普通のArduino MiniとかNanoとかMicroは立場なくなっちゃなこれ...。Amazonで格安Nanoが手に入るので普段はそれをよく使ってるけどこれに乗り換えてもいいかもしれないですね。 Type-Cでつながって開発できるってのは最高にいかしてるよね。今風でとても良い。当方はMacでの開発が多いのでとてもありがたい。MicroBはよくもげるのでType-Cに移行していってほしいもんですね。
Seeeduino Xiaoをためした。かわいい!!TypeC端子搭載で今風なのは高評価。 pic.twitter.com/rjy2veOdh4
— fumi🌘FaH253284 (@fumi_maker) April 21, 2020
とりあえずLチカしてみる
当方はMacで説明しますが、Windowsでもほとんど変わらないんので参考に進めてみてください。
開封
かわいい。お菓子の袋みたいだね。柿ピーとかと変わらない。間違って食べそう。シールがついてくるのでわからない人は貼っておきましょう。
USB Type-CコネクタとPCを接続
この記事見るような人であればUSB Type-Cケーブル持っていないひとなんていないと思いますけど、USB Type-Cという新しいコネクタが採用されていますので従来のMicroBなどは刺さりません。持ってない人は勝っておきましょう。接続するとPowerLEDが付き、もともと書き込まれているLチカが動き始めます。
ArduinoIDEを起動
XIAOを開発するためにはArduino IDEを使います。持っていない人はArduino IDEをインストールしてください。 ArduinoIDEはここからダウンロードできます.
ボード情報を登録
そのままだとArduino純正ボードしか認識されないので互換ボードも認識されるようにします。
ファイル==>環境設定を開きます。追加ボードマネージャのURLという欄があるのでそこに
https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
と入力しOKをクリック。環境設定をOKで閉じます。
私の場合はESP8266やESP32などの他の環境が入っているので複数ボードマネージャのURLに入ってますが,気にしないでください.複数ある場合は改行して一番最後に追加しておけば大丈夫です.
ボード情報を追加
ツール==>ボード==>ボードマネージャをクリックします。開いたボードマネージャの検索バーにSeeeduinoと入れるとXIAOが出てくるのでインストールをクリック。 ダウンロードが始まってしばらくすると終わります。終わったらボードマネージャを閉じてください。
Lチカ
ようやくLチカできます。
ファイル==>スケッチ例==>Basics==>Blinkを選択するとLチカのプログラムが出てきます。このままだといま動いているプログラムと全く同じでつまらないのでスピードを上げておきましょう。Delayの部分のスピードを0一つ減らして0.1秒ごとに点滅にしました。
// the setup function runs once when you press reset or power the board void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(100); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(100); // wait for a second }
ツール==>ボードで先ほどインストールしたSeeeduino製品がいっぱい出てくるのでXIAOを選択。 ツール==>シリアルポートでXIAOがパソコンに繋がってるポートを指定します。自分の場合はCOM4でした。 左上の矢印ボタンをクリックして書き込みです。しばらくするとXIAOのLEDがさっきよりも高速に点滅し始めると思います。お疲れさまでした。
早速Ltikaしてみた。かわいい pic.twitter.com/bxoRPhHP8F
— fumi🌘FaH253284 (@fumi_maker) April 21, 2020
注意:IOは3.3Vレベルなので気を付けてください。VinだけはDCDCで降圧されてるので5V入れても大丈夫らしい。
外部LEDでLチカ
ピンの出力先を変えるだけです.6番pinに抵抗とLEDを直列につないでプログラムを書き込みます.当たり前ですがちゃんと動いてる.
void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); pinMode(6, OUTPUT); digitalWrite(6,LOW); } // the loop function runs over and over again forever void loop() { digitalWrite(6, HIGH); // turn the LED on (HIGH is the voltage level) delay(500); // wait for a second digitalWrite(6, LOW); // turn the LED off by making the voltage LOW delay(500); // wait for a second }
外部LEDでLチカ。IOは10本生えてて小さい割には良い。 pic.twitter.com/VJH0AhhPtD
— fumi🌘FaH253284 (@fumi_maker) April 21, 2020
PWM出力: LEDホタルやってみる
PWMでホタルのようにLEDを点灯させてみます.ピンはさっきと同じでプログラムを書き換えて書き込みます.全部のデジタルピンにPWMが乗ってるらしいので嬉しいね.
int led = 6; // the PWM pin the LED is attached to int brightness = 0; // how bright the LED is int fadeAmount = 5; // how many points to fade the LED by // the setup routine runs once when you press reset: void setup() { // declare pin 9 to be an output: pinMode(led, OUTPUT); } // the loop routine runs over and over again forever: void loop() { // set the brightness of pin 9: analogWrite(led, brightness); // change the brightness for next time through the loop: brightness = brightness + fadeAmount; // reverse the direction of the fading at the ends of the fade: if (brightness <= 0 || brightness >= 255) { fadeAmount = -fadeAmount; } // wait for 30 milliseconds to see the dimming effect delay(30); }
Lフワ(と言うのかは知らない)
— fumi🌘FaH253284 (@fumi_maker) April 21, 2020
PWMも全部のピンで使えるンゴ pic.twitter.com/654ZBWSQFr
UART通信してみる
XIAOに何か喋らせてみます.とりあえずHello Worldを喋ってもらいました.これは何も配線しなくてもUSBさえ刺さってれば動きます.プログラムを書き込み,シリアルモニターを開き,したのボーレートを115200に変更するとマイコンが喋ってるのがわかります.
UART通信中(送信,受信)時には青色のLEDが光るみたいです.
int cnt=0; void setup() { // put your setup code here, to run once: Serial.begin(115200); } void loop() { // put your main code here, to run repeatedly: Serial.print("Hello World "); Serial.println(cnt); delay(1000); cnt++; }
UART通信。ハードに2つ乗ってるので便利。 pic.twitter.com/J2USdEGxyp
— fumi🌘FaH253284 (@fumi_maker) April 21, 2020
ADC:電圧を測ってみる
XIAOで電圧を測ってみます.ここではその辺にあった適当な可変抵抗を用意してつなぎました.プログラムを書きこむと7ピンにかかってる電圧がわかります.XIAOは3.3Vまでしか対応してないのでご注意ください.
void setup() { // put your setup code here, to run once: pinMode(7,INPUT); Serial.begin(115200); } void loop() { // put your main code here, to run repeatedly: Serial.println(3.3/1024*analogRead(7)); delay(100); }
シリアルポートで115200を開くことで電圧がみれます.自分の場合は1.72Vくらいでした. 試しにテスタで電圧を測ってみたら1.7Vくらいだったのであっていそうですね.
PWM出力:サーボを動かしてみる
サーボを動かしてみます.信号線に決められたフォーマットとPWM信号を送ることでサーボの角度を調整することができます.ArduinoにはServoを簡単に制御できるライブラリがあるのでそれを使うことにします.
#include <Servo.h> Servo myservo; // create servo object to control a servo // twelve servo objects can be created on most boards int pos = 0; // variable to store the servo position void setup() { myservo.attach(7); // attaches the servo on pin 9 to the servo object } void loop() { for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } }
サーボを回した。 pic.twitter.com/okYAulgvTP
— fumi🌘FaH253284 (@fumi_maker) April 21, 2020
まとめ
まだほんのさわりしか試していませんがなかなか使えそう.I2CやSPI通信、UART、ADCなどたくさんの機能がついているのでもっと試してみたい.また,ArduinoCoreを使わずにCortex M0を直接レジスタから制御してやることで高速に動かすことが可能なので,使用用途が広がりそう.Cortex M0には他にも色々機能があってSingle Cycle IOBUSは1クロックでIO制御したりもできるそうで…すごいね.しっかり使ってあげたらもっと化けそう.勉強しましょうね...
今回はとりあえず動かしてみるところまででした.また使い込んでみて何かあれば追記します.今日はそんな感じです.