ESP-Prog ボードで ESP32 のデバッグ

ESP-Prog は Espressif 社のデバッグツールです。写真の上の黒いやつです (ブレッドボードに乗っているのは、ESP32 開発ボード)。ESP32 のプログラムをブレークポイントを張ってデバッグすることができます。ボードを入手してから、ほぼ接続するだけで使えるようになりました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226137/0ac26dff-1d86-8248-061b-5fbb88502531.png" width="400" alt="ESP-Prog接続写真.png">

手持ちのジャンパワイヤにちょうど良いのがなかったため、途中で繋いだりしていますが、気にしないでください。ESP32開発ボード下の 19-23, 18-20 に写っている短いジャンパワイヤは、今回の接続に関係ありません。

#前提
- Platform IO で ESP32 のプログラムをコンパイル、アップロード、モニターできていること

#環境
今回使ったのは、以下のような環境です。

  - ESP32 開発ボード<br>
    Amazon で入手できる安価なボード [HiLetgo ESP32 ESP-32S NodeMCU開発ボード2.4GHz WiFi + Bluetoothデュアルモード](http://amazon.jp/dp/B0718T232Z) を使いました。
  - [ESP-Prog](https://www.marutsu.co.jp/pc/i/32991744/)<br>
    &nbsp;&nbsp;取り寄せになりましたが、注文してからちょうど１週間で届きました。
  - ブレッドボード、ジャンパワイヤ、USBケーブル
  - 母艦として MacBook Air macOS (Catalina 10.15.7) 

#ドキュメント
- Espressif の [Introduction to the ESP-Prog Board](https://docs.espressif.com/projects/espressif-esp-iot-solution/en/latest/hw-reference/ESP-Prog_guide.html)<br>
  &nbsp;&nbsp;まず、これは必読。
- Platform IO の [Debugging > ESP-Prog](https://docs.platformio.org/en/latest/plus/debug-tools/esp-prog.html) にリンクがあるチュートリアル [Use the PlatformIO Debugger on the ESP32 Using an ESP-prog](https://www.hackster.io/brian-lough/use-the-platformio-debugger-on-the-esp32-using-an-esp-prog-f633b6)<br>
  &nbsp;&nbsp;Platform IOでの使い方は、これが分かりやすかった。
- [ESP-Prog Reference Design](https://www.espressif.com/sites/default/files/documentation/ESP-Prog_reference_design.zip) に含まれる回路図
([DigiKeyのESP-Progの製品ページ](https://www.digikey.jp/product-detail/ja/espressif-systems/ESP-PROG/1965-ESP-PROG-ND/10259352) にありました
- [ESP32­-WROOM­-32D のデータシート](https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32d_esp32-wroom-32u_datasheet_en.pdf)<br>
  &nbsp;&nbsp;6. Schematics、7. Peripheral Schematics
- [HiLetgo ESP32 ESP-32S NodeMCU開発ボード2.4GHz WiFi + Bluetoothデュアルモード](http://amazon.jp/dp/B0718T232Z)<br> 
  &nbsp;&nbsp;商品画像のうち、PIN DEFINITION と 回路図 (製品にはプリントアウトが添付されていたのですが、データがどこにも見つかりません)

#USBドライバのインストール
USBドライバのインストールはしませんでした。FTDIの [Mac OS X Installation Guide](https://ftdichip.com/wp-content/uploads/2020/08/AN_134_FTDI_Drivers_Installation_Guide_for_MAC_OSX-1.pdf) には、MacOSに入っているデフォルトのUSBドライバを無効にしてから、FTDIのドライバをインストールするように書かれていますが、、、

ESP-Prog を接続すると、以下のように検出されます。2つありますが、番号の小さい方が JTAG インタフェースとつながっています。
![USBポート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226137/66dccfb9-c032-79e7-1023-a08983295fbb.png)

#ESP32 開発ボードとESP-Prog の接続

ESP32 開発ボードとの接続ピンは、[ESP32 JTAG pins](https://docs.espressif.com/projects/esp-idf/en/v4.2/esp32/api-guides/jtag-debugging/tips-and-quirks.html#id4) にあります。

##ESP32 開発ボードの電源

ESP32 開発ボードにつながっている USB ケーブルは外しておきます。

[HiLetgo ESP32 ESP-32S NodeMCU開発ボード2.4GHz WiFi + Bluetoothデュアルモード](http://amazon.jp/dp/B0718T232Z) の回路図で POWER 辺りの回路を見る限り、3.3VではなくUSBと同じ側に5Vを入れるのがよさそうです。

ESP32 開発ボードへは、ESP-Prog から電源供給します。[電源供給を選択するピンヘッダ](https://docs.espressif.com/projects/espressif-esp-iot-solution/en/latest/hw-reference/ESP-Prog_guide.html#pin-headers)が JTAG インタフェース(JTAG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COM&nbsp;&nbsp;n と書かれている下の差込口)の隣にあるので、USBからの電圧と同じ5V を選択します。

##ESP-Prog の接続

下図のように ESP-Prog と ESP32 開発ボードを接続しました(Introduction to the ESP-Prog Board の [3.2.2. Communication Interface](https://docs.espressif.com/projects/espressif-esp-iot-solution/en/latest/hw-reference/ESP-Prog_guide.html#communication-interface) にある JTAG インタフェースの図に、接続する ESP32 開発ボードのピンを書き込んだものです)。 
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226137/f4fd82a8-ea40-761e-8773-535608594364.png" alt="ESP32とESP-Progの接続.png" width="400">

#母艦との接続
ESP-Prog と MacBook Air を USB ケーブルで接続します。書き込み、アップロードの確認ができているUSBケーブルが安心です。

#PlatformIO でプロジェクトの設定
Platform IO でプロジェクトを開いたら、platform.ini を開いて、`debug_tool = esp-prog`を追加して保存します。Platform IO を使っていれば、設定はこれだけです。ほんとに。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226137/380f783a-f018-2d74-c0b3-6ba828e86638.png" width="400">

フレームワークは、espidf を使っていますが、arduino でも同じようにいけます。

#デバッグ開始
Run > Start Debugging (または、F5) でデバッグを開始します。app_main() の先頭で止まりますので、ステップ実行するなり、ブレークポイントで止めるなりして、デバッグします。
![Debugging.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226137/6f9c0bad-d984-cf49-e46a-569c0a54ad7f.png)

#まとめ
すんなりと動きました。ESP-Prog を注文してから1週間、届いてからは、ちょうどよいジャンパワイヤがないことに気付いて結線に手間取りましたが、USBポートにつないでからはすぐにデバッグ開始できました。