google-site-verification: google3bd66dd162ef54c7.html
FC2ブログ

ESP32(ESP-WROOM-32)を使う (書き込み回路の改造)

◆自動書き込みが出来ない
ESP32用のブレッドボードが完成したので、プログラム作りを開始したいのですが、Arduino IDE からプログラムの自動書き込みが出来ません。スイッチを操作した手動書き込みは出来ますが、やはり自動書き込みが出来ないと不便です。

この現象はUSB/シリアルチップなどの相性で発生するらしくて、ENピンとGNDの間にコンデンサを入れることで解決出来るそうです。ただ、そうは言っても、何が起こっているのか確認しないでコンデンサを入れるのも情けない話です。

ということで、回路を調べてみました。

◆回路図
ESP-32 DEVKIT の回路図はネットを探すといろいろ出てきますが、自動書き込み信号の発生回路は以下のようになっていました。
ESP32のプログラム書き込み信号生成回路
配線がたすき掛けになっているのでラッチかと思いましたが、そうではありません。トランジスタの向きが上下で逆になっていたりして、とにかく見づらいし、回路の他の部分との接続関係も判り難いです。どうせ基板全体の回路図が見たくなるので現物を追いながら私の好みに書き直したのが以下の回路図です。

・ESP32 DEVKIT V1の回路図 (ESP-WROOM-32との接続は省略しています) 図をクックで別窓に拡大
ESP32 DEVKIT V1の回路図
なるほど、GPIO2にはLEDが接続されていて更に10kΩでプルダウン、GPIO5は10kΩでプルアップされていました。こういうことは回路図だと判り易いです。

問題のプログラムの書き込み信号は、DTRとRTS信号からQ1,Q2のトランジスタで作ったロジックで生成されていました。ENの立ち上がりを遅らせる必要があるので、Q1のコレクタとGNDの間にコンデンサが必要になるようです。

ここで判らないのは、スイッチ操作で書き込みモードに入れる場合には、最初に EN=0, GPIO=0 の状態を作り(両方のボタンを押す)、その後 EN=1, GPIO0=0 にした(ENのボタンを離す)後で EN=1, GPIO0=1 の状態(両方のボタンを離す)に変化させます。真理値表を見ると、最初の EN=0, GPIO=0の状態は無いのでスタティックにその状態を作ることは出来ません。そうなると過渡的にその状態を作っていることになります。まあ実際にはコンデンサを入れてLOWになる時間を延ばしているのですが、本当にそんな設計するもんでしょうか?ここは何か私が勘違いしているのかも知れません。

ともかく、ここには最初から0.1uFのコンデンサが入っていたのですが、これでは足らないようで、C-ENとして0.1uFを追加して合計0.2uFにするとうまく自動書き込みが出来るようになりました。ちなみに0.047uFを追加した場合は50%くらいの成功率でした。

あと、C-ENを1uFまで増やしてもうまく動作したので、2枚ある基板のうち1枚は追加コンデンサ0.1uF、もう一枚は1uFにして様子を見ることにしました。

ちなみに、このコンデンサと並列にタクトスイッチが接続されているので、接点の保護用に51Ωくらいの抵抗(Rs)を入れておきたいところです。しかし、スペースの関係で断念しました。まあしょっちゅう操作するスイッチでは無いので良いかと。操作頻度が高いスイッチでこういうことをしてはいけません。ともかくそういう事情があるのでここのコンデンサの容量をむやみに増やすのは危険だと思います。

◆ENピンの波形
・オリジナルの状態 立ち上がり時間=1mS (10kΩ x 0.1μF)
ENの波形
この波形では自動書き込みNG。

・0.1uF追加後 立ち上がり時間=2mS (10kΩ x 0.2uF)
0.1uF増量
この波形なら自動書き込みOKでした。

・1uF追加後 立ち上がり時間=10mS (10kΩ x 1.1uF)
1uF増量
これでもOK

・全体波形
書き込みから再起動まで
右側のパルスでリセットがかかってプログラムがスタート(再起動)するようになっているようです。この例では4.5秒後になっていますが、この長さはプログラムのサイズで変わってくるはずです。

・書き込み信号部分全体
書き込みモード遷移パルス(EN)
最初に幅の狭いパルスが出た後に、100msくらいのパルスが出ていました。このどちらを使っているのか調べ切れていません。

◆実際の基板の様子
ESP32 DEVKIT V1(30pin)
ENボタンのそばに変な角度で取り付けられているコンデンサがありますが、

謎のチップコン
これが最初からENピンに入っていたコンデンサでした(謎のチップコン)。自動書き込みエラーの防止のため、ボードメーカーが追加したのだと思いますが、どうせ基板のパターンを直すなら、部品が直角に付くように設計しておいて欲しいです。日本人ならこんな設計はしないでしょうね。

・コンデンサ増設後
ESP32 DEVKIT V1 ENコンデンサ増量
チップコンが無かったので、普通のリードタイプのセラコンをこの位置にはんだ付けしました。

◆電源電流波形
消費電流波形
ついでに電源電流を測定しておきました。これはGND側に入れた1Ωのシャント抵抗の電圧波形です。つまり、1目盛20mVが20mAに相当しています。
これはリセット後の消費電流の変化を見ていますが、最大で90mA流れていて、Arduino UNO と比べるとかなり多いです。ただ、昔言われてたように極端に消費電力が大きいということは無い感じです。ただこれはWiFiを使っていない状態なので、電波を出すともっと電流が増えると思います。

