ESP32でMicropython
ESP32-WROVER-DEV
はじめに
この記事では ESP32開発ボード(ESP32-WROVER-X/ESP32-WROOM-X/etc)でMicropythonが動くようにする手順について紹介します。
動作確認はFreenoveのESP32-WROVER-DEVを使用していますが、同等品でも動作すると思います。
開発に使用するPCはMacとWindowsの両方について紹介していますので、該当ユーザはアコーデオンを展開して下さい。
In English
This article describes how to install Micropython on ESP32 development kits in Japanese.
Python3のインストール
Macユーザ
Macユーザ
ターミナル(Lanchpadでターミナルを検索)を開き、次のコマンドを実行する。
$ python3 --version
$ Python 3.9.12
上のようにバージョンが表示された場合はすでにpython3がインストールされているので、インストール作業は必要ありません。(バージョンが古い場合は更新作業が必要な場合があります)
zsh: command not found: python3
上のようにコマンドが見つからないというメッセージが表示された場合はpython3のインストール作業が必要ですので、以下のようにインストールして下さい。
ターミナルで次のコマンドを実行する。
$ brew install python3
brewコマンドがインストールされていない場合は次のようなメッセージが表示されるので、リンクのページを参照してbrewをインストールしてください。
zsh: command not found: brew
python3のインストールが完了したらターミナルで次のコマンドを実行してHello, world!が表示されることを確認します。
>>>はpython3のプロンプトで、終了はCTRL-D(CTRLキーを押したままDのキーを押す)です。
$ python3
Python 3.9.12 (main, Mar 26 2022, 15:51:15)
[Clang 13.1.6 (clang-1316.0.21.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello, world!")
Hello, world!
>>> [CTRL-D]
$
Windowsユーザ
Windowsユーザ
C:\Users\iot10 py --version
Python 3.10.8
C:\Users\iot101>py
Python 3.10.8 (tags/v3.10.8:aaaf517, Oct 11 2022, 16:50:30) [MSC v.1933 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
のように表示されればpythonはインストールされています。(pythonのプロンプトから抜けるのは、CTRL-Zをタイプした後、エンターキーを押します。)
インストールされていなければ、Microsoft Storeでpython3を検索してインストールか、下のオリジナルサイトからインストールします。
python3のインストールが完了したらコマンドプロンプトもしくはPowerShellを起動して次のコマンドを実行してHello, world!が表示されることを確認します。
>>>はpython3のプロンプトで、終了はCTRL-Z(CTRLキーを押したままZのキーを押した後にエンター機を押します)です。
C:\Users\iot101>py
Python 3.10.8 (tags/v3.10.8:aaaf517, Oct 11 2022, 16:50:30) [MSC v.1933 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello, world!")
Hello, world!
>>> ^Z
C:\Users\iot101>
esptool.pyのインストール
esptool.pyはESP32のファームウェアを削除したり、アップロードしたりできるブートローダユーティリティです。
Macユーザ
Macユーザ
ターミナルで次のコマンドを実行してesptool.pyをインストールします。
$ pip3 install esptool
:
:
:
$
インストールしたesptoolのバージョンを次のコマンドで確認します。
$ esptool.py version
esptool.py v4.2.1
4.2.1
Windowsユーザ
Windowsユーザ
コマンドプロンプトもしくはPowerShellで次のコマンドを実行してesptool.pyをインストールします。
C:\Users\iot101> py -m pip install esptool
Collecting esptool
:
:
:
C:\Users\iot101>
esptool.pyのバージョンを次のコマンドで確認します。
C:\Users\iot101>esptool.py version
esptool.py v4.3
4.3
C:\Users\iot101>
ampyのインストール
ampyはPCからESP32にファイルを転送したり、削除したりするためのツールの一つです。
Macユーザ
Macユーザ
次のコマンドを実行してampyをインストールします。
$ pip3 install adafruit-ampy
:
:
:
$
インストールが完了したら次のコマンドを実行してバージョンを確認します。
$ ampy --version
ampy, version 1.1.0
$
Windowsユーザ
Windowsユーザ
次のコマンドを実行してampyをインストールします。
C:\Users\iot101>py -m pip install adafruit-ampy
Collecting adafruit-ampy
:
:
:
C:\Users\iot101>
インストールが完了したら次のコマンドを実行してバージョンを確認します。
C:\Users\iot101> ampy --version
ampy, version 1.1.0
C:\Users\iot101>
ターミナルソフトのインストール
ターミナルソフトはPCとESP32との間をUSBケーブルを介してシリアル通信するためのソフトです。
この記事ではMac/Windows/Linuxに対応したCoolTermを使用します。
動作テストで使用するので、下のリンクから自分のOSにあったものをダウンロードしてインストールして下さい。
他のターミナルソフトをすでにインストールしている場合は、それを代用できるので、この項目は飛ばして下さい。
ファームウェアのインストール
下のリンクからReleasesの最新バージョンをPCにダウンロードして下さい。
記事執筆時のバージョンは v1.19.1 (2022-06-18) .bin となっています。
FreenoveのESP32-WROVER用スターターキットでは下の写真のように、GPIO拡張ボードが付属しているので、一般的な5穴のフルサイズブレッドボード(長辺約16cm)でも実装できます。
GPIO拡張ボードがない場合は、6穴のブレッドボードを用意して、ESP32を直接ブレッドボードに実装して下さい。6穴ハーフサイズブレッドボード(長辺8cm)の場合、部品実装を考慮して、2枚を横長に連結して使用することをお勧めします。
ブレッドボードによっては、5穴のブレッドボードを長辺同士結合して、ESP32を2枚のブレッドボードに跨らせて実装するという方法もあるようです。
Micropythonのファームウェアを入れるだけなら、GPIO拡張ボードやブレッドボードは必要ありませんが、今後、IoT関連の実験を行う上で必要となってくるので、用意しておくことをお勧めします。
ESP 32-WROVER-DEVのように、使用する開発ボードにカメラが実装されている場合は、コネクタの黒い部分を90°持ち上げて、カメラをゆっくりと引き抜いてから、黒い部分を元に戻しておいて下さい。
ESP32-WROVER-DEVをGPIP拡張ボードを使用してブレッドボードに取り付けた例
6穴ハーフサイズブレッドボードの例
Sunhayato online Shopの画像を引用
PCとESP32をUSBケーブルで接続してください。
Macユーザ
Macユーザ
MacがESP32をどのようなデバイス名で認識しているか調べるために次のコマンドを実行します。
$ ls /dev/tty.usb*
/dev/tty.usbserial-14140
$
usbserial-の後の数字は使用しているUSBポートや接続しているUSBアダプタによって変わる可能性があります。
既存ファームウェアの削除
次のコマンドを実行して既存ファームウェアを削除します。
$ esptool.py --chip esp32 --port /dev/tty.usbserial-14140 erase_flash
esptool.py v4.2.1
Serial port /dev/tty.usbserial-14140
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: 94:e6:86:df:b0:ec
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)... ←ここで暫く待たされます
Chip erase completed successfully in 15.9s
Hard resetting via RTS pin...
$
/dev/tty.usbserial-14140の部分は先に調べたデバイス名に変更してください。
Micropythonファームウェアのアップロード
続いて、先ほどダウンロードしたMicrpythonのファームウェアを次のコマンドを実行してアップロードします。
/dev/tty.usbserial-14140の部分は先に調べたデバイス名に変更してください。
$ esptool.py --chip esp32 --port /dev/tty.usbserial-14140 --baud 460800 write_flash -z 0x1000 ~/Downloads/esp32-20220618-v1.19.1.bin
esptool.py v4.2.1
Serial port /dev/tty.usbserial-14140
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: 94:e6:86:df:b0:ec
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Flash will be erased from 0x00001000 to 0x0017efff...
Compressed 1560976 bytes to 1029132...
Wrote 1560976 bytes (1029132 compressed) at 0x00001000 in 27.2 seconds (effective 459.7 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
$
Windowsユーザ
Windowsユーザ
PCがESP32を認識しているか調べるためにデバイスマネージャを開きます。(開き方がわからない場合、Windowsの検索機能で検索して下さい)
下の画面コピーのように、ポート(COMとLPT)として認識されていれば大丈夫です。
この例ではCOM3として認識していますが、使用している環境に応じて変わります。
もし認識しない場合は、次のサイトからデバイスドライバをダウンロードしてインストールしてください。
既存ファームウェアの削除
コマンドプロンプトもしくはPowerShellを開き、次のコマンドを実行して既存ファームウェアを削除します。
com3の部分はデバイスマネージャに表示されたデバイス名に変更してください。
C:\Users\iot101> esptool.py --chip esp32 --port com3 erase_flash
esptool.py v4.2.1
Serial port com3
Connecting...
Failed to get PID of a device on com3, using standard reset sequence.
...
Chip is ESP32-D0WD-V3 (revision 3)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 94:e6:86:df:b0:ec
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)... ←ここで暫く待たされます
Chip erase completed successfully in 16.6s
Hard resetting via RTS pin...
C:\Users\iot101>
Micropythonファームウェアのアップロード
続いて、先ほどダウンロードしたMicrpythonのファームウェアを次のコマンドを実行してアップロードします。
com3の部分はデバイスマネージャに表示されたデバイス名に変更してください。
C:\Users\iot101> esptool.py --chip esp32 --port com3 --baud 460800 write_flash -z 0x1000 Downloads\esp32-20220618-v1.19.1.bin
esptool.py v4.2.1
Serial port com3
Connecting...
Failed to get PID of a device on com3, using standard reset sequence.
..
Chip is ESP32-D0WD-V3 (revision 3)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 94:e6:86:df:b0:ec
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Flash will be erased from 0x00001000 to 0x0017efff...
Compressed 1560976 bytes to 1029132...
Wrote 1560976 bytes (1029132 compressed) at 0x00001000 in 25.2 seconds (effective 496.2 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
C:\Users\iot101>
動作テスト
次にターミナルソフトCoolTermを起動して動作テストを行います。
Macユーザ
Macユーザ
先にインストールしたターミナルソフトのCoolTermを起動します。
- 画面上部のOptionsをクリックするとConnection Optionsのパネルが開くので、Portをusbserial-1414-(自分の環境に合わせて変更してください)に、Baudrateを115200に変更します。他はデフォルトのままで大丈夫です。usbserial-1414-が表示されない場合は画面下部にあるRe-Scan Serial Portsボタンをクリックすると表示されるはずです。
画面下部のOKボタンを押してConnection Optionsのパネルを閉じます。
- 画面上部のConnectボタンをクリックします。
- ESP32のリセットボタンを押します。(ESP32-WROVER-DEVではUSBコネクタとVcc端子の間にある、EN/RSTと表示された方のボタンです)
- ESP32と通信が始まり、メッセージが表示されます。
ESP32からのメッセージが表示されたことが確認できたら次のプログラムを>>> のプロンプトに続けて入力して、Hello, World! が表示されることを確認してください。
>>> print("Hello, World!")
Hello, World!
>>>
Windowsユーザ
Windowsユーザ
先にインストールしたターミナルソフトのCoolTermを起動します。
- 画面上部のOptionsをクリックするとConnection Optionsのパネルが開くので、PortをCOM3(自分の環境に合わせて変更してください)に、Baudrateを115200に変更します。他はデフォルトのままで大丈夫です。COM3が表示されない場合は画面下部にあるRe-Scan Serial Portsボタンをクリックすると表示されるはずです。
画面下部のOKボタンを押してConnection Optionsのパネルを閉じます。
- 画面上部のConnectボタンをクリックします。
- ESP32と通信が始まり、メッセージが表示されます。
ESP32からのメッセージが表示されたことが確認できたら次のプログラムを>>> のプロンプトに続けて入力して、Hello, World! が表示されることを確認してください。
>>> print("Hello, World!")
Hello, World!
>>>
これでこの記事は終わりです。
次はVisual Studio Codeで開発環境を作る記事を書く予定にしています。
Discussion