ESP32でWiFi接続を簡単にする「WiFiHelper」ライブラリ開発のリリースノート
はじめに
- 毎回WiFiの記述を書くのは面倒
- WiFi接続に失敗した時に再接続を試みたい
- WiFi接続はライブラリで管理してメインプログラムをキレイに保ちたい
- WiFi接続に失敗した時の詳細なエラーメッセージを出力したい
こんな私自身の悩みに応えて作ったのが、これから紹介するWiFiHelper
ライブラリです。
次のようなイメージで、WiFi接続をかんたんに記述できます。
(WIFI_SSID, WIFI_PASSWORD);
WiFiHelper wifi
...
() {
loop.on()
wifi// この間に、HTTP clientなどでHTTPリクエストを行う
.off()
wifi}
動作環境
ESP32で動作します。ただし、ESP32のファームウェアは バージョン2.0.2 となります。それ以外のバージョンでは動作未確認です。
ライブラリのインストール
ソースコードはこちらのリポジトリで公開中です。 https://github.com/aragig/WiFiHelper
ArduinoライブラリやPlatformIOライブラリでは公開してませんので、上記のGitHubリポジトリから直接クローンするなりzipダウンロードするなりしてください。WiFiHelper.h
と WiFiHelper.cpp
の二つが本ライブラリのソースコードになります。プロジェクトのライブラリディレクトリへ正しく配置してください。
2024年2月時点では、バージョン0.3.5を公開中です。この
WiFiHelper
は、仕事でも使用してまして、今までに問題なく安定して動いてます。
platformio.iniでインストールする
PlatformIOをお使いの場合は、platformio.ini
のlib_deps
項目にリポジトリのURLを書くことで、WiFiHelper
をインストールすることができます。
[platformio]
;src_dir = lib/xxxxx/examples/xxxxxx
[env]
platform = https://github.com/platformio/platform-espressif32.git
board = esp32dev
framework = arduino
monitor_speed = 115200
platform_packages =
framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32#2.0.2
[env:debug]
lib_deps = https://github.com/aragig/WiFiHelper.git
build_flags =
-DWIFI_SSID=\"${sysenv.WIFI_SSID}\"
-DWIFI_PASSWORD=\"${sysenv.WIFI_PASSWORD}\"
-DWIFI_HELPER_PRINT_LOG
-DWIFI_HELPER_PRINT_ERROR
ちなみに、${sysenv.WIFI_SSID}
や
${sysenv.WIFI_PASSWORD}
は、シェルの環境変数から情報を取り込む書き方です。~/.zsrch
などにあらかじめWiFi情報を書き込んでおくことで、セキュリティ対策になります。
使い方
ここでは examples
フォルダにもありますサンプルコードをひとつ紹介して、使い方を解説していきます。
ソースコード(ESP32)
こちらはESP32で動かすソースコードになります。
WiFiHelper
を使ってWiFi接続を確立し、簡単なHTTPリクエストを送信してデータを受信するプログラムになります。
#include <Arduino.h>
#include "WiFiHelper.h"
#ifndef WIFI_SSID
#define WIFI_SSID "" // TODO WiFi SSID (2.4GHz only)
#endif
#ifndef WIFI_PASSWORD
#define WIFI_PASSWORD "" // TODO WiFiパスワード
#endif
#include <HTTPClient.h>
(WIFI_SSID, WIFI_PASSWORD, "WiFiHelper");
WiFiHelper wifi
struct HttpResponse {
int code;
;
String body};
(String url) {
HttpResponse http_request;
HttpResponse response.code = -1;
response.body = "";
response
if (!wifi.on()) { // WiFi接続
.code = -99;
response.body = "Failed to initialize WiFi";
responsereturn response; // WiFi初期化失敗
}
;
WiFiClient client;
HTTPClient http
if (!http.begin(client, url)) {
.code = -98;
response.body = "Failed HTTPClient begin!";
responsereturn response; // HTTPクライアント初期化失敗
}
.addHeader("Content-Type", "application/json"); // コンテントタイプ指定
http
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
// 正常な応答があった場合、サーバーからの応答を取得(必要に応じて)
.code = httpResponseCode;
response.body = http.getString();
response} else {
}
.end(); // HTTP接続終了
http.off(); // WiFi切断
wifireturn response;
}
void setup() {
.begin(115200);
Serial(10000);
delay}
void loop() {
= "http://apppppp.com/jojo.json";
String url
.println("HTTP Request... ");
Serial
= http_request(url);
HttpResponse res .print("HTTP Response code: "); Serial.println(res.code);
Serial.print("HTTP Response body: ");
Serial.println(res.body);
Serial
(3000);
delay}
【解説】初期化、インスタンスの生成
#include "WiFiHelper.h"
でライブラリを読み込み、
WiFiHelper wifi(WIFI_SSID, WIFI_PASSWORD, "WiFiHelper");
でWiFi接続情報を設定します。文字列リテラルの “WiFiHelper”
は、デバッグ用のラベルになります。WiFiHelper
を継承したクラスを作った場合に、インスタンス毎にラベルを指定してデバッグしやすくするために設けました。
【解説】WiFi接続を5回トライする
http_request
関数でWiFiHelper
を使っています。wifi.on()
でWiFi接続を試みます。WiFiHelper.cpp
のソースコードを読んでもらえるとわかりますが、WiFi接続は1回で確立せずに失敗することもあるため、接続できるまでデフォルトで5回トライさせています。この回数はWiFiHelper.h
のWIFI_CONNECT_TRY_MAX
で変更可能です。
【解説】WiFi切断後も、WiFi.onで再接続可能
ESP32を運用している最中に、WiFiが何らかの理由で切断されるかもしれません。そういった場合はWiFi.on()
を呼び出してあげれば良いだけです。ですからsetup
内でWiFi.on()
を呼び出すよりも、ソースコードのようにloop()
イベント内のHTTPリクエスト前で呼び出してあげると安心です。
また、wifi.off()
でWiFi接続を終了させていますが、常時WiFi接続させる場合は、この処理を省略して構いません。
【解説】WiFi接続時のイベント情報の出力
最後にWiFiHelper
では、WiFi接続時のイベントをフックしてメッセージを出力する実装を行なっています。#define
でWIFI_HELPER_PRINT_LOG
やWIFI_HELPER_PRINT_ERROR
を定義いただければ、デバッグに役立つと思います。
ぜひお試しください: https://github.com/aragig/WiFiHelper
関連記事
- 【Raspberry Pi】Ambientへセンサデータを送信してグラフ化
- ESP32でHTTPClientを使ってウェブサーバーにGET、POSTするやり方
- ESP32でNTPClientライブラリを使って現在時刻を取得する方法
- 【XYペンプロッター制作⑦】サーボモータでペンを上下させる(仮完成)
- 【XYペンプロッター制作①】CNCシールドでステッピングモータを動かすまで