お父にゃんの電子工作 -4ページ目

お父にゃんの電子工作

暇なおじさんが、電子工作(主にラジオ製作)をして勝手な感想を書く

CYDをいじっていた時に、ESP32に関する記事でWiFi設定をスマホから行える旨が書いてあった。

ほぉ、これは興味深い。

 

今まではこんな風に、プログラムの中にWiFi設定情報を書き込んでいた。

const char* ssid = "your_ssid";
const char* password = "your_password";

だが、プログラムを公開するのに、いちいち上記のように書き換えなきゃいけないし、WiFi環境が変わったりしたときに、再コンパイルが必要だったり、面倒が臭いのである。

 

スマホから書き換えが出来るなら、いろいろ便利に違いない。

 

早速、ChatGPTにお願いした。

内容としてはAP+簡易Webサーバーを立ち上げて、そこにスマホ等を繋げてブラウザでWiFi設定情報を書いて、Flashに書き込んで再起動。

しかしサンプルプログラムでも、結構なコード量なのである。

むむむ、これは、これで面倒が臭い。

 

試しにGoogle ChromeのAIモードで聞いてみたら、「WiFimanagerを使えば簡単にできる」との答え。ついでにサンプルプログラムも書いて、とお願いしたら書いてくれた。

 

WiFiの設定情報が無い、または電源投入時にGPIO1がLowの場合に、AP+簡易Webサーバーが立ち上がる。そこにスマホ等を繋げてると、ブラウザにWiFi設定画面が出てくる。書き込むと、設定内容をFlashに書き込んでくれる。再起動して、ちゃんとつながれば通常起動するらしい。

#include <WiFi.h>
#include <WiFiManager.h>
 
// 強制設定モード起動用のピン番号
const int TRIGGER_PIN = 1;
 
void setup() {
    Serial.begin(115200);
   
    // ピンをプルアップ入力に設定(ボタンを押すとLowになる想定)
    pinMode(TRIGGER_PIN, INPUT_PULLUP);
 
    WiFiManager wm;
 
    // 起動時にGPIO 1がLow(GNDと短絡)されているかチェック
    if (digitalRead(TRIGGER_PIN) == LOW) {
        Serial.println("GPIO1がLOWのため、強制的に設定モードを起動します...");
       
        // 設定画面が起動。接続されるまでここでループします
        // 第1引数はAP名、第2引数はAPのパスワード
        if (!wm.startConfigPortal("ESP32S3_ForceConfigAP", "password123")) {
            Serial.println("設定に失敗しました");
            delay(3000);
            ESP.restart();
        }
    } else {
        // 通常起動:保存された情報で接続を試みる
        // 接続できなければ設定モードへ移行
        bool res = wm.autoConnect("ESP32S3_AutoAP");
 
        if(!res) {
            Serial.println("接続失敗。タイムアウトまたはエラー");
            // ESP.restart();
        } else {
            Serial.println("WiFi接続成功(通常起動)");
        }
    }
 
    Serial.print("IPアドレス: ");
    Serial.println(WiFi.localIP());
}
 
void loop() {
    // メイン処理
}

 

どうもChatGPTは学習内容が古くて、最近の状況について行けてないのではないかと思う事が多いのである。いろんなAIにセカンドオピニオンを求めるのが正しいのかも。

 

まぁ、前置きはこのくらいにして、前に作ったESP32S3のWebラジオ↓に移植してみる。

 

まず、WiFiManagerをライブラリマネージャーから検索してインストール。

 

その他、画面でわかるようにLCD表示部のコードを追加した。

 

エンコーダーのセンタSWを押したまま電源onすると、設定モードで立ち上がる。

スマホやiPad等でWiFiを画面のssidに繋げる。

 

画面のssid(Web_Radio)につながると、自動的に以下の画面に切り替わる。

おお、なんか本格的。

 

Configure WiFiボタンを押すと、以下のように周辺のWiFiのリストが出てくる。

2.4GHzの自分のWiFiを押して、そのパスワードを入力して、saveを押すと、設定が書き込まれて、リブート。つながればそのまま動作する。

 

ちなみに、infoボタンを押すと以下のような情報が確認できる。

何とも本格的。

 

で、リブートすると、以下のようにつながったssidとIPアドレスを表示。

 

すぐに通常画面に切り替わって動作する。

 

今回のコードは以下に置いておきます。興味のある方はどうぞ。

SeeedESP32S3_WebRadio_V1_3

 

なお、コンパイル時の注意点は以前の記事と同様に、ツールメニューから

・USB CDC On BootをEnabledに設定 

 (これをしないとシリアルモニタが動かない

・Flash ROMサイズを8MBに

・パーテーションを8Mで、3M APP/1.5MB SPIFFSに

・PSRAM:OPI PSRAM に設定

 (ESP32-audioI2SライブラリはPSRAMをバッファ領域に積極的に使うみたい。

  さらにPSRAM設定が無いとVORBISコーデックが再生出来ない

ボードライブラリは現在最新の3.3.5を使用

 3.1.X だと、I2Sが動作せず音が鳴らない

 3.2.0と3.3.0では動作した。

 安定版の3.0.7のほうが お勧めかも

・ESP32-audioI2Sライブラリは3.3.0以前のものを使用

 3.4.x以降は仕様変更によりこのソフトでは動作しない

 3.0.13が安定版でオススメ

 

その他回路図等は以前の記事を参照されたし

 

 

 

WiFiManagerを使うと、何とも本格的で製品レベルな感じでWiFi設定が出来るようになる。

ちょっと、びっくりなのである。

それと同時に、今回は良い感じに仕上がって、おじさんも気分が良いのである。

 

 

「おいらも気分が良いのニャ」

陽が当たると、気持ちいいもんね