これ一つで、ESP32-WROOM、ESP32-WROVER、ESP32-S3にマルチに対応します。
0. はじめに
今回は『ESP32書き込みボードの製作』(工作)の話です。Qiitaにふさわしくないかもしれませんが、興味のある方の参考になればと思いますので、今回はご容赦ください。
1. 製作した書き込みボード
↓これが今回自作した書き込みボードです。クレカの半分より小さいぐらいのサイズ感です。
表 | 裏 |
---|---|
ユニバーサル基板をベースに、ピンヘッダとその他の数個の部品(抵抗、コンデンサ、タクトスイッチ)をハンダ付けしただけの単純な作りとなっていて、材料費はたった数百円です。
後述する既製品のUSBシリアル変換モジュールを6Pソケットに挿して使用します。
このボード一つで、ESP32-WROOM、ESP32-WROVERやESP32-S3にプログラムをダウンロード(書き込み)できます。
2. USBシリアル変換モジュール
今回使用するUSBシリアル変換モジュールは、こちらのESP32ダウンローダです。
なんと言っても、低価格ながら自動書き込みできる点で、自動書き込みする回路作成に必要な部品代やハンダ付け作業と比較して、これを採用することにしました。このため、自作の書き込みボード自体を単純化することができます。
(ESPダウンローダ:秋月電子さん税込820円、スイッチサイエンスさん税込770円)
USB Type-Cである点も気に入ってます。
3. 書き込み装置を自作した経緯
みなさんはどうされているのでしょうか?
ESP32を使って開発する場合、ESP32-DevKitCのような開発ボードをブレッドボードに挿して、センサーやLCDをI2CやSPIで接続してプログラムのデバッグやチューニングすると思いますが、
これを完成版にするとき、自分は、高価な開発ボードではなく、ESP32-WROOM-32EなどのESP32モジュールを単体で使っています。
ESP32モジュール単体なら、価格は開発ボードの$\frac{1}{4}$程度ですし、開発ボードに乗っているUSBシリアルも不要で ただ電力を無駄に消費するだけですから。
種類 | 開発ボード | 単体モジュール |
---|---|---|
ESP32-WROOM |
ESP32-DevKitC-32E(4MB) ¥1,230 |
ESP32-WROOM-32E(16MB) ¥360 |
ESP32-WROVER |
ESP32-DevKitC-VE(8MB) ¥1,360 |
ESP32-WROVER-E(16MB) ¥310(在庫処分特価) |
ESP32-S3 | - |
ESP32-S3-WROOM-1-N16R8 ¥530 |
このため、ESP32モジュール単体にプログラムを書き込むための装置が必要になる訳です。
↓下記の様な市販品もあるのですが、(USBシリアル付きのため?)値段が高いのと、ESP32-S3やESP32-WROVERに対応していないので、自分で設計することにしました。
aitedoさん | 秋月電子さん |
---|---|
税込2,838円 |
税込1,580円 |
4. ESP32にマルチに対応
今回の書き込みボードの特徴でもある、これ一つで、ESP32-WROOM、ESP32-WROVER、ESP32-S3にマルチに対応できる点ですが、これを可能した最大の理由は、ESP32にプログラムを書き込むために必要なピン位置が、どのモジュールも同じである事です。
書き込みに使うピンは全部で6つ。前述のESP32ダウンローダの6Pにそのまま対応します。
ピン名称 | 用途 | ESP32ダウンローダ |
---|---|---|
GND | 電源(-) | GND |
3V3 | 電源(+) | 3.3V |
EN | リセット | EN |
IO0 | 起動モード | G0 |
RXD0 | シリアル(受信) | TXD |
TXD0 | シリアル(送信) | RXD |
さらに、ピンピッチが1.27mm、モジュール幅が18.0mmとどれも同じであることも重要でした。
さらに付け加えると、 ピンヘッダに接触させるだけでハンダ付けしないため、ESP32の取り外しが自由にできる、という点がポイントです。書き込み装置なので当たり前ですね。
冒頭の写真の通り、GPIOを引き出すためのピンソケットを省略しています。書き込みに特化することで、ピン数が異なる3つのモジュールに対応しています。
1.27mmピッチでモジュール幅が18.0mm、上記6ピンの位置が同じであれば、将来登場するESPモジュールにも適用できるはずです。
ESP32-C3は、ピンピッチが1.5mm、ピン配置も異なるため、これ専用に作成する必要があります。
5. 作り方
ESP32モジュールをピッチ変換基板や開発基板にハンダ付けされた経験がある方なら、簡単に作ることができると思います。
5.1 材料
・1.27ミリピッチのユニバーサル基板:秋月電子さんの72×48mmサイズで税込220円(約半分に切断して使用) (片面基板で十分でした。片面基板なら税込100円)
・1.27ミリピッチのピンヘッダ:秋月電子さんの1.27ミリピッチピンヘッダ1x40pで税込90円(19pに2本切断して使用)
その他の部品として、
・10μFコンデンサ x1
・0.1μFコンデンサ x2
・10kΩ抵抗 x1
・タクトスイッチ x1 (リセットスイッチ)
・ピンソケット(6p) x1 (USBシリアル変換モジュールを直接ハンダ付する場合は不要)
・配線ワイヤ(スズメッキ線やUEW線)
5.2 回路図
ESP32-WROOM-32 DatasheetのPeripheral Schematicsに準拠しています。
リセットスイッチは用意しましたが、もし、手動書き込みにも対応するなら、IO0をGNDに落とすタクトスイッチを追加してください(プルアップ抵抗は不要)。
自動書き込み機能を持たないUSBシリアル変換モジュールを使う場合は、6PのENとG0が不要となり、3.3V・GND・TXD・RXDだけをUSBシリアル変換モジュールにつなげばよいので 4Pで済みますが、手動書き込みとなるため、ENのリセットスイッチとIO0をGNDに落とすタクトスイッチが必須です。
5VのUSBシリアル変換モジュールは使えません。ESP32が壊れます。
5Vと3.3Vが選べるUSBシリアル変換モジュールの場合は、3.3Vに設定すれば使用できるはずです(実際の出力電圧を測定して3.3Vとなっていることを確認できた場合)。
5.3 各部品をユニバーサル基板にハンダ付け
下記の写真や前項の回路図を参考に、それぞれの部品を配置してハンダ付けしください。何をどこに置くなどの決まりはありませんが、2列のピンヘッダの間隔は重要です。
5.4 製作上のコツ
これに限らないですが、自分の経験上、表面実装部品とか、1ミリ前後のサイズにハンダ付けするコツは、糸はんだの細さだと思っています。
私はgootの20Wハンダゴテを愛用しています。温度管理できるような立派はハンダゴテがなくても、φ0.3mm位の極細糸ハンダがあれば、十分に手ハンダできます。0.6mmでも細い方だと思うのですが、コテを当てた時に溶けるハンダの量が多過ぎて、細かいピッチだとうまくハンダ付けができません。温度管理できるハンダゴテならそうはならないのかな?
あくまで自分の経験ですのでご参考まで。
5.5 ケースで保護
裏面の配線を保護するために、3Dプリンタで基板の裏側を覆うケースを作成して取り付けました。(必須ではありません)
6. 使い方
既出の写真からもうお分かりだと思いますが、以下の3ステップです。
- ESP32モジュールをピンヘッダに挿す(はめる) (下記(✓)参照 )
- 6PソケットにESP32ダウンローダ(USBシリアル変換モジュール)をセット
- ESP32ダウンローダとPCを、USBケーブルで接続
以上で準備完了、Arduino IDEやesptool.py、mpremoteから書き込みが(読み込みも)可能です。
ESP32をピンヘッダにセットするとき、
ちょっとしたコツというか慣れが必要で、力任せに押し込むと壊れてしまいます。
スッと簡単にハマらない理由ですが、
モジュールの幅が18.0ミリです。1.27ミリピッチだと2列のピンヘッダの間隔が17.78ミリとなり、計算上は0.22ミリだけモジュール幅より狭いことに起因しています。
実際につけてみると、0.2ミリもあるように見えませんが、少し狭いことは事実なので、片側列のピンヘッダの先の方に置いた後、気持ち広げるように もう片側のピンヘッダに差し込む感じではめていくと、はまりやすいと思います。
少し狭いことの副作用?で、簡単にESP32が抜け落ちることも無く、接触不良にもならず、いい感じになっていると思います。
最初に片側列のピンヘッダの根元まで挿してしまうと、モジュールが傾き過ぎて反対側のピンヘッダに挿せなくなります。
また、両側ともピンヘッダに挿さったとしても、ピンヘッダの根元まで押し込むことは不要です。無理に押し込むとピンヘッダが逆ハの字に曲がってしまいます。
試していませんが、ピンの長い側は4.5ミリもあるので、先端の1ミリぐらいを外側に曲げてへ
の字を立てた様な状態にすると、もっと簡単に挿せるかもしれません。
ピン数の多いESP32-WROVERに合わせてピンヘッダを片側19ピンづつにしているため、ESP32-S3やESP32-WROOMをセットすると、下から5番目のピンの位置には、ESP32側には端子がありません。そのため、上記のコツを押さえて差し込もうとしてもESP32側の基板に当たるため、入りません。よって、下から5番目のピンは最初から外側に1ミリほど曲げておいてください(上の写真の↑矢印で示したピン)。
もしくは、どうせ書き込みでは使用しないピンのため、最初から14ピンの2列でもまったく問題ありません(14ピンでもESP32-WROVERに書き込めます)。
当初設計時に、さらに外側にピンソケットも立てて開発ボードっぽくGPIOを取り出せるようなことを考えていたので、そのときの名残です。書き込み装置に特化した段階で14ピンに減らしておくべきだったかも・・・
はじめて使用する場合は、USBシリアルのドライバのインストールが必要かもしれません。もしPCがUSBシリアルを認識しない場合は、USBシリアルの製品ページの案内に従ってドライバのインストールを行なってください。
7. おわりに
記事は以上です。何かの参考になればと思いまとめました。
他にもっとよいアイデア等があれば是非教えてください。
記事をまとめていて改善点が見つかったので、今後実践してみようと思います。
・14ピンに減らす
・ピンの先端をへ
の字に曲げてみる
以上
2022.10.23追記
ネイティブUSBによる書き込みもできるように改造しました。
8. 二代目を作りました
2022.10.30追記
前回予告を含めて変更点は以下の通り。
・14ピンに減らす(19ピン分のスペースは確保)
・ピンの先端をへ
の字に曲げてみた
・Bootボタン追加(右側:IO0をGNDに落とす、左側はRESET)
・ネイティブUSB用のピンソケットを独立
ピンヘッダの曲げ具合は、↓こんな感じです。ESP32がサッと挿せるようになりました。
裏側で配線しているので、片面基板の方が見栄えが良かったですね。(作るなら)三代目はそうします。
2023.6.5追記
何十回か挿したり抜いたりしていると、読み書きでエラーが起きるようになりました。接触不良を起こしているようで、読み書きに必要な6本のピンの反りを調整するようになりました。素手(指)で直接触っているので、端子の酸化?腐食?かも知れません。