Newer
Older
OurSketch / wifi.ino
@motoki miura motoki miura on 11 Apr 2022 2 KB ntp server
#include <M5StickCPlus.h>
#include <WiFi.h>

const char *ssid = "miura2g"; // 802.11b/g (2.4GHz)only. 5GHz is not supported.
const char *password = "jikken2022";

// const char *ntpserver = "192.168.11.11"; //実験室ローカルNTPサーバ
const char *ntpserver = "ntp.nict.jp";

void wifi_setup()
{
    M5.Lcd.fillScreen(ORANGE);
    M5.Lcd.setCursor(10, 50, 4);

    WiFi.begin(ssid, password); // 接続開始
    while (WiFi.status() != WL_CONNECTED)
    { // 接続中...
        M5.Beep.tone(2000);
        delay(200);
        M5.Beep.mute();
        delay(300);
        M5.Lcd.print(".");
    }
    // 接続完了!!
    M5.Beep.tone(4000);
    M5.Lcd.fillScreen(GREEN);
    M5.Lcd.setCursor(0, 8, 4);
    M5.Lcd.setTextColor(BLACK, GREEN);
    M5.Lcd.print("  Wifi Connected!\n  ");
    String gotip = WiFi.localIP().toString(); // m5デバイスのIPアドレス
    M5.Lcd.println(gotip);

    // MACアドレスを表示
    uint8_t mac[6];
    char macchar[100];
    esp_read_mac(mac, ESP_MAC_WIFI_STA);
    sprintf(macchar, "  %02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
    String macstr = macchar;
    M5.Lcd.println(macstr);

    delay(1500);
    M5.Beep.mute();
}
void wifi_down()
{
    WiFi.disconnect();
    WiFi.mode(WIFI_OFF);
}

struct tm localTime;
void ntp_setup()
{
    configTime(9 * 3600, 0, ntpserver); // NTPサーバからLocalTimeへの時刻同期

    delay(1000);

    while (localTime.tm_year < 80) {
      getLocalTime(&localTime);
      M5.Beep.tone(1000);
        delay(200);
        M5.Beep.mute();
        delay(300);
        M5.Lcd.print(".");
    }
    M5.Beep.tone(2000);

    setRTCfromLT(localTime); //LocalTimeからRTCへの時刻同期
}

// LocalTimeからRTCへの時刻同期
void setRTCfromLT(struct tm lt) {
  RTC_DateTypeDef DateStruct;
  DateStruct.Year = lt.tm_year + 1900;
  DateStruct.Month = lt.tm_mon + 1;
  DateStruct.Date = lt.tm_mday;
  DateStruct.WeekDay = lt.tm_wday;
  M5.Rtc.SetData(&DateStruct);

  RTC_TimeTypeDef TimeStruct;
  TimeStruct.Hours   = lt.tm_hour;
  TimeStruct.Minutes = lt.tm_min;
  TimeStruct.Seconds = lt.tm_sec+1;
  M5.Rtc.SetTime(&TimeStruct);
    M5.Lcd.print("  RTC updated!\n  ");
    delay(1500);
    M5.Beep.mute();
}