ESP32をTTL-USBコンバーターとして使う

 ある日のこと。

 出先で、hackするためにルータのTTLポートにピン立てたのだけど、手元にTTL-USBコンバーターがなかった。

 正確には、ルーターといっしょにProlificの石が乗ったシリアルコンバータを渡されたのだけど、これがmacOSのドライバ供給が微妙で、High Sierraは細かいバージョンごとにドライバが出ていたりして、なんかまともに書けていなさそうで問題が出そうで、ドライバを入れたくない感じ。

 スイッチサイエンスで売っていて、だいぶ前に購入したRaspi用のFTDIのコンバーターでも、macOSだとkextが刺さってハングアップすることがあったので、念の為、普段は使ってないRaspi1にssh接続して中継させている。このセットは持ってきてあったのだけど、なんか調子悪くて通信できない。長いこと放置していたのでコンディションも不明だ。

 Arduino開発で互換品によく搭載されているシリコン・ラボラトリーズのCP2012は、macOSでもわりと調子がいい。が、TTLコンバーター品は1つも持っていない。

 持ってきていない他の手持ちのTTL-USBコンバーターは、はんだ付けしてしまったりしていて余っているものがなかったので、AliexprssでCP2012搭載品を注文しておく。安いので、送料無料の範囲になる4個オーダーした。Aliexprssでの注文品は、いつ届くかわからないので、思いついたときにオーダーしてしまって、忘れた頃に届くのがよい行動だ。

 が、問題は目の前に残ったままだ。出先のことで、活用できる機材は限られている。

 バッグを漁ると、EPS32を搭載したNodeMCU-32Sは何故か持っていた。バタフライ・ブレットボードもあるし、メスーオスのジャンパピンもある。

 ESP32に単純なシリアルコンバータをやらせるスケッチをサクッと書いて対応した。内容は、シリアルのリファレンスのコードとほとんど変わらない。

// RxD2,TxD2に配線
void setup() {
  Serial.begin(115200);
  Serial2.begin(57600);  
}
void loop() {
  if (Serial2.available()) {
    int inByte = Serial2.read();
    Serial.write(inByte);
  }
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial2.write(inByte);
  }
}

 結線して動かしてみる。右のは、調子の悪かったスイッチサイエンスのFTDI品。

 ESP32のシリアルは、ArduinoIDEからしか扱ったことがなかったので、普通に認識するものか不明だったけれど、普通にscreenで開くことができた。

MacBook:~ kinneko$ ls /dev/tty.*
/dev/tty.Bluetooth-Incoming-Port	/dev/tty.SLAB_USBtoUART
MacBook:~ kinneko$ screen /dev/tty.SLAB_USBtoUART 115200 –L
Login:

 というわけで、事なきをえた。

 ESP32を、ただのシリアルコンバータとして使うなぞ贅沢な話だが、背に腹は代えられないのであった。


オリジナル投稿:
ESP32をTTL-USBコンバーターとして使う|kinneko|pixivFANBOX
https://kinneko.fanbox.cc/posts/596698