ESP-WROOM-02 の配線

  • 34
    いいね
  • 6
    コメント
この記事は最終更新日から1年以上が経過しています。

最近 ESP-WROOM-02 弄るときはスイッチサイエンスの ESP-WROOM-02開発ボード ばっかり使っていて楽していたら、素の ESP-WROOM-02 を弄ったとの配線でアレどうするんだっけ、となったのでメモ。

何を参考にすべきか

回路図読めるなら

見るのが一番すんなりと理解出来ると。

  • 3V3
    • 直接 3.3V 電源へ。なおUSBシリアル変換チップ経由で 3.3V とると電流不足で WiFi 有効時に安定しないので注意。
  • GND
    • GND へ
  • EN
    • プルアップ用の10k抵抗はさんで3.3V電源へ
  • IO2
    • プルアップ用の10k抵抗はさんで3.3V電源へ
  • IO15
    • プルダウン用の10k抵抗はさんでGNDへ
  • IO0
    • 通常起動(ファームウェア読み込んで立ち上げ)時はHIGH、ファームウェア書き込み時にLOWに
    • なので、通常はプルアップ用に10k抵抗はさんで3.3Vへ(HIGHに)、スイッチやジャンパピンで一時的にGNDに繋いでLOWにできる回路にする
  • RST
    • Active Low構成
    • 通常はプルアップ用10k抵抗で3.3Vに繋ぎHIGHを保ち、リセット時にスイッチが押されGNDに繋がることでLOWになりリセットがかかる。
  • TXとRX
    • RXとTXへ

ファームウェア書き込み時だけ、書き込みモードでリセットをかけたい

面倒なのが、ファームウェア書き込み時に IO0 を LOW にしつつ RST でリセットが必要なことなんだけど、ESP-WROOM-02開発ボードでは、特に何も考えずファームウェア書き込み&そのファームウェアから起動ができる。

回路図を見るとRS232C側のDTRとRTSをうまく使い、ファームウェア書き込み時にIO0がLOWになった状態でRSTがLOWになりリセットがかかるようしている。

230228a8-f28f-4035-94b7-544322c37567.png

ESP8266 へのファームウェア書き込みツールの一つ、esptool.py のコードを見ると

            # RTS = either CH_PD or nRESET (both active low = chip in reset)
            # DTR = GPIO0 (active low = boot to flasher)
            self._port.setDTR(False)
            self._port.setRTS(True)
            time.sleep(0.05)
            self._port.setDTR(True)
            self._port.setRTS(False)
            time.sleep(0.05)
            self._port.setDTR(False)

なので、最初に RTS が HIGH になり TR2 のエミッタ -> コミッタへ電流が流れ IO0 が LOW (DTRに流れる、たぶん…) になりファームウェア書き込みモードになる。その後 DTR が HIGH になりリセットがかかり、RTS も同時に LOW に戻す。

これでうまく動くんだけど、RTSが先にHIGHになりDTRを後でHIGHにしたときに、リセットのタイミングがうまくいくのかよくわかってない…。タイミングによってはIO0が先にHIGHに戻ってしまいそうな気もするんだけど、問題ないのは何故なのだろうか…。解る人居たら教えて下さい…><!