ESP32(ESP-WROOM-32)開発シールドの作成

市販の開発ボードは安価なものもあり通常は既製品を購入することになると思います。
ボードを自作する理由はいくつか有りますが敢えて挙げると市販のボードはハード的な面ではほとんど手を入れることができない、入れる必要もないといったところでしょうか。工作好きの人ならわかってくれるでしょうか!?

そんな訳で今回はこれまでのESP8266ベースボードを利用してESP32の開発シールドを作成してみたいと思います。

参考サイト ESP-WROOM-32

回路図 esp32(pdf)


回路図はベースボードを利用する上でのesp-wroom-02とesp-wroom-32の関係です。
esp-wroom-32の動作に最低限必要なものは電源と3(EN)のプルアップ。
シリアルモジュールからTXD,RXD信号、DTR,RTS(自動プログラム)
ビルトインLEDとしてIO2.IO16を繋いでいます。
コンデンサは適当に変換基板で。


ESP-WROOM-32とピッチ変換基板はAliで入手しました。安いところ(セール中)で380円位(送料無料)、変換基板は2枚購入して1枚あたり100円位(送料込)
この変換基板コンパクトなところはいいのですがピンレイアウトがわかりにくいのでモジュールのピンアサインに合わせてピンソケットに繋ぎ込んでやります。
使用不可のピン(17〜22)は無視、個人的にはモジュール通りのレイアウトが一番使いやすいと思っています。

変換基板へのはんだ付けは0.8mmのはんだを使ったせいかうまく熱が通る感覚を掴めませんでしたがなんとか付いたようです。次は0.6mmのはんだを用意してチャレンジしようと思います。

ESP-WROOM-32用ミニブレッドボードシールドを作成してみました。ロングのピンヘッダを干渉しない程度にカットしています。

火を入れる前に入念に配線チェックをします。電源ライン、各ピンの接続、隣接ピン同士のショートの有無、OKだったら電源のみ接続して変換基板の電源ピンで電圧チェック。モジュールを差し込んで再度電源を投入します。

確認、バックアップ

$ esptool.py -p /dev/ttyUSB0 -b 921600 chip_id
esptool.py v2.3.1
Connecting....
Detecting chip type... ESP32
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Chip ID: 0x8930aea44167
Hard resetting via RTS pin...
$ esptool.py -p /dev/ttyUSB0 -b 921600 flash_id
esptool.py v2.3.1
Connecting.....
Detecting chip type... ESP32
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Manufacturer: c8
Device: 4016
Detected flash size: 4MB
Hard resetting via RTS pin...
$ esptool.py -p /dev/ttyUSB0 -b 921600 read_mac
esptool.py v2.3.1
Connecting....
Detecting chip type... ESP32
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
MAC: 30:ae:a4:41:67:14
Hard resetting via RTS pin...

ここで”はい、ちょっと待って!”を実行(ファームウェアのバックアップ)
baud 921600では反応が無いですね。(Pi直ポート、ショートケーブルでもダメ)
成功時は即%表示が帰ってきます。baud 460800ではOKでした。

$ esptool.py -p /dev/ttyUSB0 -b 460800 read_flash 0 0x400000 esp32_firmware.bin
esptool.py v2.3.1
Connecting....
Detecting chip type... ESP32
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
4194304 (100 %)
4194304 (100 %)
Read 4194304 bytes at 0x0 in 100.7 seconds (333.1 kbit/s)...
Hard resetting via RTS pin...

$ ls -l esp32_firmware.bin
-rw-r--r-- 1 pi pi 4194304  6月 21 19:44 esp32_firmware.bin

書き戻しは以下の通りでできると思いますが実行確認はしていません。

$ esptool.py -p /dev/ttyUSB0 -b 460800 write_flash 0 esp32_firmware.bin

次回はRaspberry PiへESP32開発環境をインストールしていきたいと思います。

cp2102 usb-シリアル変換モジュール (RTS有り)

