[M5Stack Core2 for AWS] PlatformIO を使用して、ArduinoでHello Worldしてみました

2021.07.12

1 はじめに

IoT事業部の平内(SIN)です。

先日まで、M5Stack Core2 for AWSがどのような構成になているかを確認するため、Core2 for AWS IoT EduKit BSPの動作確認を進めました。


Visual Studio Code + PlatformIO 環境で M5Stack Core2 for AWS でHello Worldしてみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してLEDを光らせてみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してディスプレイに表示してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用して仮想ボタンの動作を確認してみました
[M5Stack Core2 for AWS] LVCLを使用してディスプレイ上のボタンの動作を確認してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用して電源を操作してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してスピーカーを操作してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用して静電容量式タッチパネルを操作してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してジャイロセンサーを操作してみました

かなり薄いですが、少しイメージできたので、今回からは、ArduinoでM5Stack Core2 for AWSを操作してみたいと思います。 引き続き、開発環境は、Visual Studio Code + PlatformIOです。

2 New Project

PlatformIOのアイコンから、「Home」- 「New Project」と辿り、プロジェクトを新規に作成します。

Name:(プロジェクト名)を適当につけ(ここでは、Sample002としました)、Board: は、「MSStack Core2」、Framework: を「Arduino」とし、Finishで進めます。

Location:にチェックが入っている場合、~/Documents/PlatformIO/Projectsの下に、作成したプロジェクトのフォルダが生成されます。(チェックなしの場合、プロジェクトの保存場所を、設定する手順となります)

作成されるファイル構成は、以下のようになってます。

% tree ~/Documents/PlatformIO/Projects/Sample002 -a
/Users/sin/Documents/PlatformIO/Projects/Sample002
├── .gitignore
├── .pio
│   └── build
│       ├── project.checksum
│       └── sample002
├── .vscode
│   ├── c_cpp_properties.json
│   ├── extensions.json
│   └── launch.json
├── include
│   └── README
├── lib
│   └── README
├── platformio.ini
├── src
│   └── main.cpp
└── test
    └── README

3 platformio.ini

プロジェクトのルートに作成されるplatformio.iniを以下のように編集します。編集したのは、env名と、シリアル関連の設定の追記です。

[env:sample002]
platform = espressif32
board = m5stack-core2
framework = arduino

monitor_speed = 115200
upload_port = /dev/cu.SLAB_USBtoUART

4 コンパイル+アッップロード

新規プロジェクトのmain.appは、以下のように空っぽですが、このまま、コンパイル+アップロードしてみます。

src/main.cpp

#include <Arduino.h>

void setup() {
  // put your setup code here, to run once:
}

void loop() {
  // put your main code here, to run repeatedly:
}

PlatformIOのアイコンから、「Miscellaneous」- 「New Terminal」と辿り、ターミナルを開き、下記のコマンドを実行します。

% pio run -e sample002

[Success]が表示されれば、コンパイル完了です。

M5Stack Core2 for AWSをUSBで接続し、ターミナルから、下記のコマンドでアップロードします。 こちらも、[Success]が表示されれば、アップロード完了です。

% pio run -e sample002 -t upload

プログラムが空っぽなので、電源をOFF/OFしても、残念ながら何も起こりません。

5 ライブラリ(M5Core)追加

PlatformIOのメニューから「Libraries」を辿り、「M5Core2」を検索して選択します。

Add Projectで表示されるウインドウで、プロジェクト(ここでは、Sample002)を選択することで、このライブラリを取り込むことができます。

プロジェクトに追加したライブラリは、.pio/libdepsの下に配置されます。

 % tree ~/Documents/PlatformIO/Projects/Sample002 -a
/Users/sin/Documents/PlatformIO/Projects/Sample002
├── .gitignore
├── .pio
│   ├── build
│   │   ├── project.checksum
│   │   └── sample002
│   └── libdeps
│       └── sample002
│           └── M5Core2
│               ├── .clang-format
│               ├── .gitignore
│               ├── .piopm
│               ├── LICENSE
│               ├── README.md
│               ├── README_cn.md
│               ├── examples
│               │   ├── Basics
│               │   │   ├── mpu6886
│               │   │   │   └── mpu6886.ino
│               │   │   ├── record
│               │   │   │   └── record.ino
│               │   │   ├── rtc_wakeup

6 シリアル通信でHello World

シリアル通信で、Hello Worldを表示するため、main.cppを下記のように書き換えます。

main.cpp

#include <M5Core2.h>

void setup() {
    Serial.begin(9600);
    M5.begin(true, true, true, true);
}

void loop() {
  int counter = 0;
  for(;;){
    Serial.printf("Hello World. [%d]\n", counter);
    counter++;
    delay(500);
  }
}

uploadでコンパイル及び、アップロードが始まります。

% pio run -e sample002 -t upload

monitorで、シリアルポートをモニターします。

% pio run -e sample002 -t monitor

M5Stack Core2をリセットすることで、初期化のメッセージの後、プログラムした、Hello Worlsを確認できます。

7 ディスプレイでHello World

ディスプレイで、Hello Worldを表示するため、main.cppを下記のように書き換えます。

main.cpp

#include <M5Core2.h>

void setup() {
    M5.begin(true, true, true, true);
    M5.Lcd.setTextSize(3);
    M5.Lcd.print("Hello World");
}

void loop() {
  int counter = 0;
  for(;;){
    M5.Lcd.printf("Hello World. [%d]\n", counter);
    counter++;
    delay(500);
  }
}

プログラムをコンパイルしてアップロードすると、今度は、画面で、Hello Worldを確認できます。

8 最後に

今回は、Arduinoで、Hello Worldしてみました。久々に、FreeRTOSから離れて・・・Arduinoのライブラリでcppして、やっぱこんなに楽か!!ってなりましたw。

9 参考リンク


Visual Studio Code + PlatformIO 環境で M5Stack Core2 for AWS でHello Worldしてみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してLEDを光らせてみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してディスプレイに表示してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用して仮想ボタンの動作を確認してみました
[M5Stack Core2 for AWS] LVCLを使用してディスプレイ上のボタンの動作を確認してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用して電源を操作してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してスピーカーを操作してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用して静電容量式タッチパネルを操作してみました
[M5Stack Core2 for AWS] Core2 for AWS IoT EduKit BSPを使用してジャイロセンサーを操作してみました
[M5Stack Core2 for AWS] PlatformIO を使用して、ArduinoでHello Worldしてみました
[M5Stack Core2 for AWS] ArduinoでLED (Adafruit NeoPixel フルカラーLED) を点灯してみました
[M5Stack Core2 for AWS] Arduinoで仮想ボタンを作成してみました
[M5Stack Core2 for AWS] ArduinoでMQTT接続してみました
[M5Stack Core2 for AWS] Arduinoでオーディオファイルを再生してみました
[M5Stack Core2 for AWS] Arduinoでマイクの利用方法を確認してみました
[M5Stack Core2 for AWS] ArduinoでGroveポートのGPIOを使用しててみました