しばらくMSXの投稿が続いたので、気分転換にESP32をいじってみます。
少し前に秋月電子八潮店でアウトレットセールをしていたESP32-WROVER-Bを買ってきました。
ピッチ変換基板付きで(ピンはついていません)500円だったので、使用目的もないのにレジに持って行ってしまいました。WROVERにはPSRAMがあるのは知っていたので、エミュレータが動かしやすいなと思ったのも購入理由の一つです。
フラッシュメモリ4MB、PSRAM 8MBとなっていました。
このキットはUSBシリアル変換などはついていませんので、自分で用意する必要があります。もし使用するUSBシリアルデバイスが自動書き込み出来ないタイプなら、ENとIO0の操作にタクトスイッチが2つ必要になります。手持ちのCH340Eのものは自動書き込み機能が無かったのでタクトスイッチが必要でした。
このキットの基板の端子は以下のようになっています。
ENとIO0はプルアップしておき、タクトスイッチでGNDに落とせるようにしました。CH340EとはVDD、GND、TXD0、RXD0を接続するのですが、ESP32が3.3V動作なのに対して手持ちのCH340EのUSBシリアルは5V出力なので電圧が異なります。
無理につないでも動くような気がしないでもなかったのですが、購入したばかりでなにか不具合が発生するのも嫌だったので三端子レギュレータとレベルコンバータで3.3Vにして接続しました。
福箱に入っていたブレッドボード。金属の板が付いていてかさばるし、電源ラインのピッチが2.54mmより広くて微妙に使いにくいです。
タクトスイッチを押してダウンロードモードにしてから、Arduino IDEでBlinkのスケッチを書き込むとちゃんと動作してくれました。
書き込みが可能になったらスケッチにOTAを組み込んでおくと、次からUSBシリアルを使わずにネットワーク経由でスケッチが書き込めるので便利です。
でもプログラムの暴走やループの中にOTAハンドラのコールを入れ忘れたりすると書き込めなくなるので、開発中はUSBシリアルの書き込み環境を残しておいた方がいいでしょう。
OTAテンプレート
※このブログではHTML行末の半角">"が入力できないので全角">"で代用しています。
- #define WITH_OTA
- #ifdef WITH_OTA
- #include <WiFi.h>
- #include <ArduinoOTA.h>
- #endif
- void setup() {
- #ifdef WITH_OTA
- WiFi.mode(WIFI_STA);
- WiFi.begin("..........", ".........."); // SSID,パスワード
- ArduinoOTA.setHostname(".........."); // ネットワークポートに表示される名前
- ArduinoOTA.begin();
- #endif
- }
- void loop() {
- #ifdef WITH_OTA
- ArduinoOTA.handle();
- #endif
- }
PlatformIOでOTAを使うときはplatformio.iniに以下の2行を追加します。upload_portにはIPアドレスを記述します。
- upload_protocol = espota
- upload_port = XXX.XXX.XXX.XXX
ところでWROVER-Bには8MBのPSRAMがあるのですが、ArduinoIDEでは4MBまでしか使えないとの情報がありました。ESP32のMMUのマッピング出来る最大容量が4MBとのこと。ESP-IDFならバンク切り替えのようにして8MBを使うことが出来るようです。今度なにかの機会に試してみようと思います。
※コメント投稿者のブログIDはブログ作成者のみに通知されます