今回新たにcp2102 usb-シリアル変換モジュールを入手しました。やはりAliから$1.08(送料無料)と100均感覚で手に入ります。
以前のmicro usb版はRTS端子が引き出されていませんでしたがこのタイプはcp2102の全信号が取り出せます。
やはり自動プログラムが動かないと不便なのでRTS端子のあるこのモジュールを使ってみたいと思います。


こちらもICの型番等が一切ないですね。敢えて消しているというよりはコストの関係からプリント工程を省いているようにも思えます?

回路は大体こんな感じになっていると思います。

回路や定数はmicro usb版と比べるとまともに見えます。


このままでは使いにくいので余計なものは取り外します。
USBコネクタは簡単に取れないので裏面にはんだを盛って無理やり(壊さない程度に)引き起こす方向に押すなり引くなりして隙間を作ります。隙間ができたら半田ごてを当てながらドライバーなどでこじって少しづつ抜いていきます。
ホールに残ったはんだは吸い取り線で取るか吸い取り線でも取れない時は少し新しいハンダを盛って充分に熱を当て手に持ったまま素早く机の上でパン!と叩いて反動ではんだを飛ばします。(技ありです)


USBコネクタのD-D+のピッチは変則的ですがピンヘッダを少し曲げてやると付きます。
標準の信号線以外は必要なRST端子側のみピンヘッダを取り付け、ベース基板に合わせて信号線を繋ぎ込みます。
当初のCH340基板を少し広めにとっていたこともあってピッタリ収まりました。

結果は自動プログラムOK、UploadSpeed 921600もOKでした。

さてcp2102ですがこちらのページESP-WROOM-32には1.5M (1500000) baud で転送できるとあります。

esptoolで確認してみましょう。

1.2M(1200000) OK
1.5M(1500000) OK
この他にいくつかの値で試してみましたが1.56M(1560000)がたまたま通っただけでこれ以外の数値ではエラーになってしまいました。またOSによっても通る値に違いがありそうです。
どんな計算か理解できていないのですが1.2Mと1.5Mではいけそうです。

boards.txtの編集

~/.arduino15/packages/esp8266/hardware/esp8266/2.4.1/boards.txt

generic.menu.UploadSpeed.1500000=1500000
generic.menu.UploadSpeed.1500000.upload.speed=1500000
generic.menu.UploadSpeed.1200000=1200000
generic.menu.UploadSpeed.1200000.upload.speed=1200000

以上をUploadSpeed欄に追記IDEを再起動

1.5Mで問題なく書き込みできますね。
但しUSBポートはPIに直挿しケーブルは短いケーブルじゃ無いとエラーが出そうです。

このcp2102モジュールなかなかいいのでまた1個ポチってしまいました。

ESP8266の環境も大体できたので次は遅ればせながらESP32の環境構築に一気に突入してみたいと思います。

ESP8266(ESP-WROOM-02) webサーバー

ESP8266も大分枯れてきたデバイスと思いますが探し方が悪いのかUIを含めて当サイトで使ってみたいという作例がなかなか見当たりません。
WiFiマイコンということで単純に遠隔で何かをオン、オフする用途を想定してさらに最低限有ったほうがいいと思われる機能を含めてweb情報を参考にwebサーバーのベースを作成してみました。
内容については当サイトも8266.beginなので保証しかねます。

環境

ESP-WROOM-02 Arduino IDE1.8.5 + esp8266 v2.4.1 Raspberry Pi3

WiFi

WiFiは固定IP、STA modeとしています。
ローカル内の使用を想定しているため固定IPで運用をします。
名前解決は内部のDNSサーバーまたは/etc/hostsを利用しています。

Arduino OTA,SPIFFS

webサーバーとして運用するにあたり外せない機能としてはArduino OTA,SPIFFSがあります。

特にシリアルでデバッグなどを必要としない限り設定をしてしまえばWiFi経由でスケッチやデータをアップロードできるのでこれは欠かせませんね。
またindex.htmlもスケッチ内に置く必要も無いためページの作成も効率が上がります。(見栄えの良いページを作るとなるとこれはこれで難しくなります!)

sleep

