# M5Stack CoreS3 を AWS IoT Core へ登録する


published: 2026-06-21

M5Stack CoreS3 を買いました。
これを AWS IoT Core へ登録してみます。


![./m5stackcores3.jpg](https://lab.enuesaa.dev/prototype/m5stack-cores3-aws-iot-core-register/./m5stackcores3.jpg)

outline

- ・AWS IoT Core にてデバイス登録
- ・コードを書く
- ・動作確認

**AWS IoT Core にてデバイス登録**

まずはAWSコンソールを開きましょう。
AWS IoT Core の管理画面へ飛びます。


![./aws-console.png](https://lab.enuesaa.dev/prototype/m5stack-cores3-aws-iot-core-register/./aws-console.png)

つづいて画面中央の「デバイスを接続」というボタンを押しましょう。
こちらよりデバイス登録できます。


![./aws-iot-core-console-register-start.png](https://lab.enuesaa.dev/prototype/m5stack-cores3-aws-iot-core-register/./aws-iot-core-console-register-start.png)

「次へ」をクリックします。

![./aws-iot-core-console-register-step1.png](https://lab.enuesaa.dev/prototype/m5stack-cores3-aws-iot-core-register/./aws-iot-core-console-register-step1.png)

「新しいモノを作成」を選んで名前を入力しましょう。
残りはデフォルトの設定で大丈夫です。「次へ」を押しましょう。


![./aws-iot-core-console-register-step2.png](https://lab.enuesaa.dev/prototype/m5stack-cores3-aws-iot-core-register/./aws-iot-core-console-register-step2.png)

次はSDKの設定になります。
今回は SDK は使用しないためこちらもデフォルト設定で大丈夫です。「次へ」を押しましょう。


![./aws-iot-core-console-register-step3.png](https://lab.enuesaa.dev/prototype/m5stack-cores3-aws-iot-core-register/./aws-iot-core-console-register-step3.png)

こちらのページにて接続キットをダウンロードしてください。
接続キットには証明書等が含まれており後ほど使います。


![./aws-iot-core-console-register-step4.png](https://lab.enuesaa.dev/prototype/m5stack-cores3-aws-iot-core-register/./aws-iot-core-console-register-step4.png)

こちらのページはスキップしましょう。


![./aws-iot-core-console-register-step5.png](https://lab.enuesaa.dev/prototype/m5stack-cores3-aws-iot-core-register/./aws-iot-core-console-register-step5.png)

これにてモノの登録は完了です。
「モノを表示」をクリックして詳細ページへ行きましょう。


![./aws-iot-core-console-register-step6.png](https://lab.enuesaa.dev/prototype/m5stack-cores3-aws-iot-core-register/./aws-iot-core-console-register-step6.png)

**コードを書く**

つづいて MQTT のクライアントを実装しましょう。

サンプルコードを載せます。実装内容は下記です
・WiFi へ接続
・AWS IoT Core のエンドポイントへ接続し MQTT 通信を試みる

接続キットの情報を元に src/vars.hpp を適宜変更してください。      
そして PlatformIO にて M5Stack へアップロードしましょう。


## サンプルコード

### `src/main.cpp`

```cpp
#include <M5Unified.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include "vars.hpp"

WiFiUDP ntpUDP;
WiFiClientSecure net;
PubSubClient mqtt(net);

void setup() {
  M5.begin();
  M5.Lcd.setTextSize(6);

  // WiFi へ接続
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    M5.delay(1000);
  }
  M5.Display.println("wifi ok");

  // AWS IoT Core のエンドポイントへ接続
  net.setCACert(AWSIOT_ROOT_CA);
  net.setCertificate(AWSIOT_CERTIFICATE);
  net.setPrivateKey(AWSIOT_PRIVATE_KEY);
  mqtt.setServer(AWSIOT_ENDPOINT, 8883);

  while (!mqtt.connected()) {
    if (!mqtt.connect(AWSIOT_CLIENT_ID)) {
      M5.delay(1000);
    }
  }
  M5.Display.println("mqtt ok");

  // MQTT 通信を試みる
  mqtt.publish("sdk/test/js", "hello");
  M5.Display.println("mqtt publish");
}

void loop() {
  M5.update();
}

```

### `src/vars.hpp`

```hpp
// wifi
static const char *WIFI_SSID = "";
static const char *WIFI_PASSWORD = "";

// 接続キットの start.sh を参照
// curl https://www.amazontrust.com/repository/AmazonRootCA1.pem する
static const char *AWSIOT_ROOT_CA = R"(-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
)";

// 接続キットより。ファイル名は <name>.cert.pem
static const char *AWSIOT_CERTIFICATE = R"(-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
)";

// 接続キットより。ファイル名は <name>.private.key
static const char *AWSIOT_PRIVATE_KEY = R"(-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
)";

// IoT Core のエンドポイント。接続キットの start.sh を参照。AWSコンソールにも記載がある
static const char *AWSIOT_ENDPOINT = "xx.amazonaws.com";

// クライアントID
static const char *AWSIOT_CLIENT_ID = "sdk-nodejs-test";

```

### `.gitignore`

```gitignore
.pio
.vscode

```

### `platformio.ini`

```ini
[env:m5stack-atoms3r]
platform = espressif32@6.7.0
board = esp32-s3-devkitc-1
framework = arduino
lib_deps = 
	m5stack/M5Unified@^0.2.14
	bblanchon/ArduinoJson@^7.4.2
	knolleary/PubSubClient@^2.8

```

### memos

**エンドポイント**

接続キットの start.sh に記載があります。もしくはAWSコンソールの「ドメイン設定」というページにも記載があります


mark: `src/vars.hpp:22`

- [https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-custom-endpoints-configurable.html](https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-custom-endpoints-configurable.html)
**クライアントID**

IoT Core Policy にて当該クライアントからの接続が許可されている必要があります。デフォルトでは sdk-nodejs-* が許可されているためこのようにしてますが後々見直されるのをお勧めします


mark: `src/vars.hpp:25`

- [https://docs.aws.amazon.com/iot/latest/developerguide/connect-policy.html](https://docs.aws.amazon.com/iot/latest/developerguide/connect-policy.html)
**トピック名**

MQTTのトピック名も IoT Core Policy にて制御されます。こちらもデフォルトで許可されているものを記載しておりますが、後々見直されるのをお勧めします


mark: `src/main.cpp:36`

**動作確認**

M5Stack へアップロードできたら動作確認しましょう。
まず IoT Core の管理画面にてトピックをサブスクライブします。

トピックのフィルターに sdk/test/js を入力して、サブスクライブボタンを押します。


![./aws-iot-core-mqtt-publish-subscribe.png](https://lab.enuesaa.dev/prototype/m5stack-cores3-aws-iot-core-register/./aws-iot-core-mqtt-publish-subscribe.png)

次に M5Stack を起動しましょう。


![./m5stackcores3-aws-iot.jpg](https://lab.enuesaa.dev/prototype/m5stack-cores3-aws-iot-core-register/./m5stackcores3-aws-iot.jpg)

すると IoT Core の管理画面にて、メッセージが流れてくるはずです。


![./aws-iot-core-mqtt-publish-result.png](https://lab.enuesaa.dev/prototype/m5stack-cores3-aws-iot-core-register/./aws-iot-core-mqtt-publish-result.png)

**おわり**

以上にて AWS IoT Core へ接続し MQTT 通信できました。


