micro:bit の MicroPython

この記事は[MicroPython Advent Calendar 2017](https://qiita.com/advent-calendar/2017/micropython)の9日目の投稿です。昨日は [ken5owata](https://qiita.com/ken5owata)さん投稿の[micropythonでOLED (SSD1306)](http://ken5owata.hatenablog.com/entry/2017/12/08/011700)でした。

１日目の投稿にもあるように MicroPython 対応のマイコンボードの一つに micro:bit があります。micro:bit はイギリスの [BBC](https://ja.wikipedia.org/wiki/%E8%8B%B1%E5%9B%BD%E6%94%BE%E9%80%81%E5%8D%94%E4%BC%9A)中心となって作り上げた教育用マイコンボードで、主に子どもにフィジカル・コンピューティングを体験させることを目的としたものです。日本では今年の８月から販売されています。標準価格2000円(税抜き)です。

イギリスでは school year 7 の子どもに１００万台を無料配布したことでも有名になりました。記事や書籍によっては year 7 が小学生だったり中学生だったりしてますが、year 7 といえば 11-12歳、日本では小学校６年の年齢に相当しますが、イギリスだともう中等教育に入っているので、まあどちらも正しいといえます。

導入にあたっては子ども用に様々な敷居が低くなるよう工夫されていて、マイコンボードにありがちな面倒くささがかなり軽減されています。メモリは小さいので大きなプログラムは組めませんが、MicroPythonとの相乗効果でとにかく扱うのが簡単なのでセンサーやアクチュエータの利用で便利に使わせてもらっています。

一応 MicroPython は[２大標準開発環境](http://microbit.org/ja/code/)の１つになっていますが、日本の子どもたちにはアルファベットやキーボード入力の敷居が少し高いせいか、なにかとMicroPythonの存在は無視されがちなのが悲しいところ。Webサイトの日本語化に協力したり、[ドキュメントの日本語化](http://microbit-micropython.readthedocs.io/ja/latest/index.html)で地道に頑張っております。


# 標準開発環境

micro:bit の[標準開発環境](http://microbit.org/ja/code/)は基本Webブラウザ上でオンラインでアクセスして利用します。ただし、開発環境を表示させた後ではオフラインでの利用も可能です。MicroPythonでの開発環境のURLは以下になります。

http://python.microbit.org/

非常にシンプルなエディタで、このエディタでプログラムした後に Download アイコンをクリックすると、PCのダウンロードフォルダにPython実行環境とユーザプログラムを合わせた .hex ファイルがダウンロードされます。

micro:bit とPCをUSBケーブルで繋ぐとMICROBITドライブがマウントされるので、そこにダウンロードした .hex ファイルをコピーします。コピーが完了すると micro:bit に自動でリセットがかかり、プログラムが起動します。他のMicroPython対応ボードに比べると実に簡単です。

# REPLでの利用

MicroPythonではREPLの利用も可能です。micro:bit の場合は、上記の手順でプログラムをmicro:bitに書き込んだ後に(何もプログラムを書かないでMicroPython実行環境だけ書き込むこともできます)、シリアルターミナルソフト(TeraTerm、CoolTermなど)で接続するだけです。

当然、接続にあたってはシリアルポートを確認しなければなりませんが、Windowsであればデバイスマネージャ、Macであれば /dev/tty.usbmodem* あたりです。

私の場合はMacのターミナル上でscreenコマンドを使っています。

```bash
$ screen /dev/tty.usbmodemFA1442 115200
```

# プログラムの行方

REPLでアクセスして標準開発環境で作成したプログラムを探しても見当たらないと思います。標準開発環境では、MicroPython実行環境の後ろにユーザプログラムをくっつけた形で *.hex ファイルを作成します。このような形で micro:bit に書き込むと、MicroPython 起動時に後ろにくっついているプログラムを自動で起動するようになっています。

# 複数スクリプトの転送

標準開発環境は小さなプログラム作成しか想定していないせいか、プログラムを分割して作成して転送することはできません。特に問題なのは自作・他作のライブラリを導入できないことでしょう。ライブラリの中身をいちいち見てコピペするのも面倒です。

いちおう、micro:bit の MicroPython にもフラットながらファイルシステムはあって、ここに MicroPython スクリプトをシリアル経由で転送することによりライブラリの利用は可能です。ただ、このファイルシステムは実行環境を転送するたびに上書きクリアされてしまうので注意が必要です。

# Mu エディタ

micro:bit の MicroPython 用オフラインエディタに [Mu](https://codewith.mu/)があります。実は[micro:bit の MicroPython ドキュメント](http://microbit-micropython.readthedocs.io/ja/latest/index.html)では標準開発環境よりも Mu を勧めているぐらいです。

プログラムはダウンロードを介さずに直接にMICROBITドライブに転送してくれますし、REPL やファイル転送もポートを調べることなく利用可能です。またコードのチェックもしてくれるので、プログラム転送前に静的なコードの間違いは大部分除去できます。

# イースターエッグ

micro:bit の MicroPython にはイースターエッグがあります。

REPL上で `import this` や `import antigravity` をやってみましょう。

# micro:bit のファームウェア

micro:bit の[標準開発環境](http://microbit.org/ja/code/)ではユーザプログラムと実行環境をあわせて転送するので、ユーザは普段、ファームウェアの更新を意識する必要はありません。実行環境の更新があれば開発環境に組み込まれます。

しかし、その実行環境は [mbed](https://os.mbed.com/platforms/Microbit/)の基盤の上に構築されていて、このためのファームウェアもときどき更新されますが、この更新は自動で反映されず、手動で更新してあげることが必要です。

mbed ファームウェアについてはこちらを参照：
DAPLink on micro:bit (KL26Z)
https://www.mbed.com/en/platform/hardware/prototyping-production/daplink/daplink-on-kl26z/

無料配布版と売り物版ではちょっと違いがあるらしく、mbed ファームウェアに違いがあります。売り物版の場合は「for commercially purchased micro:bits」の方をダウンロードします。

ダウンロードが完了したら reset ボタンを押しながらUSBケーブルを差し込みます。MENTENANCEドライブがマウントされるので、そこにダウンロードしたファームウェアをコピーするだけで更新完了です。ファームウェアのバージョンアップも実に簡単ですね。