sleepはlight sleep modeを設定
デフォルトはModem-SleepのようですがLight-Sleepにしても今回の用途では全く変わりないように感じられます。
正確な電流値は測ってはいませんが簡易なUSB電流計では約半分(100mA->50mA)くらいの値を示します。結果はモジュールの温度でも判別がつくかと思います。あきらかに温度が下がっているのがわかります。
sleep modeを設定していてもloop()内でsleepに入るタイミングが無いとsleep動作になりません。そのためdelay(1)を挿入しています。

NTP

NTPはこちらのページを参考にしています。ESP8266 (ESP-WROOM-02) でNTP(時刻合わせ)をするライブラリ。(Timeライブラリと連携して)
現時点では特に時刻を設定しているものは無いのですが今後活用する機会もあるということでNTPを動かしています。
時刻合わせは24時間に1回問い合わせをしています。但しリセットの度に問い合わせをすることになるので常時動いているPiをNTPサーバーに仕立ててローカル内で時刻合わせをしています。

// ntp
  setSyncInterval (86400); // 24h(86400sec)
  setTimeServer("192.168.0.115"); // local server
  ntp_begin(2390); // port 2390

またNTPは稼働していますがシリアル送りはwebサーバーのパフォーマンスに影響が出るため確認が済んだらシリアルへの送りは停止しています。

画像表示

画像表示については特に必須では無いのですが無いよりは有ったほうが気運が高まる?もんです。
という訳でこちらのページを参考にしてみました。[作業ログ]ESP8266をAP・Webサーバーとして使ってみる

画像はこちらのサイトから頂きました。(Thanks)
マップラボ-地図アイコンを無料ダウンロード maplab

画像をアップロード、表示するためにSPIFFSが必要です。
画像はgif,png,jpgで確認しています。
index.htmlから”/img1/”をアクセス、SPIFFSでファイルをオープンserver.streamFileでブラウザに渡します。
小さい画像ならば表示速度も問題ないと思います。アニメーションgifは少し遅い

setup()で関数を作成
server.on (“/img1/”, onImg1);

void onImg1() {
  SPIFFS.begin();
  File imgFile = SPIFFS.open("/shirakawago216.gif", "r");
  server.streamFile(imgFile, "image/gif");
  imgFile.close();
  server.send(200, "text/html", html);
}

index.html

index.htmlと画像はSPIFFSでアップロードします。

ボタンは少し見栄えの良いものをということでこちらのページを参考にしました。
WIFI-TNGとESP-WROOM-02で始めるWIFI Arduino
ボタンをクリックすると色が変わります。オフをクリックすることで元の色に戻ります。
JavaScript入門を少し読みました。
但しJavaScriptはクライアントサイドの実行になるので再読込やほかのデバイス、ブラウザからの実行では同期が取れません。
日付時刻表示は8266の時計ではなくクライアントの時計になります。
JavaScriptはこちらのサイトから(現在の日時を表示する)表示が動いてしまうので0値だけ追加しています。

sample esp8266.ino
sample index.html

ESP8266(ESP-WROOM-02)開発ボードの作成

現在はESP8266の後継品ESP32が主流かと思います。ESP32はピン数が多いので用途によってはピン数の少ないESP8266のほうが扱いやすいかもしれません。
ESP8266に関してはnodemcu(ESP12E)で少し遊んでいたのですが今回ESP-WROOM-02(ICのみ)を入手したので今更ですがESP8266の開発ボードを作成してみました。

回路図(pdf) esp8266


USB-TTLシリアル変換にはarduinoのCH340GをRTSを有効にして使用しました。
Auto Programはnodemcuタイプ

ピッチ変換基板は手作業で作成してみます。


GNDピン位置に抵抗などの切った足をはんだ付けします。
モジュールのケースもGNDに落ちているので放熱を兼ねて基板に密着してはんだ付け。


両サイドにはピンソケットを立てています。
リード線をはんだ付け。(リード線は直径1mmを使用)
ピンヘッダを立てて。
リード線は作業しやすい長さで。


