ESP8266でMQTTクライアントを動かす(2)

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)