最近 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になりリセットがかかるようしている。
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に戻ってしまいそうな気もするんだけど、問題ないのは何故なのだろうか…。解る人居たら教えて下さい…><!