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");
