ESP8266 で mydns.jpの自動通知マシン

mydns.jpを使っているんですが、IPの更新通知が面倒です。
そこで、いつものESPrDeveloper（ESP8266)を使って、自動通知マシンを作りました。

勢いでテキトーにコードをコピペしたので、不要なコードも混じってるかもです・・。

###WiFi Manager
別で投稿しましたが、WiFiManagerを入れたので、最初にWiFi設定ができます。

###NTP
１日に1回だけ通知したかったので、NTPで24H毎にチェックするようにしました。
下記を参考にしました。ありがとうございます。
https://intellectualcuriosity.hatenablog.com/entry/2017/03/12/015947

###mDNS,HTTPサーバ
WEB画面をつけて、手動でも通知できるようにしました。
また、ここで、WiFiManagerで設定した設定をリセットできます。


###課題
せっかくWiFiManagerを入れてるのに、mydnsの情報が埋め込みなのがいただけないです。
これは、後日、WEBから設定できるように頑張ります・・。


###以下、ソースです。

```
#include <ESP8266HTTPClient.h>
#include <NTPClient.h>
#include <Time.h>
#include <TimeLib.h>
#include <FS.h>
#include <DNSServer.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <ESP8266mDNS.h>
#include <WiFiClient.h>

#define SERIAL_SPEED 115200


// mydns info.
const char* id="mydnsXXXXXX"; //マスターID
const char* pw="XXXXXXXXXXX"; //パスワード

// mDNS
static const char* mdns_name = "mydnsnotifer";

//  NTP用
WiFiUDP ntpUDP;
const char *NTP_SERVER = "ntp.nict.jp";
const int TIME_OFFSET = 9 * 60 * 60;  // UTC+9h (JST)
NTPClient timeClient(ntpUDP, NTP_SERVER, TIME_OFFSET);
const unsigned long NTP_INTERVAL_TIME = 24 * 60 * 60 * 1000;  // 24h毎に更新
unsigned long ntp_interval;

// Web page (Port 8080)
ESP8266WebServer server(8080);
static const char* cpResponse200 = "<HTML>"
 "<BODY style='background-color:#ffffde;font-family:sans-serif;font-size:40px;'>"
 "mydns notifier<br/><br/>"
 "<a href=/cmd?CMD=notice>Notice MyIP to mydns.</a><br/>"
 "<a href=/cmd?CMD=reset>Reset WiFi Setting.</a><br/>"
 "</BODY></HTML>\r\n";

 
void setup() {
  Serial.begin(SERIAL_SPEED);
  Serial.println("");
  
  // WiFi
  //WiFiManager
  WiFiManager wifiManager;
  wifiManager.setBreakAfterConfig(true);
  if (!wifiManager.autoConnect("Auto Connect AP", "password")) {
    Serial.println("failed to connect, we should reset as see if it connects");
    delay(3000);
    ESP.reset();
    delay(5000);
  }

  Serial.println("");
  Serial.println("WiFi Connected.");
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.println("");
  Serial.println("");

  // NTP
  timeClient.begin();
  timeClient.update();
  setTime(timeClient.getEpochTime());
  Serial.println("NTP started.");
  ntp_interval = millis();
  Serial.println(timeClient.getFormattedTime());
  
  // Set up mDNS responder:
  if (!MDNS.begin(mdns_name)) {
    Serial.println("Error setting up MDNS responder!");
    while (1) {
      delay(1000);
    }
  }
  Serial.println("mDNS responder started");
  Serial.println("");

  // WebServer
  server.on("/cmd", WebCommand);
  server.begin();
  Serial.println("Web Server started");

  // Add service to MDNS-SD
  MDNS.addService("http", "tcp", 8080);

}

void WebCommand() {
  String cmd = server.arg("CMD");
  if (cmd == "notice")  { notice(); }
  else   if (cmd == "reset")  {
    WiFiManager wifiManager;
    delay(1000);
    Serial.println("");
    Serial.println("WiFi Reset !");
    Serial.println("");
    wifiManager.resetSettings();
    delay(3000);
    ESP.reset();
  }
  Serial.println("  cmd=" + cmd);
  server.send(200, "text/html", cpResponse200);
}

void loop() {
  MDNS.update();
  server.handleClient();  
  // 定期的に時刻を合わせて、IPを通知。
  if (millis() - ntp_interval > NTP_INTERVAL_TIME) {
    timeClient.update();
    Serial.println(timeClient.getFormattedTime());
    notice();
    ntp_interval = millis();
  }
}

void notice() {
  // 通知
  WiFiClient client;
  HTTPClient http;
  http.begin(client, "http://www.mydns.jp/login.html");
  http.setAuthorization(id, pw);
  Serial.print("http GET= ");
  Serial.println(http.GET());
}

```