micropythonを使ってESP32でLチカ

2020/04/27

ESP32 python プログラミング

ESP32を購入したので、Lチカをやってみます。

Aruduino IDEを使った環境構築の記事はあったのですが、自分はpythonの方が慣れているので、micropythonを使った環境構築をしていきます。
私の環境はwin10でpython3.7.4がインストールされています。

また、今回購入したESP32はこちらです。
(2022/08/27追記)
当時私が購入したESP32が欠品となっていたため、商品リンクを張り替えています。

環境構築

こちらのサイトを参考に環境構築を行いました。https://wak-tech.com/archives/1008

ファームウェアのダウンロード

まず初めに下記サイトからファームウェアを入手します。

ダウンロードページに行ったらめちゃくちゃ種類があります。
大きく分けるとv3.xとv4.xがあるみたいです。二つの違いがわからなかったので、それぞれの説明を読みます。

v3.x
Firmware built with ESP-IDF v3.x, with support for BLE, LAN and PPP:
(BLE(Bluetooth)、LAN、PPPをサポートしています。)
v4.x
Firmware built with ESP-IDF v4.x, with support for BLE, but no LAN or PPP:
(BLE(Bluetooth)はサポートしていますが、LAN、PPPはサポートしていません)

上記説明を見た感じv3.xの方が上位互換なんですかね?
「迷ったらv3.x」を使えといった文章もあったので、今回はv3.xをダウンロードしてみます。
(Firmware is provided using either ESP-IDF v3.x or v4.x. If in doubt use v3.x.)

また、v3.xの中にもめちゃくちゃ種類があります。調べてみると大きく分けて3種類あるみたいです。
(私が見た感じだとSPRAMサポート付き安定ビルドファームウェアもあるので、4種類な気がしますが。)
  • 安定ビルド版ファームウェア
  • 毎日ビルド版ファームウェア
  • SPRAM サポート付き毎日ビルド版ファームウェア

ファイル名にここ最近の日付と"unstable"と書いてあるのが毎日ビルド版ファームウェアだと思います。安定ビルド版はそれ以外だと思います。。
(esp32-idf4-20200422-v1.12-388-g388d419ba.binというのがどういう位置づけか分からなかったですが。。。)

はじめての人は安定板ファームウェアがおすすめと書いてあったので、
今回は最新バージョンであるesp32-idf3-20191220-v1.12.binをダウンロードしました。
(私が買ったボードがSPRAM対応しているのか不明だったので、とりあえず標準的なものを選択してます。)

ESP32にファームウェアを書き込む

ESP32にファームウェアを書き込む方法が2種類あったため、2種類とも紹介します。

Espressif社公式のツールを使う方法

ESP32を開発したEspressif社公式のFlash Download Toolsを使って先ほどダウンロードしたファームウェアを書き込みます。
ツールは下記サイトからインストールできます。
インストールしたらフォルダ内にあるexeファイルを実行します。
実行したところ、windowsDefenderに引っかかってしまいました。
今回は実行しますが、あまり実行しないほうがいいかもしれないですね...

起動したらDeveloper ModeとFactoryModeの選択画面が出てきます。
今回はDeveloper Modeを選択します


次にESP32を選択します。

そしたら先ほどダウンロードしたファームウェアを選択して下記のように設定します。
COMはESP32が認識しているポートを選択してください。
確認方法はデバイスマネージャーで見ることができます。

デバイスマネージャーを開いた状態でESP32を抜き差しして変化したところがESP32を認識しているポートです。私の場合は下記のようにCOM3だったので、COM3を選択しています。

(もしESP32が認識できない場合)
今回写真をスクショを取り忘れてしまいましたが、最初ESP32にビックリマークがついて、不明なデバイスとしてなっていました。このような場合は右クリックしてアンインストールという項目があったので、一度アンインストールして再度USBを抜き差しすると認識してくれました。

少し話がずれてしまいましたが、設定をしたらSTARTボタンを押します。
そうするとエラーが起きてしまいました、

調べてみると書き込む際にESP32のBootボタンを押しながらじゃないと書き込みができないという記事がありました。Bootボタンの場所は下記を参照してください。
(画像はhttps://kit.socinno.com/1_3_b/より引用)

Bootボタンを押したらうまく書き込むことができました。

pythonのモジュール使う場合

pythonのモジュールにesptoolというESP32を操作することができるライブラリがあります。こちらもEspressif社が提供しているライブラリです。
https://github.com/espressif/esptool
このライブラリのコマンドについてはこちらの記事に詳しく記載されています。
https://lang-ship.com/blog/work/esp32-esptool-py/

公式ツールがWindowsDefenderにブロックされる怪しいソフト(中国製だからですかね?)なので、こちらで実行するほうがいいかもしれないですね...

まず初めにコマンドプロンプトを開き、下記コマンドを入力しesptoolをインストールします。
pip install esptool
上記コマンドが認識できない場合はpythonが正しくインストールできていない可能性があります。

インストールしたら、最初に入れたファームウェアが保存されているフォルダに移動し、下記コマンドを入力しESP32を初期化します。
esptool --port COM3 erase_flash
上記"COM3"となっている箇所はESP32を認識しているポートにしてください。
(先ほども書きましたが、どのポートで認識しているかはデバイスマネージャーで確認できます。)

何もしないと例のごとく通信に失敗します。


Connectingとなっている最中にESP32のBootボタンを長押したら上手くいきました。

初期化が完了したら下記コマンドを入力し、ファームウェアの書き込みを行います。

esptool --chip esp32 --port COM3 write_flash -z 0x1000 esp32-idf3-20191220-v1.12.bin

すんなり書き込みが終わりました。

個人的にはGUIのツールを使うよりこちらのほうが手軽にできるような気がします。

uPyCraftをインストール

AruduinoでいうところのAruduino IDEのようなものがmicropython+ESP32の場合でもあるみたいです。(https://blog.boochow.com/article/453812032.html)
下記サイトからexeファイルを入手します。
ダウンロードしたexeファイルを実行すると「フォントをインストールしろ」というメッセージが出てきたので、OKを押してフォントをインストールします。


開いたらTool→Serial→COM3を選択します。
うまく通信が成功すると>>>が表示されます。(下記赤枠)

(もしうまくいかない場合)
通信開始しようとするとファームウェアの書き込み要求が出てくる場合があります。
そうなったらUSBを一度抜き差ししたり、もう一度ファームウェアの書き直しをするとうまくいく場合があります。

通信が開始されたら正しく通信ができているか確認します。下記のようにprint文を書いてtestという字が表示されたら問題なく通信ができています。

いよいよLチカ

Lチカするまで長かったですが、いよいよLチカをしていきます。
ESP32はLEDが内蔵されているので、それを使ってLチカをやっていきます。
内蔵LEDはD2ピン接続されているようなので、ピン番号として2を選択します。

後は下記手順で書き込みができます。


Lチカした結果が下記の動画です。きちんと点滅しているのがわかります。

最後に

私の環境が悪い可能性もありますが、なぜか定期的にシリアル通信ができなくなりました。そうなった場合はUSBを抜き差しして再度認識し直すか、ファームウェアを書きなおすとうまくいきました。(この解決策は正しい気がしませんが...)

自己紹介

はじめまして 社会人になってからバイクやプログラミングなどを始めました。 プログラミングや整備の記事を書いていますが、独学なので間違った情報が多いかもしれません。 間違っている情報や改善点がありましたらコメントしていただけると幸いです。

X(旧Twitter)

フォローお願いします!

ラベル

QooQ