ESP32 の Wi-Fi アクセスポイントをスマホで選択できるようにしてみた

記事公開日:2018年2月15日
最終修正日:2018年4月4日
ここの記事のプログラムをさらに改良し、ブラウザのセキュアな SSL 通信で、パスワードを暗号化して送信する、Wi-Fiアクセスポイントセレクターを作ってみました。
合わせて以下の記事をご覧ください。
Arduino – ESP32 で SSLサーバーを構築し、セキュアな Wi-Fi アクセスポイントセレクターを作ってみました

こんばんは。

今回は、コメント投稿などでお問い合わせいただいたこともあり、Arduino – ESP32 の Wi-Fi 設定で、SSID やパスワードをスマホで設定できるようにする実験をやってみました。
しかも、ブラウザで Wi-Fi スキャンされたアクセスポイントを簡単にセレクトできました。
これを使えば、外出先の公共アクセスポイントなどでも簡単に設定できそうです。

残念ながら、高度な Auth 認証が必要なアクセスポイントには接続できませんが、SSID と パスワードだけで接続できるアクセスポイントならば、この方法で簡単に接続でき、外出先で簡単に切り替えできると思われます。

動作している様子の動画を用意したかったのですが、近辺の SSID にモザイクをかける編集が大変だったので、残念ながら動画を作るのを途中でやめました。
静止画写真だけで想像していただければと思います。

Wi-Fiスマホセレクトができれば、パソコンを使わずにスマホだけでアクセスポイントを設定できるので、いろいろな用途に使えそうです。
プログラマーでもない素人の自分がここまで出来るようになるので、ホントにArduino core for the ESP32 のライブラリは良く出来ていて、有難い存在です。

今回のポイントは、ESP32 自体がルーターやアクセスポイントに接続していない時に、どうやってスマホと通信するかという問題です。

ネットで調べたり、いろいろ考えた結果、ESP32 の AP モードを使えば良いことが分かりました。
そう言えばそうですよね。
しばらく使い道が分からなかった AP モードを使えばナンてことは無いんです。

要するに、Arduino – ESP32 のライブラリの soft AP を使うモードです。
これは、ESP32 自身が Wi-Fi ルーター(アクセスポイント)になるのですが、市販の専用ルーターに比べて通信トラフィック容量が小さいので、あまり使い道が無いと思っていました。
でも、今回のように、スマホでアクセスポイントを切り替える用途にはバッチリ使えます。
今頃になって、APモードの利点が分かって来ました。

ESP32 を APモードとSTAモード(ステーションモード)の両方で起動し、まずは APモードでスマホと ESP32 を接続し、Wi-Fi スキャンをかけます。
そこで選択されたアクセスポイントと STAモードで接続するという方法です。
2つのモードがあるということはとっても便利ですね。

また、スマホで選択した SSID と パスワードは、 ESP-WROOM-32 に内蔵の SPIFFS フラッシュに保存し、そこから読み出してアクセスポイントと接続するようにしてみました。
ですから、プログラムを改良すれば、一度設定さえすれば、以後自動接続ということもできると思います。

ということで、自分なりの方法で作った方法を説明したいと思います。
因みに、趣味と独学の素人プログラムですので、動作は保証しません。
無駄なところが多々あると思いますが、あくまで自己満足で作ったものですのでご了承ください。

また、これは SSL通信ではありません。
パスワードは Wi-Fi通信で暗号化されません。
十分ご了承の上、自己責任で使用してください。

その他、もし、誤り等がありましたら、コメント投稿等でご連絡いただけると有難いです。

スポンサーリンク

使うもの

ESP32 ( ESP-WROOM-32 )開発ボード

私の場合は、USB電源の保護機能が充実している、スイッチサイエンスさんの ESPr Developer 32 を使っています。

これについては、以下の記事も参照してみてください。

ESPr Developer 32 ( スイッチサイエンス製 ) を使ってみました

パソコン、スマホ、USB ケーブル等

ここでは、Windows 10 パソコンと、Android スマートフォンを使って説明しています。

Arduino core for the ESP32 の設定

Arduino IDE は 1.8.5 で動作確認しています。

Arduino IDE で ESP32 の開発ができる、Arduino core for the ESP32 のインストール方法は以下の記事を参照して、予めインストールしておいてください。

Arduino core for the ESP32 のインストール方法

