Soracom

Users

スタートガイド
Home スタートガイド 開発ボード プロトタイプ向けマイコンモジュール M5Stack と 3G 拡張ボードをセットアップする Getting Started

HTTP でアクセスする

M5Stack が HTTP でインターネットのホストにアクセスできることを確認するために、WorldTimeAPI を利用して時刻を取得し、M5Stack の LCD に 10 秒ごとに時刻が表示されるスケッチを実行します。

操作を始める前に準備が必要です (クリックして確認してください)

(1) M5Stack の開発環境を準備する

Arduino IDE 2 をインストールしたり、ボート定義やライブラリをインストールしたりします。詳しくは、M5Stack の開発環境を準備する を参照してください。

準備完了

PC と M5Stack を接続する

M5Stack を PC に接続して、Arduino IDE で利用するボードとシリアルポートを選択します。

  1. M5Stack に付属している USB Type-C ケーブルを使用して PC と接続します。

  2. Arduino IDE を起動して、[ツール][ボード][esp32][M5Stack-Core-ESP32] の順にクリックします。

  3. [ツール][ポート] の順にクリックして、通信に利用するシリアルポートを選択します。

    通信に利用するシリアルポートは、USB シリアルドライバーをインストール したときに表示されたシリアルポート (COM ポート番号または /dev/ から始まるデバイス名) です。

スケッチを作成する

  1. 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);
    }
    
  2. Arduino IDE の左上にある [] (書き込み) をクリックします。

    書き込みが完了したらスケッチが実行されます。LCD に 10 秒ごとに時刻が表示されることを確認してください。

    2021 年 5 月現在、ESP32 のボード定義をインストールする 際、「1.05」「1.06」をインストールすると、上記のスケッチ実行時に LCD に何も表示されないことが確認されています。その場合は以下のいずれかをお試しください。

    • Arduino ESP32 のボードパッケージ「1.04」をインストールする。
    • setup() 関数の先頭行の Serial.begin(115200); をコメントアウトする。