bpi:bit の MicroPython その１

今日とりあえげるのは bpi:bit です。

ラズパイもどきとかArduinoもどきとか、いりいろな「もどき」ものを出している[Banana Pi](http://www.banana-pi.org/)ですが、bpi:bit はその名からも想像つくように [BBC micro:bit](https://microbit.org/ja/) もどきです。

bpi:bit のポータル的な Wiki サイトはの[ここ](http://wiki.banana-pi.org/BPI-Bit?fbclid=IwAR2IF6Cs421xADp5ifxOoQygH8tQvDBGxLsVtWCniP6-S13dpv8e3P1UHkc)にあります。

日本で技適もとれている ESP-WROOM-32 を採用していて、とうぜん Wi-Fi はサポート。下方にある端子は micro:bit と互換なので、micro:bit 用の周辺機器がいろいろ流用できます。LED の代わりに NeoPixel 25個ついていて、CPU温度ではない温度センサー、疑似でない光センサー、MPU9250、圧電ブザーがついていて、お値段は micro:bit とあまり変わりません。私は[Aliexpress](https://www.aliexpress.com/)の [SinoVoip Co.,Limited Banana PI](https://www.aliexpress.com/store/302756) ストアで送料込み 2,317円 で購入しました。「WiFi Display」と表記のある謎の箱が送られてきたのですが、中にはちゃんと bpi:bit が入っていました。

![IMG_4680.jpg](https://qiita-image-store.s3.amazonaws.com/0/106817/696ca86a-c2c8-7665-0870-2d3be9dbbba4.jpeg)

開発環境は webduino というブロックプログラミング環境や Arduino IDE とかあるのですが、11月に MicroPython に対応したとのことで、積みボード化していた bpi:bit をひっぱりだしてきました。

bpi:bit MicroPython のドキュメントは[ここ](https://github.com/BPI-STEAM/BPI-BIT-MicroPython/wiki)にあります。今のところは中国語の説明しかないのですが、chrome の翻訳機能使えば、なんとか内容の雰囲気はわかります。このドキュメントを読んで動かせたところまで書きます。

# ドライバのインストール

ホストPCから bpi:bit に MicroPython ファームウェアを焼くには UART シリアル通信できなきゃなりません。

bpi:bit に載っている USB-シリアル変換チップは CH341 というもののようです。このチップを積んだボードを
使うのは初めてだったので、ホストOSにドライバをインストールする必要がありました。

Windows ではドキュメントどおり[ここ](http://www.wch.cn/downloads/file/5.html)からダウンロードしてインストールすればよいのですが、私が普段プライベートで使っている macOS 用の説明がありません。macOS 用ドライバを探したところ[ここ](http://www.wch.cn/download/CH341SER_MAC_ZIP.html)にありましたので、これをダウンロードして使いました。Linux 版もあるようですが試していません。インストール後に再起動が必要です。

# ファームウェアのインストール

bpi:bit の MicroPython ファームウェアは[ここ](https://github.com/BPI-STEAM/BPI-BIT-MicroPython/releases)にあります。なにかいろいろあって分かりにくいでしょうが、ファームウェアは firmware.bin です。Windows の場合はファームウェアを焼くために以下もダウンロードして、firmware.bin と同じフォルダに置いておきましょう。

* AutoErase.exe
* AutoFlash.exe

mac/Linuxの場合は esptool.py をインストールしてください。python 3 が使える環境であれば以下のようにします。

```bash
$ pip install esptool
```

ホストPCと bpi:bit を以下の写真のように USB ケーブルで繋ぎます(bpi:bit 側は micro USB)。micro:bit と同じです。

![IMG_4779.jpg](https://qiita-image-store.s3.amazonaws.com/0/106817/9191452a-6d82-ee4b-1d61-a1c987650da6.jpeg)

Windows の場合はダウンロードした以下のコマンド順番に実行します。

* AutoErase.exe
* AutoFlash.exe

macOS/Linux の場合は esptool を使って以下のようにします。

```bash
$ esptool.py --chip esp32 --port <シリアルポート> --baud 115200 erase_flash
$ esptool.py --chip esp32 --port <シリアルポート> --baud 115200 write_flash -z --flash_mode dio --flash_freq 40m 0x1000 firmware.bin
```

<シリアルポート> のところ、私の macOS では /dev/tty.wchusbserialfa1440 でした。Linux だとたぶん /dev/USB0 あたりでしょう。これらシリアルポートへのアクセス権のあるアカウントで実行してください。

正常終了したら、裏面のリセットボタンを押します。リセットボタンの位置も micro:bit と同様です。

![IMG_4780.jpg](https://qiita-image-store.s3.amazonaws.com/0/106817/4848c3b4-45aa-2597-4a0d-6011cc3f704c.jpeg)

TeraTerm や screen などターミナルアプリでシリアルポートにアクセスすると、以下のように MicroPython の REPL にアクセスできます。これを書いている時点では 2018-12-07 にビルドされたもので、本家 MicroPython の v1.9.4 がベースになっていることがわかります。

```
I (191) wifi: Init data frame dynamic rx buffer num: 64
I (191) wifi: Init management frame dynamic rx buffer num: 64
I (201) wifi: Init static rx buffer size: 1600
I (201) wifi: Init static rx buffer num: 10
I (211) wifi: Init dynamic rx buffer num: 0
I (261) phy: phy_version: 3960, 5211945, Jul 18 2018, 10:40:07, 0, 0
I (271) wifi: mode : sta (30:ae:a4:8f:24:38)
I (271) wifi: STA_START
Press "A" to enter the smartconfig mode while the led is rolling
Started wifi in normal mode
OSError: [Errno 2] ENOENT
MicroPython v1.9.4-817-g72effc642-dirty on 2018-12-07; ESP32 module with ESP32
Type "help()" for more information.
>>> I (6351) wifi: n:11 0, o:1 0, ap:255 255, sta:11 0, prof:1
I (6911) wifi: state: init -> auth (b0)
I (6921) wifi: state: auth -> assoc (0)
I (6921) wifi: state: assoc -> run (10)
I (6961) wifi: connected with aterm-76af2c-g, channel 11
I (6961) wifi: pm start, type: 1

I (6961) network: CONNECTED
I (8191) event: sta ip: 192.168.0.8, mask: 255.255.255.0, gw: 192.168.0.1
I (8191) network: GOT_IP
```

とりあえず、本日はここまで。

次回、mpfshell を使った操作について説明します。