2025年5月2日金曜日

M5StickC Plus2でWifi接続

 M5STACK 製品をいくつか購入していますが、いまだWifiに接続したことが無かったので試してみました。調べてみたところ、WiFi.hを使用すれば簡単に接続できるようです

#include <M5StickCPlus2.h>
#include <M5Unified.h>
#include <WiFi.h>

const char* ssid = "********";        // 接続先WiFiのSSID
const char* password = "********";    // 接続先WiFiのパスワード

void setup() {
  auto cfg = M5.config();
  M5.begin(cfg);

  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setBrightness(5);
  M5.Lcd.setRotation(3);                           // 画面向き
  M5.Lcd.setTextSize(2);                           // フォントサイズ

  M5.Lcd.print("SSID : ");
  M5.Lcd.println(ssid);

  WiFi.begin(ssid, password);  // WiFi接続

  M5.Lcd.print("Connecting");

  while (WiFi.status() != WL_CONNECTED) {  // 接続チェック
    delay(500);
    M5.Lcd.print(".");
  }

  M5.Lcd.println("");
  M5.Lcd.print("IP Adress : \n");
  M5.Lcd.println(WiFi.localIP());  // IPアドレス表示
}

void loop() {}

wifi.begin()で接続して、Wifi.status()で接続チェックを行うだけでと簡単でした。実行も問題なくでき簡単です。

折角、Wifiに接続できましたので、APIなどを使用しないで使えるNTPサーバーに接続して日時を取得して表示するスケッチを作成しました

#include <M5StickCPlus2.h>
#include <M5Unified.h>
#include <WiFi.h>

#define JST 9 * 3600L

const char* ssid = "********";        // 接続先WiFiのSSID
const char* password = "********";    // 接続先WiFiのパスワード

void setup() {
  auto cfg = M5.config();
  M5.begin(cfg);

  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setBrightness(5);
  M5.Lcd.setRotation(3);  // 画面向き
  M5.Lcd.setTextSize(2);  // フォントサイズ

  M5.Lcd.print("SSID : ");
  M5.Lcd.println(ssid);

  WiFi.begin(ssid, password);  // WiFi接続

  M5.Lcd.print("Connecting");

  while (WiFi.status() != WL_CONNECTED) {  // 接続チェック
    delay(500);
    M5.Lcd.print(".");
  }

  M5.Lcd.println("");
  M5.Lcd.print("IP Adress : \n");
  M5.Lcd.println(WiFi.localIP());  // IPアドレス表示

  // NTPサーバと、ローカルのタイムゾーンを設定
  // タイムゾーン:日本、夏時間無し、PUBLIC NTPと日本標準時グループに接続
  configTime(JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp"); 
}

void loop() {
  M5.Lcd.clear(BLACK);
  M5.Lcd.setCursor(0, 0);
  struct tm tm;
  /*
    tm構造体の要素:
    int tm_sec    秒:(0~61)
    int tm_min    分:(0~59)
    int tm_hour   時:(0~23)
    int tm_mday   日:(1~31)
    int tm_mon    1月からの月数:(0~11)
    int tm_year   1900年からの年数
    int tm_wday   日曜日からの日数:(0~6)
    int tm_yday   1月1日からの日数:(0~365)
    int tm_isdst  夏時間フラグ
 */
  getLocalTime(&tm);
  M5.Lcd.printf(" %04d/%02d/%02d %02d:%02d:%02d",
               tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,  // 年、月、日
               tm.tm_hour, tm.tm_min, tm.tm_sec);             // 時、分、秒
  delay(1000);
}

#define JSTは日本時間にするための設定で、configTime()でPUBLIC NTPと日本標準時グループに接続して時間を取得しています、なお、メモとして構造体 tmの内容をコメントとして記載しています。ま、使用するたびに調べるのが面倒なだけですが...

無事に動作し、時間を取得できました。

NTPサーバーへの接続は、WEBサービスを使用するスケッチの最初の一歩ですね

0 件のコメント:

コメントを投稿