M5Cameraをルータに繋いだときのカメラのIPアドレスを知りたいときなど、
画面がないので何らかの方法で通知する必要があります。
シリアルコンソールにつないでいれば Serial.print 等で出力して確認できますが、
モバイルバッテリーにつないで動作させている場合はそれもできません。
そういった場合に Line に通知するとわかりやすいので、実現のためのプログラムを以下に示します。
Lineに通知するにはインターネットにつなげる必要があるので、
ソース中のSSID、PASSWORDを書き換えるのと、
LINE_TOKENに Line Notify から取得したトークンに書き換えてください。
Line Notify のトークンは
https://notify-bot.line.me/ja/
にログインしてマイページから発行できます。
プログラムソースは以下のとおりです。
# include <HTTPClient.h>
# include <WiFi.h>
//インターネットアクセスポイントのSSID、パスワード
# define SSID "(お使いのルータのSSID)"
# define PASSWORD "(お使いのルータのパスワード)"
//LINE Notify トークン
# define LINE_TOKEN "(Line Notifyで取得したトークン)"
// URLエンコード(URLに任意の文字を設定するときに使用)
String urlencode(const String &sourse) {
static const char lookup[] = "0123456789abcdef";
String result;
for (const char* c = sourse.begin(); c != sourse.end(); c++) {
if('0' <= *c && *c <= '9'
|| 'a' <= *c && *c <= 'z'
|| 'A' <= *c && *c <= 'Z'
|| *c=='-' || *c=='_' || *c=='.' || *c=='~') {
result += *c;
} else {
result += '%';
result += lookup[(*c >> 4) & 0xf];
result += lookup[*c & 0xf];
}
}
return result;
}
void setup() {
// シリアル通信開始
Serial.begin(115200);
Serial.setDebugOutput(true);
Serial.println("power on");
// WiFi接続
WiFi.mode(WIFI_STA);
WiFi.begin(SSID, PASSWORD);
for (int i = 0; WiFi.status() != WL_CONNECTED; i++) { // 接続できるまで最大30秒間試行
if (i >= 30) esp_restart(); // 接続できない場合はリセット
delay(1000);
Serial.print(".");
}
Serial.println("\nconnected: " SSID);
// Line Notify にメッセージ送信
HTTPClient http;
http.begin("https://notify-api.line.me/api/notify");
http.addHeader("Authorization", "Bearer " LINE_TOKEN);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
http.POST("message=" + urlencode("M5Cameraからの通知"));
http.end();
Serial.println("posted");
}
void loop() {
}