センサも取りそろえつつあり、また、それを制御するマイコンもいくつか使えるようになってきたので、次は無線、ということで手頃な無線モジュールを物色しておりました。IoTと言えばLPWAなど気になりますが、まずは手頃なところでWiFiとBluetoothあたりでしょうか。Webやら雑誌やらみていると最近目につくのが、中国のEspressif Systemsという会社から出ているESPという名のシリーズです。
- これ自体がWiFi内蔵の「マイコン」モジュールとしてプログラム可能
- 他のマイコンにWiFi接続を提供するための無線モジュールとしても使える
結構、あちこちで紹介されていて、簡単に使えそう、と飛びつきました。とりあえずは、2の方で他のマイコンにつなげる無線モジュールとして使ってみ、そのうち、1の「マイコン」としても使おう、という目論見です。
※「IoT何をいまさら」投稿順Indexはこちら
かなり昔になるのですが、この手のWiFiモジュールが出始めた頃、装置の試作に使ってみたことがあったのです。メインのマイコンとはUART接続でした。ESPについても調べていると、UARTで「ATコマンド」を送って制御できるようではないですか。ATコマンド、オリジンはHayes。年寄りは”ATDT”とか懐かしいモデム・コマンドを今でも忘れられないのです。OK、直ぐにつながるでしょ、と飛びついたのが、
ESP32-DevKitC
という製品でした。昔の似たWiFiモジュールの値段に比べると数十分の1。ただ、ESP8266という一世代前のLSIを搭載したモジュールの情報が溢れているのに比べるとESP32というLSIを搭載した機種の情報はまだ少なめなことがちょっと気になりました。ま、なんとかなるさと、よく調べもせず(例によってデータシートも読まずに)に購入してしまいました。それもDevKitCという小さな、しかし、ブレッドボードに刺すには幅広すぎる基板上にESP32-WROOM-32Dモジュールが搭載された開発ボードです。
なんといっても、モジュール単体を買って、周辺(電源や書き込み用のUSBブリッジなど)を繋いでいくことを考えたら(このところそんなことばかりやっています)、出来合いの製品あるのなら、それの方が手っ取り早くていいじゃん、という浅墓な考えです。それに、ESP8266世代とちがって、ESP32の方は、
Bluetoothにも対応
WiFiでネットにつないでIoTだけじゃなく、スマホでアプリに接続というものやって見れるじゃありませんか。一石二鳥。買ってきたままの勢いで、とりあえず起動してしまいました。
あれあれ、なんだかwhat?とか変なプロンプトが出てくる。ATと打ってもつれない態度です。それでは、ということで
help
と打ってみました。アタリました。しかし、なにやらssc_commandsとかいうExcelファイルを見よ、と。なんじゃらほい。とりあえずWebで調べてみると、
sscは工場出荷テスト用のプログラム
でありました。しかし肝心のExcelファイルは落ちていません。あくまで内部用みたい。ここからATコマンドを受け付けるモードに遷移できるのかしら、と調べてみました。まずは、WiFiのアクセスポイントとして動作させることができました。接続もできました。また、STAモードとて、自分が子機になって他のWiFiのアクセスポイントをスキャンしたりもできました。この辺の情報は、調べるとWeb上に落ちています。なお、STAモードに一度入ると電源切ってもSTAのままなので、APモードに戻るためには、STAモードで-Dオプションでディスコネクトしないとダメです。
しかしね、出荷テスト
用です。セキュリティのかかったAPには接続できないし、接続しても使えるようなアプリが無いのだからどうしようもありません。
すっぱりsscは諦めて、書き換え
するのが正しいようです。そこで、Espressif 社のホームページに行き、ESP32にATコマンドを受け付けるアプリケーションをダウンロードしてきました。こんどは、多少、データシートを読んで確認しながらです。まずは、モジュール内のFlashへの書き込みツールです。
flash_download_tools_v3.6.5
という最新版をダウンロードしてインストールしました。そして、ATコマンドをうけつけるアプリケーションのバイナリは
ESP32_AT_V1.1.3
というこれまた最新版です。リリースノートを読むと分かるのですが、V1.1.2までは、モジュールのタイプごとにやれWROOM用だの何とか用だの別々のダウンロードファイルになっていたものをV1.1.3からは全部同梱、モジュールタイプで変えないといけない部分は、そこだけ変更してね、という感じ。書き込むべきバイナリファイルは結構数が多い上に、16進でアドレスを指定しないとなりません。どこに何を書いたら良いかは、
download.config
というファイルに書かれているので、このファイルをツールで読み込めばいいじゃん、と思うのですが、読み込ませ方が分かりません。結局、ダウンロードツールを起動して、download.configを参考に手入力しました。しかし、その前に迷うところが、まず、ダウンロードツールのコンソールウインドウが立ち上がります。ツールからのメッセージなどがここに出力されるようで、使っている間消えません。その後、GUI画面で「どのツール」を立ち上げるか聞かれるのです。
- ESP8266 DownloadTool
- ESP8285 DownloadTool
- ESP32 DownloadTool
- ESP32D2WD DownloadTool
最初の2つじゃないことは、私にも直ぐに分かりました。しかし、私の目の前にあるものはどっちなんだろう。モジュール型番の末尾は32Dとあるし。。。調べてみると、32D2WDというのはより新しい機種で、手元のモジュールとは違うということがわかりました。
ESP32 DownloadTool
を選択します。ボードと接続したらSTARTボタンを押せば、ボードを認識して情報を表示してくれるというので押しました。がエラー。なんで?
右下のCOMポートの番号設定していませんでした。
COMポートとボーレートを確認し、START。おお、認識されました。SPIつかってフラッシュに書き込むのでしょう。SPI SPEED 40MHz, DIOモード、32Mbitなどと設定。そのあと、バイナリファイルを指定するためにファイル指定ダイアログを開いては.binをクリックし、@の横にdownload.configに書いてあるアドレスを書いて行きます。そして左端にチェック。面倒ですが、問題ないこと確認できると入力欄が緑になります。また、後で気付いたのですが、一度入力した情報は記憶されるので、
次回もう一度同じ書き込みをしようとする場合はボタン一つでOK
ATコマンドを消して、自分で書いたアプリを乗せたあと、戻したりするときは一発で出来て便利。
こんな感じで入力をしていきましたが、大事なところは、
factory_param.bin
というファイルの指定でした。configには、プレインな上記ファイルの名が書き込まれているのですが、リリースノートを読むと、それぞれ機種毎のファイルをここに当てはめるようになっています。どうもこの設定で、端子の接続とかを切り替えているみたい。目の前のボードの場合
factory_param_WROOM-32.bin
というファイルを指定しました。いよいよ書き込み。かなり分量が多いので、それなりに時間がかかりますが、緑色のプログレスバーが伸びて行ってOKな感じです。書き込み成功。よし、起動。
ブートはできたのですが、何やら不穏な赤のラインが見えます。ota dataとかいうパーティションがinvalidだと!ちゃんとconfigどおりにバイナリ配置したのに。しかし、ATコマンドのデータシートにはちゃんと書いてありました。そういうときには、blank.bin というファイルをあてはめてね、と。さっそく、書き込みツールが記憶しているリストを活用し、末尾にblank.binを0x10000番地へと追加。再度書き込み。書き込み成功。また、起動。
こんどこそということで、ブート成功、あの赤いエラーラインは消えました。しかし、
ATと打っても何もかえってこず
ちゃんとデータシート読めや!USBの口に向かっているUARTポートは、あくまでPCからファイルダウンロードなどをするための開発用。ATコマンドは他のマイコンボードなどから制御するためのものだから
そもそもUARTが違う
です。自分がNucleoとかPSoCとか他のマイコンボードに接続しようとしているのだから、気付けや。さて、では、ATコマンド用のUART端子はどこに?これもATコマンドのデータシートにちゃんと書かれていました。さきほど書き込んだ
factory_param_WROOM-32.bin
の場合、TXはGPIO17, RXはGPIO16。急遽、PSoC4100S用に接続してあったUSB-UARTブリッジを引っぺがし(また後で復活させるから御免)、このモジュールのIO電圧は3.3Vなので、IO電圧ジャンパを切り替え、ESP32-DevKitCとの間で結線します。
TXにはRX
この間、間違っていないのに間違いだと勘違いして慌てました。しかし、結果は不調。なぜ?
やっぱり慌てていました。USB-UARTブリッジのシルクの右がピンなのか、左なのか、端から見れば間違ないですが、ずれて刺していました。危ない危ない、下手なピンなら壊れております。結局、また慌てて作って失敗。接続しなおしたのが、以下です。
そして、起動。
かなり手こずった感ありありですが、ATコマンド受け付けました。動いています。よかったよかった、というところで、本日(実際やっていたのは昨日ですが)は力尽きました。
ともかく、ATコマンド使えるようになったので、とりあえずパソコンで「練習」をして、接続シーケンスを確かめた後、マイコンのUARTに繋ぎ変えたいと思います。