Wemos Lolin ESP32 OLED に初挑戦
最近、シンプルな UI をもったデジタルガジェットを作りたいなぁと思っていました。
考えていた条件はこんな感じ。
- シンプルな UI
- いわゆる IoT 的な考え方で、ネットワーク経由でデータは蓄積したい
- 蓄積したデータはスマホ等で見られれば良い
- でもちょっとした確認もガジェット上でできるとなお良い
当然 Raspberry pi は候補に入ってくるのですが、求めている機能からするとちょっと高級すぎかなと感じていました。
しかもお値段も高いです。
Raspberry Pi Zero W なら安いけど、ずっと在庫切れですし...
そんなときに Wemos Lolin ESP32 OLED モジュールというのを発見しました。
Wemos Lolin ESP32 OLED モジュールとは
こんな特徴を持っています。
そして価格が、なんと送料込みで \1,200 程度!!(2017/11/29 現在)
やりたいことが全部満たせて、このお値段なら買いでしょ!
ということで購入してみました。
以下の Banggood.com というところで初めての購入です。
ちなみに日本の Amazon でも売ってますが、結局は中国から送られてくるようなので、それなら上記で買ったほうが安い気がします。
開封の儀
注文してから、だいたい 10 日くらいで到着しました。
分厚い緩衝材に包まれてきます。
ピンヘッダは自分ではんだ付けする必要があります。
何も考えずに USB をつなぐと、OLED にサンプルが表示されます。
これに MicroPython 環境をセットアップすることにしました。
MicroPython のセットアップ
MicroPython は、組み込みプラットフォーム上で Python を動かそうというプロジェクトです。
ESP32 向けのポーティングがあり、すぐに動かせそうなのでやってみました。
シリアルドライバーのインストール
ESP32 ボードを仮想 COM ポートとして見せるためのドライバーを下記からインストールします。
USB - UART ブリッジ VCP ドライバ|Silicon Labs
インストール後、ESP32 ボードと USB 接続します。
デバイスマネージャーに以下のような表示が出れば OK です。
この場合は COM6 に認識されたことがわかります。
ESPtool のインストール
Python 環境がすでに PC 上にある前提です。
なければ Anaconda 等でインストールしてから以下に進んでください。
ESP32 のフラッシュ書き込み等を行う ESPtool を、pip でインストールします。
pip install esptool
ESP32 のファームウェアを入手する
ESP32 用の MicroPython ファームウェアは、bin ファイルとして提供されています。
以下より入手してください。
MicroPython - Python for microcontrollers
11/29 時点では esp32-20171129-v1.9.2-444-g292816a1.bin が最新でした。
ESP32 にファームウェアを焼き込む
いよいよターゲットボードにファームウェアを焼きましょう。
まずは接続確認をします。
ESP32 ボードと PC を USB 接続し、コマンドプロンプトで以下のようにコマンドを叩きます。
COM6 のところは、ご自身の環境に合わせて変更してください。
> esptool --port COM6 flash_id esptool.py v2.2 Connecting........_____. Detecting chip type... ESP32 Chip is ESP32D0WDQ6 (revision 1) Uploading stub... Running stub... Stub running... Manufacturer: c8 Device: 4016 Detected flash size: 4MB Hard resetting...
このように何らかの返事が返ってくれば OK です。
ちなみに自分のボードでは、Connecting... のところで Boot ボタンを押さないとダメでした。
押さなくても良い、という人もいるので、ボードによってばらつきがあるようです。
返事が返ってきていれば、まずはフラッシュメモリを消します。
esptool --port COM6 erase_flash
次に、先程ダウンロードしたファームウェアを焼きます。
esptool --chip esp32 --port COM6 write_flash -z 0x1000 C:\somewhere\esp32-20171129-v1.9.2-444-g292816a1.bin
焼いている間、Boot ボタンを押しっぱなしにする必要がある、こともありました。
そうでないこともあったので、よくわかりません。
テスト
ここまでくれば、シリアルでアクセスすることで Python ターミナルが見えるはずです。
Tera term などで COM6 を開いてみましょう。
MicroPython v1.9.2-444-g292816a1 on 2017-11-29; ESP32 module with ESP32 Type "help()" for more information. >>>
ためしに print などを打ってみると
>>> print("hello") hello
いいね!!
起動時のエラーを取る
ちなみに、シリアル接続直後には以下のようなエラーが出ることがあります。
OSError: [Errno 2] ENOENT MicroPython v1.9.2-444-g292816a1 on 2017-11-29; ESP32 module with ESP32 Type "help()" for more information.
これはどうも、起動後に main.py というファイルを自動的に見に行く仕様になっているようで、
そのファイルがないと上記のエラーがでます。
このエラーを取るには、main.py を作ってあげれば良いということで、適当に作ってみましょう。
f = open("main.py", "w") f.write("print(\"main.py: Hello\")\n") f.close()
こうすると、起動後には
main.py: Hello MicroPython v1.9.2-444-g292816a1 on 2017-11-29; ESP32 module with ESP32 Type "help()" for more information.
のようになり、エラーの部分が main.py: Hello になったことがわかります。
このあとは、MicroPython 経由で OLED に文字を書いたり、BME280 モジュールを使って温湿度を取ってみたいと思います!