ESP32 WROOM 32Dをmicropythonで開発する方法


Devkitでのmicropython書き込み方法はいくつか記事であったのですが、生のESP32をmicropythonで開発する方法を書いた記事はなく、苦労の結果なんとか方法がわかったので記しておきます。

エディタ

LチカやってみたレベルならArduino IDEやThonyでもできますが、コード補完もないエディタでプログラミングは現実的ではないでしょう。(普通のエンジニアならVSCodeを使っていますよね)

私はArduino言語で書くならplatformio、micropythonで書くならPymakrを使っています。

そして、よほどのことがない限り(Arduino.hでしか使えないライブラリがあるなど)はmycropythonで書いています。

開発ボード

amazonでも手に入ります。(安物は技適通ってなかったり不良品だったりするので、失敗したくない場合はメーカーもの書いましょう。千円ケチって丸一日無駄にしないように。)

https://amzn.to/3xay0AX

一台や二台なら開発ボードでもいいんですが、IoTを本格的にやっていこうと思ったら開発ボードは高い。半導体不足と円安で半年前の倍くらいに値段上がってます。

開発ボードではないESP32とDIPツールなら、もっと安くで開発できます。

準備するもの

  • esp32
  • esp32 DIP化キット
  • CP2102 -> こちらで調達できます https://amzn.to/36QeMWJ
    その他ジャンパ線やブレッドボード、Lチカ用のLEDなど

今のところ、Pymakrで書きこみできるのはCP2102だけです。CH340Eなども試しましたができませんでした。

書き込み準備とファームウェアの書き込み

esptoolをインストール

pip install esptool

ファームウェアはここからダウンロードします。(記事作成時点ではv1.18が最新でした)

https://micropython.org/download/esp32/

ダウンロードフォルダの中にファームウェアが入っている状態にしときましょう。

CP2102とESP32を次の要領で繋ぎます
[CP2102] [ESP32]

  1. 3.3V 3.3V
  2. GND GND
  3. RX TX
  4. TX RX
    ※開発モジュールの場合は、開発モジュールのUSB type-b端子とmacのtype-c端子を接続するだけです。

Macのコンソールで、まずはESP32がUSB接続されていることを確認

ls /dev/tty.*

たぶん、usbserial-0001で接続されていると思います。

ファームウェアの消去

esptool.py --port /dev/tty.usbserial-0001 erase_flash

※もし消去ができない場合はIO0をプルアップ(3.3Vに接続)した状態で消去してみてください。。

新規ファームウェアの書き込み

esptool.py --chip esp32 --port /dev/tty.usbserial-0001 write_flash -z 0x1000 ~/downloads/esp32-20220117-v1.18.bin

VSCodeで書き込みできるようにする

こちらの方の記事が非常にわかりやすいです。

https://zenn.dev/nnabeyang/articles/3c8d6783f75190

!!注意 VSCodeの2022年3月アップデート版では、pymakrが動作しません。もしVSCodeでPymakrが動かなくなってしまったら、以下のサイトで「January 2022(version 1.64)」を選び、Downloadsで古いバージョンをダウンロードしましょう。

https://code.visualstudio.com/updates/v1_64

書き込み

ファームウェア書き込み時と同じようにCP2102とESP32を以下の通り繋ぎます。
[CP2102] [ESP32]

  1. 3.3V 3.3V
  2. GND GND
  3. RX TX
  4. TX RX

とりあえずLチカでもしてみましょう。

main.py

from machine import Pin
import utime

ledPin = Pin(13, Pin.OUT)

for i in range(10):
    ledPin.on()
    utime.sleep(1)
    ledPin.off()
    utime.sleep(1)

ESP32のピンを、IO0 - GNDに接続した状態でEN - GNDに差し込むと書き込みモードでリセットできます。
この状態で書き込みを開始し、ENをプルアップ(10kΩ抵抗を介して3.3Vに接続)すると書き込みができます。

書き込みができたら、今度はIO0をどこにも繋がない状態でリセット(ENをGND->3.3Vに繋ぐ)してみてください。

Lチカができたはずです。

お知らせ

大阪の長居公園の近くにあるエンジニアハウスでは、エンジニアが集まって電子工作やweb制作をしています。
(web制作をやっている人が、エンジニアハウスに来てから電子工作にハマるようになるのが多いです)

https://engineerhouse.org/

土日に活動していますので、興味ある方は覗きにきてください。
管理者メールアドレス  [email protected]