Electronics

2017.10.12

すぐはじめられるようになったESP32のMicroPython

Text by Takumi Funada

DSC03473

マイコン用プログラミング環境 “MicroPython” を低価格で高性能なWiFi/Bluetooth内蔵マイコン “ESP32” で使ってみたいと思う人は多かったんじゃないでしょうか。しかし、少し検索すると、ソースからビルドする方法ばかりヒットして、ちょっと大変そうな気配。それで敬遠してしまった人もいるはず。かく言うワタクシがそうでした。

この状況は変わりました。いつからかは分かりませんが、MicroPython.orgでESP32用のバイナリが配布されるようになったのです。ありがたい! 試してみたところ、とても簡単に自分のESP32ボードをMicroPythonマシンに変身させることができました。以下はその方法です。

1. バイナリをダウンロード
http://micropython.org/download#esp32
上記に最新のバイナリが置かれています。ここでは、執筆時の最新版である “esp32-20171007-v1.9.2-276-ga9517c04.bin” をベースに説明します。

2. esptool.pyをインストール
バイナリの書き込みに必要です。pipがインストールされている環境では、

pip install esptool

とするだけで大丈夫でした。より詳しい説明はgithub上のesptoolのページにあります。

3. ESP32ボードを接続しシリアルポートを確認
筆者は秋月電子で購入したESP32(ESP-WROOM-32)開発ボードを使用しました。USBシリアルチップを搭載している場合は、この段階でそのポート名を確認してください。このボードをMacに接続すると “/dev/tty.SLAB_USBtoUART” となって現れるので、以下ではこの名前で参照します。適宜、自分の環境に合わせて読み替えてください。

4. バイナリを書き込む
esptool.pyを使って、USBシリアル経由で書き込みます。ESP32の0x1000番地以降に書き込む必要があるようです。コマンドをそのままお見せすると下記のとおり。“–port” がポート名、“-z” が番地を指定するオプションです。ファイル名は最後に書けばいいようです(ダウンロードしたファイルの名前に変更してください)。

esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART write_flash -z 0x1000 esp32-20171007-v1.9.2-276-ga9517c04.bin

5. 動作チェック
50秒ほどで書き込みは終了しました。ターミナルソフトを使ってESP32にアクセスしてみましょう。Macではこんなふうにするのがひとつの方法。WindowsではTera TermやPuTTYなどの通信アプリを導入して、しかるべきポートに115200bpsで接続してください。

screen /dev/tty.SLAB_USBtoUART 115200

接続できると “>>>” というプロンプトが表示されます(下記の起動メッセージはボードをリセットして表示したもの)。

MicroPython v1.9.2-276-ga9517c04 on 2017-10-07; ESP32 module with ESP32
Type "help()" for more information.
>>>

これでMicroPythonとの対話が可能になりました。もう少しテストするとしたら、WiFiアクセスポイントを起動してみるのはどうでしょうか。

>>> import network
>>> station = network.WLAN(network.AP_IF)
>>> station.active(True)

こうすると、“ESP_xxxx” というSSIDのアクセスポイントが見えるようになります。パスワードは設定されていません(このあたりからESP8266版MicroPythonと違う点が増えてきますので要注意。たとえば、WebREPLはESP32版には存在しないようです)。

接続後、自分のパソコンのIPアドレスは192.168.4.2になると思います。ESP32は192.168.4.1と推測して、パソコンから下記のようにpingすると返事がありました。

> ping 192.168.4.1
PING 192.168.4.1 (192.168.4.1): 56 data bytes
64 bytes from 192.168.4.1: icmp_seq=0 ttl=255 time=3.454 ms
64 bytes from 192.168.4.1: icmp_seq=1 ttl=255 time=3.036 ms

なんの苦労もなくここまでできて、ちょっと感動。次のステップに進む余力が残りますね。すっかり涼しくなったことですし、MicroPythonの書きやすさとESP32のパワーを生かすいろいろな実験をしていきたいと思っています。