3V3とGNDは最短距離ではんだ付けしました。
とぐろを巻いているが気にしない。
ピンヘッダの間隔はスイッチサイエンスの変換基板と同じ。
ピンソケットを利用してブレッドボードシールドなども作成可能と思います。


ベースボードはESP32に対しても流用可能と踏んでいるのですがいろいろ検討しています。


取り敢えずはLEDシールドを載せています。
基板には直接3mmタップを立てています。でも1箇所欠けてしまいました。(・・;)
ベースはポリカプラダンの切れ端を利用。

通電してみる

モジュールをセットする前に3V3ピンで3.3Vを確認してから取り付けます。

raspberry pi3にesptoolを導入します。
esptool – ESP8266およびESP32シリアルブートローダユーティリティ

$ pip install esptool

インストールしたesptoolは~/.local/bin/に保存されます。
パスが通ってないので設定ファイルを作成
~/.bash_profile(無ければ新規作成)ホームディレクトリは適当に

export PATH=${PATH}:/home/pi/.local/bin
$ esptool.py -p /dev/ttyUSB0 -b 115200 chip_id
esptool.py v2.3.1
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Uploading stub...
Running stub...
Stub running...
Chip ID: 0x0091e666
Hard resetting via RTS pin...
$ esptool.py -p /dev/ttyUSB0 -b 115200 flash_id
esptool.py v2.3.1
Connecting......
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Uploading stub...
Running stub...
Stub running...
Manufacturer: a1
Device: 4015
Detected flash size: 2MB
Hard resetting via RTS pin...

ファームウェアの書き換えもesptool.pyから可能です。(コマンドラインからなので少しわかりにくいですが)
あとはArduinoIDEにESP8266ボードをインストールして確認OKですね。

現状の問題点


ArduinoIDEからの読み書きもOKなのですがUpload Speedを921600で長いUSBケーブルを使用すると書き込みに失敗してしまいます。(短いケーブル20cmはOK)
長いUSBケーブルで460800はOK


前回作成したcp2102 usb-シリアル変換モジュールで試してみます。
RTS信号が無いのでスイッチ操作でプログラム書き込みモードにします。
こちらはOKですね。どうもCH340Gモジュールの作り方が下手糞のようです。
また新たに適当なモジュールを探してみます。


次回は当サイトにとって使いやすいと思うWiFiWebServerスケッチの雛形について考察してみたいと思います。

cp2102 usb-シリアル変換モジュール (micro usb 4.3V版)

AliExpressを覗いていたところmicro usb仕様のcp2102 usb-シリアル変換モジュールが目について小型のサイズ、値段も送料込み100均並みの価格とあって購入してしまいました。

cp2102ということで安心していたのですがネットを見ると落とし穴がありますね。
USB-シリアル変換モジュールの色々
USB-シリアル変換器「CP2102モジュール」に要注意

 

届いたcp2102モジュールもやはり4.3V版でした。地雷を踏んでしまいました。

Silicon Labsのデータシートから
9(RST)はOptionで外部から抵抗でプルアップしています。


届いたモジュールは生の5Vがかかっていますね。
で、この9番ピンのパターンを切り離してやればいいことになります。


ICの型番も消されています。
画像でははっきり見えますが肉眼ではほとんど見えません。
老眼では全く見えません。
老眼では9番ピンのパターンだけを切ることは至難の業になります。


で、この接続しているチップコンデンサを外してやります。
あとははんだ跡のパターン部分を縦でも横でも切り離します。
なんとか手探りで切り離すことができました。
外したコンデンサはピンヘッダ取付部の+5V-GND間に取り付けます。(外側のほうが良かったです)
確認は通電して3.3Vが出ていればOK
目が達者で多少手先が器用な人であれば可能と思います。(保証はしませんが)


CH340Gの代わりに取り付けてみます。


無事認識しました。Piからは
% lsusb
Bus 001 Device 055: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light

残念ながらRST信号は取り出せそうもありません。


どうしてもmicro usb仕様の小型のモジュールがほしい、しかも低価格でという場合はこんな方法もありかな?(保証はしませんが)

Top