初めに
最近BlueToothやらWi-Fiやらで遊びたい場合にはM5Stackとかがほとんど完成してて気楽に使える。が、実際組み込もうとするとまあいろいろと大変である。作りたいものはキッチンタイマーであったとしても頻繁に充電しなきゃいけないとか、電源切り忘れるとあっさり電池がなくなるとか。
そんなわけでもないんだけど、小さくてBlueToothが使えて低消費電力でArduinoでなんとなく開発ができるボードが欲しかった。で勝ったのが、Adafruitの小さいやつ。
いつものように、これ
main.cpp
# include "Arduino.h"
void setup() { Serial.begin(115200); }
void loop()
{
Serial.println("Hello world");
}
コンパイルしてみると、なんと、通らない。
$ pio run
....
Linking .pio/build/adafruit_itsybitsy_nrf52840/firmware.elf
.pio/build/adafruit_itsybitsy_nrf52840/src/main.cpp.o: In function `setup':
main.cpp:(.text.setup+0xc): undefined reference to `Serial'
main.cpp:(.text.setup+0x6): undefined reference to `Adafruit_USBD_CDC::begin(unsigned long)'
.pio/build/adafruit_itsybitsy_nrf52840/src/main.cpp.o: In function `loop':
main.cpp:(.text.loop+0xc): undefined reference to `Serial'
collect2: error: ld returned 1 exit status
「なんでだろう、なんでだろう」?!踊りたくなってきた。知ってる人はもう常識だよね、きっと!
Adafruitで売ってるものだからブートローダの問題ではないはずだ。そもそもリンクできてないんだから。
おまじないを1行
# include <Adafruit_TinyUSB.h> // for Serial
これをインクルード文の適当なところに追加して改めてコンパイル。
$ pio run
Linking .pio/build/adafruit_itsybitsy_nrf52840/firmware.elf
Checking size .pio/build/adafruit_itsybitsy_nrf52840/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [ ] 2.9% (used 7128 bytes from 248832 bytes)
Flash: [= ] 5.1% (used 41580 bytes from 815104 bytes)
========================= [SUCCESS] Took 0.92 seconds =========================
はい、できました!シリアルモニタが使えました。これで開発進みます。