M5Stackで開発環境構築 – Wifi接続及びHttpClient動作を試す

はじめに

1年ほど放置していたM5Stackを使って、開発環境作成/Wifi接続、HttpClient動作を試してみました。
(積ん読、積みゲー、買ったデバイスなり基盤を使わない放置状態って単語あるんですかねぇ)

情報も色々とある事と、チュートリアルドキュメント、ArduinoIDEのスケッチブック機能のおかげで、1時間掛からずに開発環境構築、HttpClient動作まで漕ぎ着けたのでやりたい事を形にするのが手っ取り早くてよいですね。

小さいですがボタンが3つ付いているのでリモートワークが板についてきた所で、離席中である事をSlackに通知するThingを作ってみたいと思います。

出来たもの

こちらのブログのRSS情報を取得して表示してみました。 (日本語化けしてます)

M5Stackの紹介記事は沢山出てきますので割愛します。
https://m5stack.com/

目次

手順の概要

  1. ドライバインストール
  2. ArduinoIDEインストール
  3. ArduinoIDE内のBoardManagerへM5 Stackを追加
  4. ArduinoIDE内のLibraryManagerへM5 Stackを追加
  5. ArduinoIDEでボード(M5Stack-Core-ESP32)/シリアルポート選択(/dev/cu.SLAB_USBtoUART)
  6. コード書く
  7. コンパイル&M5Stackへ転送

全て下記公式ドキュメントに沿って実施
https://docs.m5stack.com/#/en/arduino/arduino_development

接続したM5Stackが認識されているか確認

※ドライバインストール後

接続前
~ $ ls -la /dev | grep UART

接続後
~ $ ls -la /dev | grep UART
crw-rw-rw- 1 root wheel 18, 19 4 9 12:42 cu.SLAB_USBtoUART
crw-rw-rw- 1 root wheel 18, 18 4 9 12:42 tty.SLAB_USBtoUART

実行環境

MacOS上で実施しました。

手順

コードについて予め用意されているスケッチブックから下記を参考に作成しました。
– BasicHTTPClient
– Display

コード

※10秒毎にHTTPリクエストが実施されます
追記: 内蔵スピーカーから高音がピーピーなるため、おまじないとしてSperkerOff命令を追記

#include <Arduino.h>
#include <WiFi.h>
#include <WiFiMulti.h>
#include <HTTPClient.h>
#include <M5Stack.h>
 
#define WIFI_SSID "[ご自身の環境のWifiSSID]"
#define WIFI_PASS "[ご自身の環境のWifiPassowrd]"

const char* ca = \ 
"-----BEGIN CERTIFICATE-----\n" \  
"MII...\n" \  // CAの中身については、M5Stack/M5StickのBasicHTTPClientスケッチ等から取得下さい
"-----END CERTIFICATE-----\n";

WiFiMulti wifiMulti;
HTTPClient http;

// the setup routine runs once when M5Stack starts up
void setup() {
  // initialize the M5Stack object
  M5.begin();
  dacWrite(25, 0); // Speaker Off

  /*
    Power chip connected to gpio21, gpio22, I2C device
    Set battery charging voltage and current
    If used battery, please call this function in your project
  */
  M5.Power.begin();
  
  // text print
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setCursor(10, 10);
  M5.Lcd.setTextColor(WHITE);
  M5.Lcd.setTextSize(1);
  M5.Lcd.printf("Boot Complete");

  // WifiSetup
  wifiMulti.addAP(WIFI_SSID, WIFI_PASS);
}

// the loop routine runs over and over again forever
void loop(){
  // wait for WiFi connection
  if((wifiMulti.run() == WL_CONNECTED)) {

      HTTPClient http;
      //HTTPS
      http.begin("https://www.skyarch.net/blog/?feed=rss2", ca);

      // start connection and send HTTP header
      int httpCode = http.GET();

      // httpCode will be negative on error
      if(httpCode > 0) {
          // HTTP header has been send and Server response header has been handled
          M5.Lcd.printf("[HTTP] GET... code: %d\n", httpCode);

          // file found at server
          if(httpCode == HTTP_CODE_OK) {
              String payload = http.getString();
              M5.Lcd.println(payload);
          }
      } else {
          M5.Lcd.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
      }

      http.end();
  }

  // Wait
  delay(10000);
}

コンパイル

左上のチェックマークのボタンを押下

M55Stackへ転送

左上の右矢印ボタンを押下

まとめ

やりたい事をシンプルに実装できるため。PoC作成等が捗りそうです。
LCD周りのライブラリについても、画像表示、QRコード表示ライブラリ等も最初から実装されており、夢が広がりますね!
https://github.com/m5stack/m5-docs/blob/master/docs/ja/api/lcd.md

一方で、一般的なマイコン等でボタン押下処理等に使われる割り込み機能等は少し調べてもあまりサンプル等が出ていないので搭載されているESP32チップについてもう少し知る必要がありそうです。

次はボタンを押したら、Slackへメッセージ送信を実施してみたいと思います。

実施してみました
https://www.skyarch.net/blog/?p=18315

投稿者プロフィール

takashi
開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て
2010年よりスカイアーチネットワークスに在籍しております

機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。
個人ブログではRaspberryPiを利用したシステムやロボット作成も
実施しております。

スカイアーチネットワークスで一緒に働きましょう!

ABOUTこの記事をかいた人

開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て 2010年よりスカイアーチネットワークスに在籍しております 機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。 個人ブログではRaspberryPiを利用したシステムやロボット作成も 実施しております。 スカイアーチネットワークスで一緒に働きましょう!