Visual Studio Code + PlatformIO 環境で M5Stack Core2 for AWS でHello Worldしてみました

2021.07.03

1 はじめに

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

M5Stack Core2 for AWS では、初めて利用される方でも簡単にセットアップが可能な、
ワークショップのドキュメントが公開されており、簡単に試すことができます。

上記のドキュメントにしたがって Getting-Startを進めるだけで、一通りの環境のセットアップと、実施に動作するサンプルが手に入ります。

しかし、良くも悪くも、このワークショップのサンプルの完成度が高すぎて、「それじゃ、何か作ってみようか」となっても、特に、PlatformIOに触れたのも初めてという私には、ちょっとハードルが高いように感じてしまいました。

今回は、そのような私が、とりあえず、PlatformIOで、新規にプロジェクトを作成して、M5Stack Core2 for AWS でHallo Worldしてみた記録です。

なお、先でのワークショップを進めたことで、PlatformIOや、Silicon Labs USB to UART bridgeのセットアップは、完了している状態からの作業になります。

2 プロジェクト作成

PlatformIOのアイコンから、Open -> New Projectで新規にプロジェクトを作成できます。

下記のとおり、入力しFinishをクリックします。

  • Name: プロジェクト名(ここでは、Sample001としました)
  • Board: M5Stack Core2
  • Framework: Espressif IoT Development Framework
  • Location: チェック

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

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

% tree ~/Documents/PlatformIO/Projects/Sample001
/Users/sin/Documents/PlatformIO/Projects/Sample001
├── CMakeLists.txt
├── include
│   └── README
├── lib
│   └── README
├── platformio.ini
├── sdkconfig
├── src
│   ├── CMakeLists.txt
│   └── main.c
└── test
    └── README

3 platformio.ini

プロジェクトのフォルダのルートにある、platformio.iniは、以下のようになっています。

ここで、アプリ名が分かりやすいように、[env:m5stack-core2]の部分を、[env:sample001]と書き換えました。

[env:sample001]
platform = espressif32
board = m5stack-core2
framework = espidf

また、src/main.cには、エントリポイントとなる app_main()が定義されていますが、内容は空っぽです。

4 コンパイル

app_main() に何も書かれていないので、何も実行されませんが、ここで、一度、コンパイルしてみます。

QUICK ACCESSのメニューから、Miscellaneous - New Terminalと辿り、新しいターミナルを開き、下記のコマンド入力します。

% pio run -e sample001

SUCCESSが表示されれば、成功です。

5 アップロード

コンパイルしたプログラムをデバイスに書き込んみます。 M5Stack Core2 for AWSをUSBで接続し、ターミナルから下記のコマンド実行します。

% pio run -e sample001 -t upload

すると、下記のようなエラーとなります。(Macで作業している場合)

[Errno 16] could not open port /dev/cu.usbserial-0202E5A2: [Errno 16] Resource busy: '/dev/cu.usbserial-0202E5A2'
*** [upload] Error 1

これは、/dev/cu.usbserial-0202E5A2に書き込もうとして失敗しています。

ポート名は、platformio.iniで定義が可能ですので、下記のよに、ポート名を追記します。

upload_port = /dev/cu.SLAB_USBtoUART

なお、認識されているポート名は、QUICK ACCESS の PIO Home -> Devicesから確認できます。

SUCCESS が表示されればアップロードは、完了していますが、プログラムが、以前のものが動作したままのはずです。

電源ボタンを長押しして、一旦、電源をOFF/ONすると、画面が真っ黒の何も実行しないプログラムが、「実行」されます。 後で、プログラムを削除してみると分かりますが、M5Stack Core2 for AWSでは、まったく、プログラムが入っていない状態で電源を入れると、「チッチッチッチッ」というような音が聞こえるのですが、これが、聞こえないので、今回作成した「何も実行しないプログラム」が動作している事になります。

6 シリアルモニター

app_main() にコードを追加して、シリアルに出力してみます。

#include "esp_log.h"

static const char *TAG = "Main";

void app_main() {

    ESP_LOGI(TAG, "Hello World.");

}

platformio.iniにシリアル通信のスピードを設定します。

monitor_speed = 115200

ターミナルから、下記のコマンドを実行すると、コンパイル+アップロード+シリアルモニターがスタートします。

% pio run -e sample001 -t monitor

途中、ポートを指定するところでは、/dev/cu.SLAB_USBtoUART(ここでは、2)を選択しています。

下記のように表示されて、モニター状態となったら、リセットボタンを押してみてください。

--- Miniterm on /dev/cu.SLAB_USBtoUART  115200,8,N,1 ---
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---

初期化のログが表示された後に、プログラムした、「Hello Workd.」を確認できると思います。

モニタは、CTRL+Cで終了します。

7 プログラム削除

ターミナルから下記のコマンドを実行する事で、デバイス上のプログラムを削除できます。

% pio run -e sample001 -t erase

電源を一度OFF/ONして、「チッチッチッチッ」という音が聞こえてくれば、デバイス上のプログラムは削除されています。

8 最後に

今回は、PlatformIOで、新規にプロジェクト作成を作成して、M5Stack Core2 for AWSでHallo Worldしてみました。


Core2 for AWS IoT EduKit BSPでは、M5Stack Core2 for AWSを簡単に操作するコードが提供されていますので、色々試してみたいと思います。

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を使用しててみました