はじめに
昨年M5Stackで FreeRTOSを動かしてみた記事 をQiitaに投稿した後、M5StackでFreeRTOSを動かしてみる人が増えた気がします。AWSのIoT/FreeRTOSワークショップでもM5Stackが使われることもありました。M5Stackは安価に上手にパッケージングされていて、誰でも気軽に使うことができる本当に便利なデバイスです。
そして先日、M5Stack Core2 for AWS - ESP32 IoT開発キット が発売されました。M5Stack BASICはIoTやFreeRTOSの勉強用には便利なものでしたが、メモリが512Kだったり、使いこなすにはちょっと不足を感じる点がありましたが、M5Stack Core2 for AWS - ESP32 IoT開発キット はいくつかの面でパワーアップされています。
初日、M5Stack Core2 for AWS - ESP32 IoT開発キット は30分くらいで売り切れてしまいましたが、幸い購入できましたので簡単にレポートさせて頂きます。
M5Stack Core2 for AWS - ESP32 IoT開発キット
シンプルなパッケージで送られてきました。本体、USB-Cケーブル、レンチが入っています。スイッチを入れるとロゴが表示されて起動音が鳴ります。その後AWS IoT EdukitページのQRコードが表示されて、本体の横に配置されたLEDが点灯します。
出荷時のファームウェアは こちら のようです。
接続には SiLabs CP210x drivers が必要ですが、以前M5Stackを使用していればすでにインストールされています。Tera Termでシリアル接続してみると、次のようなメッセージが表示されます。
ets Jul 29 2019 12:21:46
rst:0x1 (POWERON_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4
load:0x3fff0034,len:7600
ho 0 tail 12 room 4
load:0x40078000,len:15348
load:0x40080400,len:4888
entry 0x400806a4
I (31) boot: ESP-IDF v4.2-beta1-227-gf0e87c933a 2nd stage bootloader
I (31) boot: compile time 10:30:21
I (31) boot: chip revision: 3
I (36) boot_comm: chip revision: 3, min. bootloader chip revision: 0
I (43) qio_mode: Enabling default flash chip QIO
I (48) boot.esp32: SPI Speed : 80MHz
I (53) boot.esp32: SPI Mode : QIO
I (57) boot.esp32: SPI Flash Size : 16MB
I (62) boot: Enabling RNG early entropy source...
I (67) boot: Partition Table:
I (71) boot: ## Label Usage Type ST Offset Length
I (78) boot: 0 nvs WiFi data 01 02 00011000 00006000
I (86) boot: 1 phy_init RF data 01 01 00017000 00001000
I (93) boot: 2 factory factory app 00 00 00020000 00100000
I (101) boot: End of partition table
I (105) boot_comm: chip revision: 3, min. application chip revision: 0
I (112) esp_image: segment 0: paddr=0x00020020 vaddr=0x3f400020 size=0x5eb6c (387948) map
I (255) esp_image: segment 1: paddr=0x0007eb94 vaddr=0x3ffb0000 size=0x01484 ( 5252) load
I (258) esp_image: segment 2: paddr=0x00080020 vaddr=0x400d0020 size=0x41e70 (269936) map
I (356) esp_image: segment 3: paddr=0x000c1e98 vaddr=0x3ffb1484 size=0x00ff4 ( 4084) load
I (357) esp_image: segment 4: paddr=0x000c2e94 vaddr=0x40080000 size=0x00404 ( 1028) load
I (363) esp_image: segment 5: paddr=0x000c32a0 vaddr=0x40080404 size=0x11b30 ( 72496) load
I (410) boot: Loaded app from partition at offset 0x20000
I (410) boot: Disabling RNG early entropy source...
I (411) psram: This chip is ESP32-D0WD
I (416) spiram: Found 64MBit SPI RAM device
I (420) spiram: SPI RAM mode: flash 80m sram 80m
I (425) spiram: PSRAM initialized, cache is in low/high (2-core) mode.
I (433) cpu_start: Pro cpu up.
I (436) cpu_start: Application information:
I (441) cpu_start: Project name: core2forAWS-default-firmware
I (448) cpu_start: App version: 2b790e5-dirty
I (453) cpu_start: Compile time: Nov 17 2020 10:30:15
I (459) cpu_start: ELF file SHA256: cb6c82cca7492871...
I (465) cpu_start: ESP-IDF: v4.2-beta1-227-gf0e87c933a
I (472) cpu_start: Starting app cpu, entry point is 0x40081dac
I (0) cpu_start: App cpu up.
I (975) spiram: SPI SRAM memory test OK
I (975) heap_init: Initializing. RAM available for dynamic allocation:
I (976) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (982) heap_init: At 3FFC7730 len 000188D0 (98 KiB): DRAM
I (988) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (994) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (1001) heap_init: At 40091F34 len 0000E0CC (56 KiB): IRAM
I (1007) cpu_start: Pro cpu start user code
I (1012) spiram: Adding pool of 4096K of external SPI memory to heap allocator
I (1032) spi_flash: detected chip: generic
I (1032) spi_flash: flash io: qio
I (1032) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
I (1045) spiram: Reserving pool of 32K of internal memory for DMA/internal allocations
I (1063) atecc608a: Seeding the random number generator...
I (1064) atecc608a: ok
I (1086) atecc608a: Initializing ATECC608a secure element
I (1086) atecc608a: ok
I (1086) atecc608a: Checking data zone lock status...
I (1108) atecc608a: ok: locked
I (1108) atecc608a: Get the device info (type)...
I (1126) atecc608a: ok: 60 02
I (1126) core2forAWS: Firmware Version: 1.0.0
I (2740) I2S: DMA Malloc info, datalen=blocksize=256, dma_buf_count=2
I (2740) I2S: PLL_D2: Req RATE: 44100, real rate: 44642.000, BITS: 16, CLKM: 14, BCK: 8, MCLK: 11289966.924, SCLK: 1428544.000000, diva: 64, divb: 11
I (2750) I2S: PLL_D2: Req RATE: 44100, real rate: 44642.000, BITS: 16, CLKM: 14, BCK: 8, MCLK: 11289966.924, SCLK: 1428544.000000, diva: 64, divb: 11
I (2769) main: **************************************
I (2770) main: Device Serial: 0123xxxxxxxxxxxxxx
I (2776) main: **************************************
ワークショップ
AWSから ワークショップのドキュメント が公開されています。内容は次のようなものです。IoTの自習ができるようになっています。
- Getting Started - 動作確認とWiFiのプロビジョニング
- Blinky Hello World - 開発環境(ESP-IDF)とAWS IoT Coreのセットアップ
- Smart Thermostat - AWS IoT Coreの基礎知識
- Smart Spaces - AWS IoTと機械学習の基礎知識
- Intro to Alexa for IoT - Alexa for IoTデモ
残念ながら、FreeRTOSは登場しません。
Getting Started
起動の確認ができたので、ワークショップのドキュメント を参考に開発環境を準備します。
- SiLabs CP210x drivers
M5StackをPCにシリアル接続するためにドライバーをインストールします。このドライバーはM5Stack BASICなどと同じなので、すでにM5Stackを使用している人は改めてインストールする必要はありません。
- Visual Studio Code + PlatformIO
Visual Studio Codeに加えてさまざまな開発ボートをサポートするPlatformIOを使用します
- ESP RainMaker
スマホからデバイスを設定するためのESP RainMakerをAndroid/iOSのアプリストアからインストールします
- ソースコードのクローン
M5Stack Core2 for AWS IoT EduKit 用に提供されている学習用のソースコードをGitHubからクローンします。
git clone https://github.com/m5stack/Core2-for-AWS-IoT-EduKit.git
Windows PCの場合、PlatformIOのデフォルトのプロジェクトのフォルダー C:\Users<ユーザー>\Documents\PlatformIO\Projects 下だとパス名が長すぎるというエラーでクローンできませんでした。その場合は C:\ の直下にフォルダーを作成するなどしてください。
-
USBケーブル接続、電源投入
-
PlatformIOでGetting-Startedプロジェクトを開く
- シリアルポートの調整
platformio.iniに記載されたシリアルポートをPCのOSに合わせて調整します。Windowsであればデフォルトで指定されたupload_portを消すか、; でコメントにします。
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter, extra scripting
; Upload options: custom port, speed and extra flags
; Library options: dependencies, extra library storages
;
; Please visit documentation for the other options and examples
; http://docs.platformio.org/page/projectconf.html
[env:core2foraws]
platform = espressif32@2.1.0
framework = espidf
board = esp32dev
;upload_port = /dev/cu.SLAB_USBtoUART
monitor_speed = 115200
board_build.partitions = partitions_4MB_sec.csv
board_build.embed_txtfiles =
components/esp_rainmaker/server_certs/mqtt_server.crt
components/esp_rainmaker/server_certs/claim_service_server.crt
components/esp_rainmaker/server_certs/ota_server.crt
- ビルド
PlatformIOでビルドします。
- ファームウェアの書き込み
作成されたファームウェアをM5Stack Core2に書き込みます
MonitorにQRコードが表示されます。スマホにインストールしたRainMakerアプリから、Add Deviceをクリックして、QRコードを読み取ります。
接続できました!