前回、「【電子回路】ESP32書き込み分離②:USB TypeCでシリアルポート認識されない?」の記事の続き。3度目の正直なるか?
秋月のCH340E USBシリアル変換モジュール
回路図はこちら
ESPRESSIFの公式に、Hardware Connectionというセクションがあり、ESP32シリーズのさまざまなボードでの USB to Serial converterとの接続方法が記載されている。
https://docs.espressif.com/projects/esp-at/en/latest/esp32/Get_Started/Hardware_connection.html
書き込みでは通常UART0を使用
ちなみに、ESP32 ATは2つのUARTポートを使用し、UART0はファームウェアのダウンロードとログ出力に使用され、UART1はATコマンドの送信とATレスポンスの受信に使用されるとのこと。知らなかった。書き込み(プログラムのアップロードやファームウェアの更新)の場合、通常はUART0を使用するらしい。
今回は、ESP32-WROOM-32Eを使用しているので、下記が該当する。
ただ、RTS(Request to Send)、CTS(Clear to Send)に関しては、UART1の場合に必要なので今回は不要そう
シリアル通信エラーが解決できない!
というわけで、下記のように、GND、VCC、RX、TXのみ接続して書き込みを試みる。
結果は、シリアル通信エラー。書き込み基板から送信を試みるも、受信できない状態。
いろいろ調べてみて、仮説の一つとしては、通信機器同士の電圧が異なっていたことが原因なのでは?と。
書き込み基板の方は、降圧レギュレーター(5V→3.3V)がないので、ESP32モジュールのVCCピンには3.3Vではなく5Vが入力される(Arduino用)。
というわけで、書き込みに関しては、TX, RXのみを用いて、ESP32モジュールの方に給電を行うという方法で試みる。
結果は、またしても同じシリアル通信エラー。これで、理論上はうまくいくはずなんだけどなぁ。。
もしかしたら、ブートモードの問題なのか?
こちらの記事で記載したが、ESP32を書き込みモードにするためには、IO0をGNDに接続してLOWにする必要があるが、通常は内部プルアップ抵抗でHIGHになっている。
今回の秋月のCH340Eに関しては、書き込み側の基板にIO0へ接続するピンがない。なので、I0Oは常にHIGHのままなので、書き込みできないのかなと。もちろん自動ブートローダーの回路もない。
この時点で、仮説は立ったものの、明確な理由が分からなくなったので、自作基板を待つことにした。
自作基板での検証
JLCPCBに基板発注してから1週間程度で、基板到着。今回は黒色にした。シックでかっこいい。
回路ミスが発覚(TX・RX)
これでうまくいくはずと思い、意気揚々と、自作書き込み基盤とESP32モジュール搭載基板を装着。
あれ、シリアルポートは検出してくれたが、また同じくシリアルデータを受信できないというエラーが。。。
Auto-detected: /dev/cu.wchusbserial1430
Uploading .pio/build/upesy_wrover/littlefs.bin
esptool.py v4.5.1
Serial port /dev/cu.wchusbserial1430
Connecting......................................
A fatal error occurred: Failed to connect to ESP32: No serial data received.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
*** [uploadfs] Error 2
================================================================= [FAILED] Took 11.09 seconds =================================================================
Environment Status Duration
------------- -------- ------------
upesy_wrover FAILED 00:00:11.092
============================================================ 1 failed, 0 succeeded in 00:00:11.092 ============================================================
make: *** [uploadfs] Error 1
これでもダメか?と途方に暮れかけたところ、なぜか、LED光が書き込み基板のTXではなく、RXの方のみ点滅している。
普通、シリアル通信エラーの場合、書き込み基板からESP32モジュールへの送信(TX)のみが光ってRXが光らないことはあるが、逆は起こり得ないよなと思い、再度書き込み基板の回路を見ることに。
すると、あれだけ注意して、TX-RX、RX-TXで繋げられるように回路を作成したと思ったのだが、また同じ部分で間違えていたことが発覚
CH340CのTXDから伸ばした線の先を、TXではなくRXにラベリングし、RXDの方をTXにラベリングしてしまっていたorz
というわけで、またジャンパー線を介して、TXとRXをクロスさせて書き込みを試みる
今回は書き込み側の基盤のTX(送信)だけではなく、RX(受信)の方も青色LEDが点滅した!
実際にターミナルでも書き込みが行われていることを確認できた!
書き込み後に、無事、目のディスプレイも表示された。またタッチセンサーも起動し、スピーカーも無事再生された。
これで、ESP32の基板書き込み部分を分離し、充電回路のみにすることができるようになった。だいぶ手間取ってしまったが、ようやくできて一安心。
次は、リポ電池を搭載して、絶えずUSBケーブルに繋いでいなくても、動くようにするのに取り組みたいと思う。
コメント