方言を話すおしゃべり猫型ロボット『ミーア』をリリースしました(こちらをクリック)

【ESP32】書き込み分離:CH340Cを使ったUSBシリアル変換モジュールを自作

この記事は約6分で読めます。

前回、【電子回路】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モジュール搭載基板を装着。

あれ、シリアルポートは検出してくれたが、また同じくシリアルデータを受信できないというエラーが。。。

Zsh
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ケーブルに繋いでいなくても、動くようにするのに取り組みたいと思う。

コメント

タイトルとURLをコピーしました