AND OR  

Top

ESP32

ESP32-WROOM-32EのDatasheet

スペック

ESP32-DevKitC-32E (ESP-WROOM-32E, chip: ESP32-D0WD-V3)
CPU: Tensilica Xtensa Dual-Core LX6 @ 160 / 240Mhz
SRAM: 520KB
Flash Memory: 4MB (PSRAM無し)
Wi-Fi: 802.11n up to 150 Mbps / 802.11g up to 54 Mbps / 802.11 b/g/n/d/e/i/k/r
Bluetooth: v4.2 BR/EDR and BLE specification
Power: 2.2~3.6V / 80 mA
Pin: 38pin

互換ボードはいろんなメーカーから出ているようだけど、Espressif製のものはチップ上部から黒いPCBアンテナ部分がはみ出ている。互換ボードより少しだけ高くなるけど安心を買いたい人はEspressif製を選んだ方が良い。ちなみに2022/12現在、Amazonだと純正ボードは2,890円だった。円安と半導体不足の影響もあって安いとは言えなくなっている。

環境

OS: Windows10 Pro (x64)
デバイス: ESP32-DevKitC-32E (ESP-WROOM-32E)
開発環境: VisualStudioCode + PlatformIO/PyMakr
言語: C/MicroPython

デバイスマネージャーで正常にドライバを認識しているか事前に確認しておく

CP210x_driver.png

↑の場合、シリアルポートCOM4で認識している

開発

MicroPython

ファームウェアを書き換えるので以下の公式サイトから最新ファームウェアをダウンロード。
MicroPython - Python for microcontrollers
導入にはesptoolを使う。Python製なのでpip経由でインストール可能。

ファームウェア書き込みが終わったらシリアルモニターを開く、自動的にREPLが起動されるので動作確認。

MicroPython 3.4.0が無事インストールされた。MicroPythonで読み込める組み込みモジュールは以下のように確認できる。モジュールの名前に接頭辞 u がついているもの(例: umachine)は接頭辞の無いもの(例: machine)にエイリアスされる。

VSCodeでMicroPython用プロジェクトを作成・認識させるには micropy-cli を使うと便利。typeshedのスタブが生成されてコード補完やlint設定が効くようになる。

MicroPythonを使いたい場合はこれらの対応をすれば大きな不自由なく開発できそう。

ネットワーク

Wi-Fi

ESP32 + MicroPythonならWi-Fi接続も簡単にできる。

connecting to wi-fi ...
# (IP, netmask, gw, DNS addresses)
network: ('192.168.100.17', '255.255.255.0', '192.168.100.1', '192.168.100.1')

ESP32をアクセスポイント(AP)にしたい場合も簡単。

上記の例はセキュリティ皆無なので実運用では使わないように。ローカルIPはデフォルトだと192.168.4.1になる。

Bluetooth

あとでやる

センサー

BMP180

Lチカは飛ばして、たまたまジャンクっぽいBMP180があったのでMicroPython経由で試す

  • ESP32 with BMP180 Barometric Sensor | Random Nerd Tutorials
  • micropython-IMU/micropython-bmp180 温度は大体±2℃くらい誤差があり、気圧と標高は明らかにおかしい。はんだ付け少し失敗してたし安物センサーだし妥当かな。

その他

Deep Sleepモード

Deep Sleepモードは間欠動作させるときに使える。

Deep Sleepから復帰した時は、machine.deepsleep() から制御が返るわけではなく、main.pyの先頭から再実行される。

CPU

ESP32(ESP32-DevKitC-32E)のCPU周波数はデフォルトで160MHzになっていたが、machineモジュール経由で周波数を変えられる。ただ、軽いIoT用途で使うケースがほとんどなので160MHzで省電力運用した方が良さそう。

ハードウェア

MCUの内部温度はesp32モジュール経由で取得できるけど、正しい値かわからない。

''GPIO''
GPIO 34番以降は入力専用らしくPULLUP/PULLDOWNできない。MicroPython上でも出力用に設定するとエラーになった。

ValueError: pin can only be input

Tips

''REPLソフトリブート''
MicroPythonのREPL上でCtrl+Dでソフトリブートされ、boot.py/main.pyが自動実行される。

参考サイト

網羅的に図解付きでいろんなサンプルが公開されている、MicroPythonの公式サイトとここだけ見てればあとは適当に応用するだけ