Wroom-02,32の観察
Ver.1.0011 2023. 2.12
更新履歴
2023. 1.10 Ver.1.000 新規作成
2023. 1.11 Ver.1.001 ADC校正
2023. 1.13 Ver.1.002 GPIOとPWM
2023. 1.14 Ver.1.003 GPIOとPWM-NDS9936
2023. 1.15 Ver.1.004 WROOM-02開発ボードとWROOM-02DIP化ボード
2023. 1.19 Ver.1.005 DDSもどき
2023. 1.20 Ver.1.006 DDSもどき追記
2023. 1.21 Ver.1.007 WROOM-02開発ボードとWROOM-02DIP化ボード(追記)
2023. 2.07 Ver.1.008 DDSもどき追記-その2
2023. 2.10 Ver.1.009 SPIについて
2023. 2.11 Ver.1.010 SPIについて-2
2023. 2.12 Ver.1.011 SPIについて-2 手直し
Wroom-02,32は、ESP8266(wroom-02)とESP32(wroom-32)とも言います。メインのチップの名前です。
両方とも、無線LANで2.4GHzのWiFiで、ESP32は、更にBLUETOOTHとBLEがついています。
Arduino IDEで、Arduinoとして、開発できます。Arduinoは、なんと言っても、使いやすいソフトウエアライブラリとAPIに 決まりま す。多くのセンサーが、Arduinoのライブラリとスケッチ(プログラム)で書かれていて、多くのセンサやインターフェイス基板が供給されています。こ れら をシールドと呼びます。例えば、SDメモリのインターフェイス基板は、SDメモリシールドとなります。た だし、シールドは本来のArduino基板用に作られており、Wroom-02,32には、そのままではつけられないので、注意が必要です。また、本来の Arduinoは、Atmel AVRマイコンであり、無線LANもBLEもなく、メモリも小さくこれと全く異なるものです。ESP32は、4MBのフラッシュと520KiBのSRAM からなるもので す。あくまで、ArduinoのIDEを使っているだけです。
ただ、ハードウエアは、貧弱で、PSoCから比べると、大きく見劣りします。したがって、PSoCをI2Cとか、SPIでつないでやると、かなり、 まともな システムになります。ありがたいことに、こんなWebがあります。ESP32-WROOM-32。
またESP8266、ESP32は、3.3Vで動きますので、周辺のICは3.3Vで固められなければなりません。PSoCは、3.3Vでも動きま すので、 問題ありません。
Arduinoは、C,C++でス ケッチを書 きますが、実行はインタプリタなのです。なので、CPUはESP8266は80MHz、 ESP32は 240MHzと高速です。
インタプリタといえば、Pythonもそうですが、ESP8266,ESP32 用の MicroPythonもあります。
そこでWebで探してみると、
Arduino 日本語リファレンスと かArduino(ESP32) リファレンスなどが見受けられます。
また、MicroPythonでは、ESP8266 での MicroPython の始め方とか、ESP32 での MicroPython の始め方などが見受けられます。
まあ、Webには、たくさんWroom-02,32とセンサーを使った記事や情報がたくさんありますので、不自由は、ほとんど感じないでしょう。
まず、最初は、開発ボードを買うといいでしょう。すると、USBでパソコンに繋げられますから、パソコンにArduino IDEをインストールして、ESP8266.ESP32のArduinoスケッチを書き込めば、すぐ動きます。ブレッドボードでセンサーとをおき、配線す れば、USB電源 から5Vと開発ボード上の3.3Vですぐ動きます。USBケーブルは、アンドロイド用のUSB-Aとmicro-BのUSBケーブルです。充電専用ではだ めで す。
ESP32のADCのリニアリティに難があるようです。でも、ESP32 のADCでキャリブレーションされた精度の良い電圧値を取得する方法とすれば良いなのだそうです。
でも、PWMは、Dutyと電源電圧で正確な電圧が出せますので、CRフィルタをかまして、DC電圧にして、ADすると、ADの特性がPWMの Dutyと電 源電圧から取れますので、特性表にして、Dutyと電源電圧からの計算から、誤差表ができます。表はADCが12bitなので、4096の表でいいので す。 アッテネータ毎に、補正表を作れば、バッチリです。
また、ESP8266とESP32の本もたくさん出ています。検索すれば、すぐ見つかります。
とこで、ESP32は、BLUETOOTHとBLEがついているのでしたね。LEDPWMも16bitが16本あって、でも、基本クロックが8本し かないそ うなの で、同じクロックで良ければ、16本でき、全部違うクロックなら、8本までだそうです。
DDSはAD9833(基板で売っている)をSPIで繋げば、10MHzまでのDDSになります。Webにたくさん記事があります。
無線やデジタルの特殊なクロック周波数がいるときはSi5351A(秋月電子で基板で売っている)を使うと3CH クロックジェネレータSi5351Aの実験にArduinoのスケッチがあります。
温度・湿度・気圧は、BMP280(基板で売っている)でI2CかSPIで一度に測れます。Webにたくさん記事があります。
大概のI2C、SPIセンサーは、Webを探せば見つかると思います。
電子ボリュームもWebをさがすとArduinoのスケッチが見つかると思います。
EEPROMもI2Cでつながりますので、5分毎にBMP280の測定データをWiFiのNTPで日付時刻をえて、測定データに時刻記入しながら、 ログが取 れますし、sdカード ソケット 基板をつなげば、SDメモリに1年の記録が採れるでしょう。それを車で、近くによったら、WiFiでデータを吸い取ることもできるでしょう。
ESP32は、GPIOが多いので、ロボットにいいでしょう。でも、電源が3.3Vなので、注意が必要です。MOS-FETは、5Vスイッチと 10Vスイッ チが一般的です。5Vスイッチは、ゲートに5V以上かけないと、スイッチにならないということであり、10Vスイッチはゲートに10V以上かける必要があ りま す。すると、トランジスタを使って、3.3Vスイッチを5Vスイッチとか、10Vスイッチに変換するわけです。
そこで、注意しなければならないのは、トランジスタのスイッチは遅れるということです。PWMで、モーターやLEDをリニアに制御する場合、 Dutyがトラ ンジスタで、変わるということです。特にDutyの幅が小さくなると、大きな問題になります。
FETを使えば、遅れることはありませんが、BS170とか、2N7000などは、10Vスイッチなので、スイッチとしては使えません。
これは、3.3Vマイコンにすべて言えることです。3.3VスイッチのMOS-FETもありますが、めったに手に入りません。
図1IRLR/U 3410PbFの特性
緑色のVGS=5V ID=10AでRDS=0.125Ωなので、5Vスイッチです。その下にVGS=4V ID=9AでRDS=0.155Ωなの で、 3.3Vでもそんなに大電流でなければ、スイッチできるかもしれません。赤のVGS(th)のスレッショルド電圧は 1V(min)2.0V(max)となっていますが、条件は、VD=VGS ID=250uAとなっており、意味がありません。
図2 IRFR/U120NPbFの特性
緑色のVGS=10V ID=5.6AでRDS=0.21Ωなので、10Vスイッチです。赤のVGS(th)のスレッショルド電圧は 2.0V(min)4.0V(max)となっていますが、条件は、VD=VGS ID=250uAとなっており、意味がありません。
図3 2N7000の特性
緑色のVGS=10V ID=500mAでRDS=1.2ΩTyp 5Ωmaxなので、10Vスイッチです。また、緑色のVGS=4.5V ID=75mA でRDS=1.8ΩTyp 5.3Ωmaxなので、4.5Vスイッチでもあります。
赤のVGS(th)のスレッショルド電圧は0.8V(min)3.0V(max)となっていますが、条件は、VD=VGS ID=1mAとなってお り、意味 がありません。
図4 BS170の特性
緑色のVGS=10V ID=200mAでRDS=1.2Ωtyp5Ωmaxなので、10Vスイッチです。赤のVGS(th)のスレッショルド電圧 は 0.8V(min)3.0V(max)となっていますが、条件は、VD=VGS ID=1mAとなっており、意味がありません。
以上データシートからでした。
NDS9936がなかなか良さそうです。
NMOSFETが2個入です。ドレイン許容損失は、1つ1Wまでです。トータル2Wまでです。
グラフより、VGS=3Vでも、ID=8Aくらい流せるようです。オン抵抗は0.1Ωくらいですね。I2Rが、ドレイン損失 ですか ら、I2R=1Wですから、ID=3Aくらいまで流せそうです。MAXで使うのは危ないですからID=3A以下で使うべき です。
FDC6305Nは、DUALのMOS-FETで、2.5Vスイッチで、2.7Aである。
SSM6N42FEは、DUALのMOS-FETで、1.5V、1.8V、2.5Vスイッチで、0.8Aである。
WROOM-02開発ボードとWROOM-02DIP化ボードは、USBコネクタと3.3Vレギュレーターがあるかないかが違います。
WROOM-02開発ボードとWROOM-02DIP化ボードは、当然WROOM-02DIP化ボードのほうが安いです。でも、書き込みはどうした らいいで しょう?
私は、WROOM-02開発ボードとWROOM-02DIP化ボードをつかって、WROOM-02DIP化ボードを書いています。
WROOM-02開発ボードには、EN端子があります。これをENでなくすと、WROOM-02開発ボードのESP-8266がオフになりますか ら、 WROOM-02開発ボードとWROOM-02DIP化ボードとをEN端子を除いて、すべて同名同士の端子を並列につないでおけば、WROOM- 02DIP化ボー ドのESP8266が、入れ替 わって、書き込まれます。
図5WROOM-02開発ボードとWROOM-02DIP化ボードを並べてある左下の3.3Vの降圧コンバータは、使わずスイッチで開発ボードの 3.3Vに 切り替え ている
スイッチが、3つありますよね。書き込んだら、
図6 WROOM-02DIP化ボードの3箇所を抵抗でプルアップする。説明書に書いてあったかな。
電源は、左下の降圧コンバータで3.3Vを供給する。
なんで、スイッチが3個必要だったか何年も前なので忘れましたが、ボードの説明書を読めば解ると思います。
図7 全体写真
PSoC5Lpに、人感センサー(右上の降圧コンバータの左)とWROOM-02DIP化ボードで、ntpで、時間をえて、シリアルでつないであ る。
いま、ルーターのMACアドレスフィルタテーブルがほぼいっぱいになったので、MACアドレス消してあるので、時間は0になっている。
WROOM-02,WROOM-32は、MACアドレスが、2つあるので、WROOM-02 開発ボー ドと、WROOM-02DIP化ボードが2つ、さらに先日 WayinTopESP- WROOM-32開発ボードを2つ買ったので、MACアドレスが、10個にもな り、ルーターのMACアドレスフィルタテーブルが大変なことになります。
MACアドレスは大変です。たぶん、1つだけなんでしょうね。もう一つは、WROOMがDHCPマスタになるとき用?
しょうがないので、もう一台ルータを買ってきたが、これは、おかしなことに、ブラックリストのMACアドレスを登録するものだった。
MACアドレスを登録しないので、つながるが、MACアドレスフィルタがないというのは、危ないので、このルーターの無線LANは切ってある。
WROOM−02,32をたくさん使うとなると、どうしたものだろう?
左隣りのPSoCのCY8C29466は、サーミスタ温度計と湿度センサをインピーダンス測定で、シリアルで、つないである。
LCDディスプレイの左は、EEPROMで、下のスイッチはライトプロテクトである。
LEDがついているのは、PSoC5Lp基板であり、LEDは人感センサーを表している。
LCDディスプレイの下に見えるのは、ジャイロセンサーがついている。
LCDディスプレイを外すとたしかアナログデバイセズのI2Cの加速度センサーがある。
その右は、ロータリーエンコーダで、回すと、ジャイロ、加速度、時間、温度と時間を切り替えられ る。
あまりいろいろ盛り込んだので、ソフトは大変だった・・・・
Wayin Top ESP-32 開発ボードのDACを使って、DDSもどきを作ってみました。
図8 スケッチ
ferqが、基本波の倍率です。ここでは、5倍ですが、1000倍もできますが、フィルタがないと正弦波になりません。
図9 黄色 GPIO25 青 GPIO26
基本波はカーソル1と3△1から、40.741mSより、およそ24.55Hz、カーソル1と2△1から、8.2305mSより、およそ 121.45Hzと 5倍になっていますね。
freqをfloatにすれば、周波数を1/2、1/3・・・とできます。
図10 freq=0.5 つまり、半分の周波数
図11 黄色 freq=0.5 青 freq=1.0基本波
カーソル(赤)1と2△1は、青 基本波 40.669mS、カーソル3△4と4△3 黄色の周期は80.566mSで周期が倍なので、周波数は半 分です ね。
図12 freq=1.5
図13 黄色 freq=1.5 青 freq=1.0 基本波
カーソル(赤)1と2△1は、青 基本波 40.313mS、カーソル3△4と4 黄色の周期は24.806mSで周期が2/3なので、周波数は3 /2=1.5倍ですね。
PSoC5Lp CY8Ckit-059との比較しました。
PSoC CY8C29466-24PXIとPSoC4200m CY8CKIT-043と同じ条件でやってみました。
図14 プログラム
図16 sin波とcos波
ESP-WROOM-02は、SPI_MODE0,1,2,3と書いてもエラーになりません が、SPI_MODE2に対応してないようです。また、SPIのクロックの周波数は、指定しないと、CPUクロックの1/4だそうです。 ESP-WROOM-32は、CPUクロック240MHz、ESP-WROOM-02のCPUクロックは160MHzですから、SPIクロックはそれぞれ 60MHz,40MHzになります。
AD9833は、ESP-WROOM-02では、動きませんでした。AD9833はSPI_MODE2ですが、ESP-WROOM-02の波形を調 べると、確かにSPI_MODE2でも、SCLKの立上りになっていました。また、AD9833のSPIクロックの上限 は25MHzです。
そこで、ESP-WROOM-32では、動くはずですが、SPIクロックを10MHzにして動きました。SCLKの波形を見ると、 SPI_MODE2で立下 りになって いました。
BME280は、SPIクロックの上限は10MHzです。周波数を確認して、ESP-WR0OM-02で動きました。
随分てこづりました。おかげて、SPIのよい勉強になりました。
Arduinoは、Webには、沢山スケッチが載っていて、便利ですが、条件が違うと動かないようです。ちゃんと波形を観測しないと問題がありま す。
spi.hを参照してください。
さて、ことの発端は、DDS AD9833ボードがWebのESP8266のプログラムで動かない。それで、AD9833ボードが壊れているから、買い換え ないといけないと思った。たぶん、そういう人は多いのではないでしょうか?
今回ESP32のWebのプログラムでも動かなかったので、なおさらです。でも、SPIの周波数の設定を10MHzに変えたら、ちゃんと動きました。
壊れていることは、めったにないのです。ちゃんと原因を調べないといけないのです。
今回の場合プログラムがおかしかったので、買い換えても、動くはずがないのですからね。
つづく