MQTTクライアントがやっと動作するようになりましたが、さらに smartconfig と NTPクライアントの機能を追加しました。加えて、MQTTで送信するデータをJSON形式にしてみました。
smartconfig
MQTTが動作するようになったものの、このままではSSIDの設定を変更するたびにF/Wを修正する必要があり、面倒です。ですので、smartconfigの機能を追加しました。
修正としては、setup_wifi() の中に smartconfig 関連の記述を追加しました。
//configure pin0 pinMode(0, INPUT_PULLUP); // deplay for 2 sec for smartConfig Serial.println("2 sec before clear SmartConfig"); blinkBuiltinLed(250,4); // read pullup bool isSmartConfig = digitalRead(0); if (isSmartConfig == false) { blinkBuiltinLed(50,40); Serial.println("clear config"); // reset default config WiFi.disconnect(); } // if wifi cannot connect start smartconfig while(WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); if(cnt++ >= 15){ WiFi.beginSmartConfig(); while(1){ delay(500); if(WiFi.smartConfigDone()){ Serial.println("SmartConfig Success"); blinkBuiltinLed(100,20); break; } } } }
あと、動作状況を見えるようにするため、LEDを点滅させる関数を追加しています。
void blinkBuiltinLed(int w,int n) { // 標準LEDを w ms 点灯/w ms 消灯を n回繰り返す int i=0; while(i<=n) { digitalWrite(BUILTIN_LED, LOW); // LED点灯 delay(w); digitalWrite(BUILTIN_LED, HIGH); // LED消灯 delay(w); i++; } }
NTP
NTPでの時刻合わせはヘッダをインクルードして、関数を呼ぶだけです。WiFiが接続できたあたりで以下の関数を呼び出します。実際には、ヘッダは冒頭、configTime()の呼び出しはsetup_wifi()の最後に入れています。
#include <time.h> #define JST 3600*9 // time set with NTP configTime( JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");