ESP32がリリースされて数年が経ちますが、個人的にはこの手のデバイスにはミニマル省電力を求めているので、従来のESP8266系列で十分でした。しかし今回、ESP-01Sパッケージに収まったESP32-C3モジュールがLILYGOから出たので、早速ポチってESP Easyを焼こうと先走ってみるも、はたして…
ESP32-C3搭載したLILYGO T03-C3
LILYGOから発売されたT03-C3は、ESP32シリーズでは現時点では後発のESP32−C3と4MB Flashを搭載したESP-01Sピン互換のモジュールです。海外からはAliexpressにある公式ストアより購入可能ですが、私は淘寶で買いました(RMB16送料別)。
ESP8266からESPシリーズ各種を比較したこちらのページをみてみると、ESP32-C3は他のESP32ファミリーと似て非なる印象を受け、ESP8266後継という位置づけをされるのもうなずけます。
ちなみに購入直後の状態で給電すると、シリアル通信には次のようなメッセージが流れて、特定のAPを探しているようです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Build:Feb 7 2021 rst:0x1 (POWERON),boot:0xc (SPI_FAST_FLASH_BOOT) SPIWP:0xee mode:DIO, clock div:2 load:0x3fcd6100,len:0x484 load:0x403ce000,len:0x90c load:0x403d0000,len:0x2398 SHA-256 comparison failed: Calculated: 6d8926747a1d92836b3e9159da9dd44d007b347b385302ecf893259ac6aebdaa Expected: 77332826ec7bc491df854452f675071e3a094e80858dd7d91dd7e27940204216 Attempting to boot anyway... entry 0x403ce000 scan start scan done 6 networks found 1: ##### (-56)* 2: ##### (-71)* 3: ############## (-84)* 4: ############## (-84)* 5: ##### (-90)* 6: ##### (-91)* Connecting to xinyuandianzi ............................................................................ |
外観をESP-01Sと比較
せっかくなので手持ちのESP-01Sと並べて比較してみます。まずは上面視では、外部アンテナ端子が特徴的なのがT01-C3です(下図左)。ESP-01S(下図右)に搭載されているのは1MB Flashなので、以前、ESP EasyのOTAファーム更新出来るようにするために4MB Flashへ載せ替えたりもしましたが、T01-C3では初めから4MB Flashが搭載されています。
続いて裏面を比べてみると、ピン配列も揃えていて、ESP-01S互換を謳うだけのことはあります。メーカーとしてはおそらく、リレーモジュールに搭載されているESP-01Sをすげ替えてしまおうという意気込みなのでしょう。
さらに、ESP-01SではGPIO0とGPIO2の2つのGPIOピンしか用意されていないことから、ESP Easyでシリアル通信のピンを第3のGPIOに使う方法を紹介したこともありましたが、T01-C3では初めからGPIO2, GPIO8, GPIO9の3本が用意されているようです。
esptool.pyの更新
これまでいつもESP Easyのバイナリイメージを焼くのにUbuntu 18.04母艦で使っているパッケージ版 esptool で、T01-C3を読み取ろうとするとエラーになります。
1 2 3 4 5 6 |
$ sudo esptool.py --port /dev/ttyUSB0 --baud 115200 flash_id esptool.py v2.8 Serial port /dev/ttyUSB0 Connecting... Detecting chip type... A fatal error occurred: Unexpected UART datecode value 0x03700000. Failed to autodetect chip type. |
これまでにESP32系を焼いたことはないので、ツールの更新もおろそかにしていました。パッケージ版ではこれ以降の更新はされていないので、GitHubからの手動インストールを前に、この古い esptool をアンインストール。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ whereis esptool esptool: /usr/bin/esptool /usr/share/esptool /usr/share/man/man1/esptool.1.gz $ ls -l /usr/bin/esptool lrwxrwxrwx 1 root root 27 Nov 6 2017 /usr/bin/esptool -> ../share/esptool/esptool.py $ sudo apt remove esptool パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 以下のパッケージは「削除」されます: esptool アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 2 個。 この操作後に 175 kB のディスク容量が解放されます。 続行しますか? [Y/n] y (データベースを読み込んでいます ... 現在 763303 個のファイルとディレクトリがインストールされています。) esptool (2.1+dfsg1-2) を削除しています ... man-db (2.8.3-2ubuntu0.1) のトリガを処理しています ... $ whereis esptool esptool: |
続いてesptoolの公式GitHubより現行版を git コマンドで引っ張ってきたら、こちらの開発者向けインストールガイドに従い、 pip コマンドでインストールします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$ git clone https://github.com/espressif/esptool.git Cloning into 'esptool'... remote: Enumerating objects: 4042, done. remote: Counting objects: 100% (1079/1079), done. remote: Compressing objects: 100% (679/679), done. remote: Total 4042 (delta 706), reused 720 (delta 387), pack-reused 2963 Receiving objects: 100% (4042/4042), 11.12 MiB | 1.19 MiB/s, done. Resolving deltas: 100% (2577/2577), done. $ cd esptool/ $ pip install --user -e . Obtaining file://~/esptool Collecting bitstring>=3.1.6 (from esptool==3.3.dev0) Downloading https://files.pythonhosted.org/packages/49/fa/ac153ef3c9668a093f33386edf7a20122962e9142b1105fbe2a4a4262785/bitstring-3.1.9-py3-none-any.whl Requirement already satisfied: cryptography>=2.1.4 in /usr/lib/python3/dist-packages (from esptool==3.3.dev0) (2.1.4) Collecting ecdsa>=0.16.0 (from esptool==3.3.dev0) Downloading https://files.pythonhosted.org/packages/4a/b6/b678b080967b2696e9a201c096dc076ad756fb35c87dca4e1d1a13496ff7/ecdsa-0.17.0-py2.py3-none-any.whl (119kB) 100% |████████████████████████████████| 122kB 1.2MB/s Requirement already satisfied: pyserial>=3.0 in /usr/lib/python3/dist-packages (from esptool==3.3.dev0) (3.4) Collecting reedsolo<=1.5.4,>=1.5.3 (from esptool==3.3.dev0) Downloading https://files.pythonhosted.org/packages/c8/cb/bb2ddbd00c9b4215dd57a2abf7042b0ae222b44522c5eb664a8fd9d786da/reedsolo-1.5.4.tar.gz (271kB) 100% |████████████████████████████████| 276kB 929kB/s Requirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.6/dist-packages (from ecdsa>=0.16.0->esptool==3.3.dev0) (1.11.0) Building wheels for collected packages: reedsolo Running setup.py bdist_wheel for reedsolo ... done Stored in directory: ~/.cache/pip/wheels/46/89/1a/0a99096e7310f4c2c150e02708622606f6094702e29cf6daeb Successfully built reedsolo Installing collected packages: bitstring, ecdsa, reedsolo, esptool Running setup.py develop for esptool Successfully installed bitstring-3.1.9 ecdsa-0.17.0 esptool reedsolo-1.5.4 |
インストールされたツール群は~/.local/bin/に入っているのですが、ここへのパスが通っていないと、コマンドのみで呼び出すことは出来ません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
~$ ls -l .local/bin drwxrwxr-x 2 user user 4096 Jan 19 16:03 __pycache__ -rwxrwxr-x 1 user user 223 Jul 17 2018 chardetect -rwxrwxr-x 1 user user 221 Jan 19 16:03 coverage -rwxrwxr-x 1 user user 221 Jan 19 16:03 coverage-3.6 -rwxrwxr-x 1 user user 221 Jan 19 16:03 coverage3 -rwxrwxr-x 1 user user 290 Jan 19 16:19 espefuse.py -rw-rw-r-- 1 user user 44507 Apr 7 2020 espefuse.pyc -rwxrwxr-x 1 user user 292 Jan 19 16:19 espsecure.py -rw-rw-r-- 1 user user 19956 Apr 7 2020 espsecure.pyc -rwxrwxr-x 1 user user 288 Jan 19 16:19 esptool.py -rw-rw-r-- 1 user user 127301 Apr 7 2020 esptool.pyc -rwxrwxr-x 1 user user 220 Jan 19 16:03 flake8 -rwxrwxr-x 1 user user 35097 Apr 7 2020 miniterm.py -rw-rw-r-- 1 user user 35989 Apr 7 2020 miniterm.pyc -rwxrwxr-x 1 user user 218 Jan 19 16:03 pycodestyle -rwxrwxr-x 1 user user 217 Jan 19 16:03 pyflakes -rwxrwxr-x 1 user user 73098 Jan 19 16:03 readelf.py -rwxrwxr-x 1 user user 241 Apr 15 2020 virtualenv -rwxr-xr-x 1 root root 308 May 19 2017 you-get ~$ esptools.py esptools.py: コマンドが見つかりません |
Pythonやpipに関する基礎をおさえていないので、この辺りが以前からモヤモヤしていたのですが、こちらのフォーラム回答を参考にパスを通しておきます。
1 2 3 4 5 6 7 8 |
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin $ nano ~/.profile ## 以下を追加 if [ -d "$HOME/.local/bin" ] ; then PATH="$HOME/.local/bin:$PATH" fi |
変更は次のセッションより反映されます。
1 2 |
$ echo $PATH ~/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin |
新しい esptool ではT01-C3が正しく認識されました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ esptool.py --port /dev/ttyUSB0 --baud 115200 flash_id esptool.py v3.3-dev Serial port /dev/ttyUSB0 Connecting... Detecting chip type... ESP32-C3 Chip is ESP32-C3 (revision 3) Features: Wi-Fi Crystal is 40MHz MAC: ##:##:##:##:##:## Stub is already running. No upload is necessary. Manufacturer: ef Device: 4016 Detected flash size: 4MB Hard resetting via RTS pin... |
ESP Easyは現時点未対応
実はESP Easyは未だESP32-C3に対応しておらず、公式ページにも「ESP32-C3 Support in ESPeasy will be added soon.」とあるのみです。それでもダメ元で本稿執筆時点最新の公開リリースから、次のイメージを焼いてみます。
1 2 |
1,751,856 byte ESP_Easy_mega_20211224_normal_ESP32_4M316k-factory.bin 1,686,320 byte ESP_Easy_mega_20211224_normal_ESP32_4M316k.bin |
ESP32では同じ仕様のイメージが2種類ずつ対になっており、公式ドキュメントによるとシリアル通信を介して書き込みには、ファイル名の末尾に -factory と付与されたイメージを使えばよいのだそうです(無印版はWebUIからのOTA更新向け)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$ esptool.py --chip esp32c3 --port /dev/ttyUSB0 --baud 460800 \ --before default_reset --after hard_reset write_flash -z \ --flash_mode dout --flash_freq 40m --flash_size detect \ 0x0000 ~/Downloads/ESP_Easy_mega_20211224_normal_ESP32_4M316k-factory.bin esptool.py v3.3-dev Serial port /dev/ttyUSB0 Connecting... Chip is ESP32-C3 (revision 3) Features: Wi-Fi Crystal is 40MHz MAC: 60:55:f9:71:5c:20 Stub is already running. No upload is necessary. Changing baud rate to 460800 Changed. Configuring flash size... Auto-detected Flash size: 4MB Flash will be erased from 0x00000000 to 0x001abfff... Warning: Image file at 0x0 doesn't look like an image file, so not changing any flash settings. Compressed 1751856 bytes to 983899... Wrote 1751856 bytes (983899 compressed) at 0x00000000 in 29.1 seconds (effective 481.8 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin... |
T01-C3を一度抜いてから通常起動させ、シリアルポートから覗いてみると案の定、ブートでコケていました。
1 2 3 4 5 6 7 8 |
ESP-ROM:esp32c3-api1-20210207 Build:Feb 7 2021 rst:0x7 (TG0WDT_SYS_RST),boot:0xd (SPI_FAST_FLASH_BOOT) Saved PC:0x4004d1f8 invalid header: 0x00000000 invalid header: 0x00000000 invalid header: 0x00000000 invalid header: 0x00000000 |
ESP EasyはESP32-S2のサポートもまだ制限事項が多いことから、ESP-C3で動くようになるにはまだしばらくかかりそうです。