知識の枝

"All is well"

ESP32でMicroPythonを使う

約184日前 2022年2月8日21:44
デジタル
Python ESP32

改訂履歴


2022/2/8 投稿

1. ESP32とPython


作りたいデバイスがあったのでESP32というwifiやbluetoothの使えるマイコンを買いました。




標準で使用される言語はArduinoと同じくC言語です。

Arduinoをプログラミングする場合と同じ文法でコードを書くことができます。


C言語で開発を進めるのも良いですが、調べてみるとどうやら他の言語も使えるそうです。

その中でも今回はMicroPythonという、その名の通り「Python」と同じ文法でコードを書くことができる言語をESP32の言語として用いることにしました。


2. MicroPython導入


購入した時点ではMicroPythonを使える状態にはなっていませんので、手作業で導入します。

まずはESP32とPCをUSBケーブルで接続します。

このとき、ケーブルの相性によってはPCがESP32を認識してくれないことがあります。

認識しているかどうかは "デバイスマネージャー > ポート(COMとLPT)" で確認することができます。




上記写真のように

"Silicon Labs CP210x USB to UART Bridge (COM8)" のような表示がされていれば接続OKです。
このとき"COM●●"の部分を覚えておきましょう。後で使います。

もしそれらしい表示が無ければPCがデバイスを認識していませんので、別のケーブルで再接続してみましょう。

接続が確認できたら次のステップです。


ESP32をMicroPython用に書き換えるファイルをMicroPythonの公式サイトからダウンロードして下さい。

リンク
MicroPython ダウンロードページ


色々な機種が並んでいますので、その中から "ESP32" をクリックします。




Firmwareの最新バージョン (latest) を選択し、ダウンロードします。
('22年2月時点で最新版の "v1.18(2022-01-17).bin" をダウンロード)




ダウンロードしたフォルダを覚えて置いて下さい。


続いてPythonに "esptool" をインストールします。

Pythonが使える環境で下記コマンドを実行しましょう。
> pip install esptool
インストールが完了したら、下記コマンドでESP32の中身を空にします。

> esptool.py --port COM8 erase_flash
このとき、"COM8" の部分はデバイスマネージャーで確認した名前に書き換えて下さい。
この名前はそれぞれ環境によって異なります。


もし消去の途中で下記のようなエラーが出た場合は、ESP32の "Boot" ボタンを押してみて下さい。
> esptool.py.exe --port COM8 erase_flash
esptool.py v3.2
Serial port COM8
Connecting......................................

A fatal error occurred: Failed to connect to Espressif device: Wrong boot mode detected (0x13)! The chip needs to be in download mode.
For troubleshooting steps visit: https://github.com/espressif/esptool#troubleshooting


エラー無く進むと下記のようなログが表示されます。
> esptool.py --port COM8 erase_flash
esptool.py v3.2
Serial port COM8
Connecting...............
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting.....
Detecting chip type... ESP32
Chip is ESP32-D0WD-V3 (revision 3)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: **:**:**:**:**:**
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 4.2s
Hard resetting via RTS pin...



では早速MicroPythonを書き込みます。
先程公式サイトからダウンロードしてきた "v1.18(2022-01-17).bin" を保存したフォルダにcdしましょう。
(もしくは上記のファイルを現在のpythonの実行ディレクトリに移動させて下さい)

下記コマンドでMicroPythonの書き込みを開始します。
一番最後の部分はダウンロートしたファイル名です。
> esptool.py --chip esp32 --port COM8 write_flash -z 0x1000 esp32-20220117-v1.18.bin
問題なければ下記のようなログが表示されます。
> esptool.py --chip esp32 --port COM8 write_flash -z 0x1000 esp32-20220117-v1.18.bin
esptool.py v3.2
Serial port COM8
Connecting.........
Chip is ESP32-D0WD-V3 (revision 3)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: **:**:**:**:**:**
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Flash will be erased from 0x00001000 to 0x0017cfff...
Compressed 1555136 bytes to 1022998...
Wrote 1555136 bytes (1022998 compressed) at 0x00001000 in 94.4 seconds (effective 131.7 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
これで導入完了です。
ログに表示されているように、94.4秒も掛かりました。気長に待ちましょう。


3. MicroPythonを動かす


3.1 - Thonnyのインストール


プログラムの作成や書き込みに使用するIDEをPCにインストールします。

リンク
Thonny 公式サイト

公式サイトの右上に "Download version ●● for ○○" とあるので、自分のOSにあったソフトをダウンロードして下さい。




ダウンロードしたらダブルクリックしてインストールします。






インストールが完了したらThonnyを起動しましょう。


3.2 - Thonnyの設定


起動するとこんな画面になりますので、「ツール」→「Options...」を開きます。




「インタプリタ」タブを開き、ドロップダウンリストから "MicroPython (ESP32)" を選択します。




続いて下部のドロップダウンリストでデバイスマネージャーで表示されていた名前を選択します。
(今回の場合は "Silicon Labs CP210x USB to UART Bridge (COM8)")




"OK" を押すとUSBで繋がったESP32と接続され、MicroPythonのREPLが立ち上がります。
(下半分の画面)




REPLではPythonを使うことができます。
試しにPrint()を使用してみます。




ちゃんとPythonが動作していますね。


3.3 - もう少し触ってみる


実際にESP32を使ってLEDを点灯させてみましょう。

ブレッドボードを使い、下図のような回路を組んでみます。




組んでみました。




REPLで順番にコードを実行していきます。
>>> from machine import Pin
>>> led = Pin(23, Pin.OUT)
>>> led(1)
led(1)で点灯、led(0)で消灯です。
これはled(True)、led(False)でも同様に動作します。





3.4 - 本体に保存する


先程のプログラムを改造し、LEDが点滅するコードをESP32に保存して動作させてみましょう。

通称 "Lチカ" です。


上半分の画面に下記のコードを書きます。
import time
from machine import Pin

led = Pin(23, Pin.OUT)
while True: # 下記を繰り返す
led(True) # LED点灯
time.sleep(0.5) # 0.5秒継続
led(False) # LED消灯
time.sleep(0.5) # 0.5秒継続
プログラムを書き終えたら、「ファイル」→「Save as...」をクリックして保存します。




保存先は "MicroPython device" とします。




保存名は "main.py" として下さい。> "OK" をクリック




書き込みが終わったらESP32本体の左側のボタン(ENと書いてあります)を押して下さい。

LEDがチカチカ点滅したら動作OKです。





4. MicroPythonを使ってみて


Pythonの記述方式で書けるのは非常に便利だと感じました。

コード見たときに分かりやすく、しばらくはMicroPythonでコーディングしようと思います。

以上です。ここまで読んで頂きありがとうございました。