あけましておめでとうございます。今年もよろしくお願いします!
それはさておき、micro:bitを購入してしまったので、年末年始のひまつぶしによかろうと、雑なプログラムを幾つか作ってみた。
micro:bit is 何
micro:bitはイギリスのBBCが作っている教育用のマイコンボード。イギリスでは子どもたちに無料で配っているらしい。25個のLEDと2つの入力用ボタン、温度センサーやジャイロセンサー、BLEの通信コンポーネントなどが一つのボードにパッケージングされていて、部品を組み立てたり配線しなくてもいろんなことができる。ともかくオフィシャルサイトの紹介 を見るとわかりやすい。ボードの見た目がかわいい。
開発は本格的なプログラミング言語も使えるが、Web上で動作するScratchみたいなブロックスタイルの開発環境も良くできている(なんかMicrosoftが作ってるみたい)。
サイコロ
ボード自体を振ると加速度センサが反応するので、それをトリガーにサイコロを振ってくれるプログラム。ちょっとしたエフェクトが表示されたあと、1~6の数字がランダムで1つ出力される。
一瞬でサイコロできた #microbit pic.twitter.com/MzqKTQUAXp
— hakobe (@hakobe) 2017年12月30日
firmwareのコードは以下のような感じで素朴。ご覧のとおり開発環境にはシミュレータもついてたりして試行錯誤しやすい。
Twitterの特定キーワードを監視してLEDで通知してくれるくん
Twitterのfiltered realtime apiを使うと適当なキーワードを含むツイートをストリームで受け取ることができる。これを使って、Twitter上で特定のキーワードをつぶやいている人がいることを検知し、それに合わせて micro:bitのLEDを点滅させることで、すぐさま話題に気づけるというプログラム。
キーワードに反応したら以下のような感じで光る。
— hakobe (@hakobe) 2017年12月31日
micro:bit には無線LANインターフェースとかはついていないので直接インターネットに接続することはできない。一方、Bluetooth LEのインターフェースはあるので、他のコンピュータと通信することはできる。今回は母艦のMacでTwitterのストリームを見ておいてイベントが起こったら、BLEでLEDを光らせる命令をmicro:bitに送るようにした。
micro:bit側で動作させるfirmwareのコードはめちゃくちゃしょぼくて、以下のとおり。コードには現れていないが、右上の歯車からたどり着ける"プロジェクトの設定"で、"No Pairing Required: Anyone can connect via Bluetooth." しておくと良い。
母艦のMac側のコードはNode.jsで実装する。BLEでmicro:bitを接続するための便利なnpmモジュールがあるのでそれを使うと良い。
罠があって、このモジュールが依存しているnobleというモジュールが Mac OS High Sierraでは使えない。ありがたいことに、パッチを書いてくれている人がいるので、それを使おう。
とにかくnode-bbc-microbitを使うといい感じに、micro:bitと通信できるようになる。今回の仕組みを実現するために自分で書いたソースコードは以下のリポジトリにあるので見てくれ!
たいしたことはしてないけど、チカチカ点滅させる部分をasync/await使って書いているのがいい感じに書けたポイント(コールバックとかPromiseでやるとダルそう)。
for (let i = 0; i < 5; i++) { await writeLedMatrixState(microbit, PatternSmile); await sleep(100); await writeLedMatrixState(microbit, PatternBlank); await sleep(50); }
ちょっと使ってみたところ、"紅白" みたいなキーワードだと無限にチカチカしていて意味がなかった。"ポケモン配布"みたいな微妙にニッチ感のあるキーワードだと程よい間隔で反応がある。普段は "はこべ" とかで検索しておくと良いか。
Twitterのキーワード監視だと微妙に使いでがないけど、要はイベントにトリガしてLEDが制御できるということなので、ログをtailしてERRORって文字列があったら光らせるとか、Googleカレンダーの予定の10分前から光らせておくとかできそう。
感想
振ったらデバイスが反応したり、LEDが光ったりするのは楽しい。1ボードで完結して動くので物理的な安定感があって扱いやすい感じがする。開発環境はとてもよくできてて使いやすい。電子工作のキットもいろいろあるので、ボード単体で飽きても拡張していけそう。
BLEで制御できるのが便利。いろいろ活用の仕方がありそうで、そのへんにあるRaspberry Piに母艦をやらせて、micro:bitをセンサ付きビーコンとして家とかオフィスにばらまくとかするとおもしろい?
年末年始のひまつぶしにはちょうど良いので、近所の電子部品店になどで購入しましょう。京都のマルツにはまだもうちょっとありました。電池ボックスが地味に便利なのでスターターキットがおすすめです。

BBC micro:bit go スターターキット リテールBOX(CFD販売 6ヶ月製品保証付)
- 出版社/メーカー: MICRO:BIT
- 発売日: 2017/08/05
- メディア: Personal Computers
- この商品を含むブログを見る

micro:bitではじめるプログラミング ―親子で学べるプログラミングとエレクトロニクス (Make:PROJECTS)
- 作者: スイッチエデュケーション編集部
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/11/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る