なお、使用するバージョンによって、SPIFFS フラッシュ読み取り不良が起こったりします。

SPIFFS アップローダープラグインのインストール

Arduino IDE に ESP32 SPIFFS フラッシュアップローダープラグインを予めインストールしておいてください。
インストール方法や使い方については、以下の記事を参照してください。

ESP-WROOM-32 ( ESP32 ) SPIFFS アップローダープラグインの使い方

ここで注意していただきたいのは、Arduino core for the ESP32 のバージョンによって、SPIFFSフラッシュ読み取り不良があります。

Commits on Dec 19, 2017 バージョンまでは正常に動作していたのに、Commits on Feb 8, 2018 バージョン に替えると読み取り不良になります。
その場合、データを SPIFFSアップロードした後、Arduino – ESP32 の「スケッチ例」SPIFFS_Test を数回コンパイル書き込みして動作確認した後、ご自分のスケッチをコンパイル書き込みしてみてください。

空の設定ファイルを SPIFFS フラッシュへアップロードする

SPIFFS アップローダープラグインを使って、予め空のテキストファイルを、テキストエディタやメモ帳などで、UTF-8形式で作成してアップロードしておきます。

フォルダ名とファイル名はとりあえず以下のようにしておいてください。

/APconfig/APconfig.txt

このファイルだけアップロードしてしまうと、以前にアップロードされていたファイルが消えてしまうので、必要なファイルと共に改めてアップロードしてください。

ライブラリのインストール

今回は、ESP32 の STAモード(ステーションモード)でインターネットに接続できた場合、それを確認するために、NTPサーバーから時刻を取得します。
その場合、サンプルスケッチを使うよりか、私の自作のライブラリをインクルードした方が簡単なので、それを Arduino IDE にインストールします。

ライブラリはGitHub の以下のリンクにあります。
●ESP32_WebGet
https://github.com/mgo-tec/ESP32_WebGet
ダウンロードした ZIPファイルをArduino IDE にインストールする方法は以下を参照してください。

GitHubにある ZIP形式ライブラリ のインストール方法 ( Arduino IDE )

また、Arduino 標準の Time ライブラリをインストールしておいてください。
以下のリンクにあります。

https://github.com/PaulStoffregen/Time

では、次のページではスケッチを説明します。

スポンサーリンク


mgo-tec電子工作 関連コンテンツ ( 広告含む )

投稿者:

mgo-tec

Arduino , ESP32 ( ESP-WROOM-32 ) , ESP8266 ( ESP-WROOM-02 )等を使って、主にスマホと連携した電子工作やプログラミング記事を書いてます。ライブラリも作ったりしてます。趣味、独学でやってますので、動作保証はしません。 電子回路やプログラミングの専門家ではありません。 畑違いの仕事をしていて、介護にドップリ浸かりそうな年配者です。 少しだけ電気の知識が必要な仕事なので、電気工事士や工事担任者等の資格は持っています。

「ESP32 の Wi-Fi アクセスポイントをスマホで選択できるようにしてみた」への3件のフィードバック

  1. こんにちは!
    僕もこのような試みをESP8266でやったことがあります。htmlを作ったり結構めんどくさいんですよね ^^;

    最近はsmartConfigという機能を使っています。かなり楽です。
    https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/examples/WiFiSmartConfig/WiFiSmartConfig.ino
    ESP-IDFでもサポートされていますので、割と安心して使えると思います。
    もしすでにご存知でしたら失礼しました。

    1. けりさん

      いつも Twitter ではお世話になっております。
      記事をご覧いただき、ありがとうございます。
      m(_ _)m

      smartConfig は使ったことが無いですね。
      これは、公共Wi-Fi などのオープンなアクセスポイントに自動接続するライブラリでしょうか?
      あまり詳しく調べてないのですが、このサンプルスケッチだけ見ても、イマイチ使い方がわかりません。。

      WiFiSTA ライブラリには、setAutoConnect などの関数があって、使い易そうですね。
      これらを使えば、もっと簡略化できるかもしれませんね。
      今度挑戦してみたいと思います。

      いつも有益な情報、ありがとうございます。
      感謝! 感謝!

コメントを残す

メールアドレスが公開されることはありません。

*画像の文字を入力してください。(スパム防止の為)

This site uses Akismet to reduce spam. Learn how your comment data is processed.