子育てしながらエンジニアしたい

現在 3 歳 女の子の子育て中エンジニアによる、技術系 + 日常系ブログ。

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 というところで初めての購入です。

www.banggood.com

ちなみに日本の Amazon でも売ってますが、結局は中国から送られてくるようなので、それなら上記で買ったほうが安い気がします。

開封の儀

注文してから、だいたい 10 日くらいで到着しました。

f:id:edosha:20170915230517j:plain:w400

分厚い緩衝材に包まれてきます。

f:id:edosha:20170915230523j:plain:w400

ピンヘッダは自分ではんだ付けする必要があります。

f:id:edosha:20170915230527j:plain:w400

何も考えずに USB をつなぐと、OLED にサンプルが表示されます。
これに MicroPython 環境をセットアップすることにしました。

MicroPython のセットアップ

MicroPython は、組み込みプラットフォーム上で Python を動かそうというプロジェクトです。
ESP32 向けのポーティングがあり、すぐに動かせそうなのでやってみました。

シリアルドライバーのインストール

ESP32 ボードを仮想 COM ポートとして見せるためのドライバーを下記からインストールします。

USB - UART ブリッジ VCP ドライバ|Silicon Labs

インストール後、ESP32 ボードと USB 接続します。
バイスマネージャーに以下のような表示が出れば OK です。

f:id:edosha:20171129142737p:plain

この場合は 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 モジュールを使って温湿度を取ってみたいと思います!