◆まとめ
ということで、無事プログラムの自動書き込みが出来るようになりました。中華な基板を使う場合、こういう苦労ある訳ですが、その分技術力が上がるくらいに思って、割り切るしか無いでしょうね。

追加したチップコンの容量は私の環境の場合の話なのでいつでもこれでうまく行くかどうかは判りません。
なお環境は下記です
Win.10 64ビット、USBドライバはCP210x 6.7.4.261 、Arduino IDE 1.8.12
esptool.py v2.6, Chip is ESP32D0WDQ6 (revision 1), Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None

◆覚え書き
・モジュールのヘッダーピンが垂直にはんだ付けされていなかったので、ペンチで修正しました。
・基板の側面がVカットを折っただけの状態で、ささくれていたので軽くやすり掛けしました。
・UNOだとシリアルモニタやターミナルソフトを接続するとボードのリセットがかかりますが、ESP32(DEVKIT)ではリセットはかかりませんでした。UNOはDTRの微分でリセットしているのに対しESP32の回路にはロジックが入っているのでリセットがかからないのだと思います。強制的にリセットが入らないので、こっちの方が使い易いかも知れません。

ESP32 (ESP-WROOM-32) を使う (ブレッドボードの準備)

前の記事に少し書きましたが、Arduino UNO だけ使っているとやれることの限界が見えてきて、他のCPUを使ってみたくなります。高性能なCPUの選択肢はいろいろありますが、私にとってとっつき易いという点からESP32を使ってみようと思います。

ESPのCPUはこれまでも使ったことがありますが、モジュール単体、もしくはそれに近い状態で使っていました。

◆これまで使ったESPのモジュール
ESPのモジュール
ESP8266とESP-WROOM-02です。周辺回路と一体化した開発ボードは値段が高いので出来るだけモジュールの状態の物を使うようにしていました。

ESPを再度いじるとして、使うCPUは現時点ならESP-WROOM-02(ESP32)で決まりです。ただ、上の写真のモジュールの状態から動かすのは大変です。今では AliExpress から開発ボードが安く入手できるので、こっちを使わない手はありません。

ということで、ESP32の開発ボードを使うことにしました。いろいろなボードが出ていますが、個人的に気に入った ESP32 DEVKIT V1を使うことにしました。

購入したサイト:ESP32 DEVKIT VI
注文数が多かったサイトを選びましたが、その数字が正しいのか自信がありません。(関連品の販売数が合算されていることがあるようです)

▼ESP32 DEVKIT V1
ESP32 DEVKIT V1 (30ピン)
ESP32 DEVKIT V1
このデザインの本家は DIY社、更にオリジナルはEspressif 社だと思いますが、そのコピー品だと思います。

ESP DEVKITには36ピンの物があって、DEVKIT Cと言う名前の物が有名で秋月でも取り扱っています。今回買ったのは30ピンの物ですが、これは36ピンもいらないので少しでも基板が小さい方が便利だろうと考えたからです。

さて、このモジュールを使う時の問題になるのが幅が広いことです。そのままブレッドボードに挿すと次の写真のような状態になります。

▼普通のブレッドボードにESP32を挿す
空きスペースが無い!
モジュールの幅が広いので、片側に1列だけしか穴が残らないため、配線が難しくなります。(内側を通す手がありますが作業が面倒です)

この問題の解決策として、よく行われているのは6穴のブレッドボードを使う方法。あとは、二つのブレッドボードを合成して一つにして使う方法です。

どちらの方法もなんだかしっくりこないので、荒業で対処することにしました。それは、

▼ブレッドボードを半分に切断
半分に切断
何枚か持っているので加工しても困りません。

真っ二つに切断したブレッドボード
中のコンタクトが露出しますが、脱落はしないようです。切断面をやすりで仕上げて、

600ミルピッチに加工中
適当なプラスチック板を用意して裏板として使います。つまり裏板を使ってガニ股のデバイス用のブレッドボードを作ります。ESP32に合わせてピン間ピッチを1000ミルにしても良いのですが、Arduino NANOでも使えるようにピン間ピッチを600ミルにしてみました。

上の写真のようにArduino NANO を使って位置合わせを行い、両面テープで裏板を接着すれば出来上がりです。

▼完成
300ミルと600ミルの比較
右が元の状態のブレッドボードで、中央のピン間ピッチは300ミルです。左が今回の改造を行ったガニ股ブレッドボードで、中央のピン間ピッチが600ミルです。間隔が300ミル(3ピッチ)広くなっただけですが、部品エリアが広くなって使い易くなります。

▼ESP32では、
ESP32と改造ブレッドボード
今回の改造の目的であるESP32を挿した状態です。両側に2ピン分のスペースが出来ました。

▼使用例
改造ブレッドボードの使い心地を試す
両側に電源/GNDがあるので使い易いです。

◆まとめ
これでブレッドボードの用意が出来たので実際のプログラム作りに入ることが出来ます。ただ、そうは言っても具体的な作業を始める前に自動書き込み機能など、このモジュールに搭載されている回路の内容について調べておくことにします。
カレンダー
05 | 2020/06 | 07
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 - - - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード