M5Stack が HTTP でインターネットのホストにアクセスできることを確認するために、WorldTimeAPI を利用して時刻を取得し、M5Stack の LCD に 10 秒ごとに時刻が表示されるスケッチを実行します。
操作を始める前に準備が必要です (クリックして確認してください)
(1) M5Stack の開発環境を準備する
Arduino IDE 2 をインストールしたり、ボート定義やライブラリをインストールしたりします。詳しくは、M5Stack の開発環境を準備する を参照してください。
準備完了PC と M5Stack を接続する
M5Stack を PC に接続して、Arduino IDE で利用するボードとシリアルポートを選択します。
M5Stack に付属している USB Type-C ケーブルを使用して PC と接続します。
Arduino IDE を起動して、
→ → → の順にクリックします。→ の順にクリックして、通信に利用するシリアルポートを選択します。
通信に利用するシリアルポートは、USB シリアルドライバーをインストール したときに表示されたシリアルポート (COM ポート番号または
/dev/
から始まるデバイス名) です。
スケッチを作成する
Arduino IDE に表示されているソースコードを削除して、以下のソースコードをコピー&ペーストします。
#include <M5Stack.h> #define TINY_GSM_MODEM_UBLOX #include <TinyGsmClient.h> TinyGsm modem(Serial2); /* 3G board modem */ TinyGsmClient ctx(modem); void setup() { Serial.begin(115200); M5.begin(); M5.Lcd.clear(BLACK); M5.Lcd.setTextColor(WHITE); M5.Lcd.println(F("M5Stack + 3G Module")); M5.Lcd.print(F("modem.restart()")); Serial2.begin(115200, SERIAL_8N1, 16, 17); modem.restart(); M5.Lcd.println(F("done")); M5.Lcd.print(F("getModemInfo:")); String modemInfo = modem.getModemInfo(); M5.Lcd.println(modemInfo); M5.Lcd.print(F("waitForNetwork()")); while (!modem.waitForNetwork()) M5.Lcd.print("."); M5.Lcd.println(F("Ok")); M5.Lcd.print(F("gprsConnect(soracom.io)")); modem.gprsConnect("soracom.io", "sora", "sora"); M5.Lcd.println(F("done")); M5.Lcd.print(F("isNetworkConnected()")); while (!modem.isNetworkConnected()) M5.Lcd.print("."); M5.Lcd.println(F("Ok")); M5.Lcd.print(F("My IP addr: ")); IPAddress ipaddr = modem.localIP(); M5.Lcd.print(ipaddr); delay(2000); } void loop() { M5.update(); M5.Lcd.clear(BLACK); M5.Lcd.setCursor(0, 0); M5.Lcd.println(F("World Clock from worldtimeapi.org")); /* HTTP GET example */ if (!ctx.connect("worldtimeapi.org", 80)) { Serial.println(F("Connect failed.")); return; } Serial.println(F("connected.")); /* send request */ ctx.println("GET /api/timezone/Asia/Tokyo.txt HTTP/1.0"); ctx.println("Host: worldtimeapi.org"); ctx.println(); Serial.println("sent."); /* receive response */ while (ctx.connected()) { String line = ctx.readStringUntil('\n'); Serial.println(line); if (line == "\r") { Serial.println("headers received."); break; } } char buf[1 * 1024] = {0}; ctx.readBytes(buf, sizeof(buf)); /* body */ ctx.stop(); M5.Lcd.println(buf); delay(1000 * 10); }
Arduino IDE の左上にある
(書き込み) をクリックします。書き込みが完了したらスケッチが実行されます。LCD に 10 秒ごとに時刻が表示されることを確認してください。
2021 年 5 月現在、ESP32 のボード定義をインストールする 際、「1.05」「1.06」をインストールすると、上記のスケッチ実行時に LCD に何も表示されないことが確認されています。その場合は以下のいずれかをお試しください。
- Arduino ESP32 のボードパッケージ「1.04」をインストールする。
setup()
関数の先頭行のSerial.begin(115200);
をコメントアウトする。