Arduino- AWSにアクセスします

概述

本チュートリアルでは、M5Core2を使ってENV Unit(温度湿度、気圧センサー)の数値を取得し、AWS-IoT-Coreにアップロードします。Arduinoプログラミングを通じて、AWSクラウドサービスプラットフォームにデバイスを接続し、データの購読と発行を実現する方法を説明します。

装置を作成します

接続前に、AWS Management Consoleを通じて新しいデバイスを登録する必要があります。 点击此处访问AWS Management Console , し、アカウントを作成した後、ログインします。

「AWS services」->「IoT Core」をクリックしてAWS IoT管理ページに進みます

「Manage」->「Things」->「Create things」をクリックして新しいデバイスを作成します

必要に応じてデバイスを作成します。ここでは最も基本的な「single thing」の作成を演示します。AWSの公式ドキュメントを参照して、より多くのデバイス種類の詳細を確認してください AWS公式ドキュメント

デバイス名を入力し、デバイスが所属するグループとデバイス分類を設定し、「Next」をクリックし、デバイス「証明書」を作成し、デバイス「ポリシー」を設定し、「Create」をクリックして作成を完了します

デバイスを作成した後、証明書(Device certificate)と公開鍵(Public Key File)と秘密鍵(Private Key File)のダウンロードページが表示されます。注意:このページは一度のみ表示されます。指示に従って、証明書、公開鍵、秘密鍵をローカルにダウンロードしてください。(後続の操作中、通信認証にこれらのファイルが使用されます)

依存関係とサンプルライブラリのインストール

本チュートリアルでは、M5Core2を使ってENV II Unit(温度湿度、気圧センサー)の数値を取得し、AWS-IoT-Coreにアップロードします。プログラミングを開始する前に、AWS-IoT関連の依存関係とサンプルプログラムをGithubからダウンロードする必要があります。以下のgitコマンドを直接使用するか、下記のリンクをクリックして該当のプロジェクトのアドレスにアクセスし、zip圧縮ファイルをダウンロードし、解凍してください。ダウンロードした依存関係をArduinoのライブラリ管理パス(通常はC:/Users/YourUserName/Documents/Arduino/libraries)に設置してください

Github


git clone git@github.com:aws-samples/aws-iot-esp32-arduino-examples.git

git clone git@github.com:bblanchon/ArduinoJson.git

git clone git@github.com:256dpi/arduino-mqtt.git

git clone git@github.com:adafruit/Adafruit_BMP280_Library.git

git clone git@github.com:adafruit/Adafruit_Sensor.git

git clone git@github.com:m5stack/UNIT_ENV.git
以前にダウンロードした依存ライブラリに加えて、使用しているM5デバイスのタイプに応じて、異なるドライバライブラリを導入することができます。この例では、我々が導入される[m5core2 . h] ( https://github.com/m5stack/m5core2 ) (core2とcore2 for aws製品に適用される)。他m5stack関連製品の在庫は、あなたがm5stack公式[github] ( https://github.com/m5stack)で見つけた。

git clone git@github.com:m5stack/M5Core2.git

プロジェクトの設定

aws-iot-esp32-arduino-examplesフォルダー内のbasic-pubsubサンプルプログラムをコピーし、プロジェクトの基本テンプレートとします

証明書の設定

通常、secrets.hというファイルを作成し、その中に「鍵と証明書」、「WIFI」の情報を格納します。ファイルの内容は以下の通りです
提示:
1. ヒント:
1. THINGNAMEのマクロ定義は作成したデバイスの名称で、AWS Management Console中の名称と一致する必要があります。
2. AWS IoT Core中でデバイスを作成した際に取得した鍵と証明書をエディターで開き、内容をコピーして、コード中の該当箇所に貼

复制AWS Management Console->Settings中的Endpoint字段


#include <pgmspace.h>

#define SECRET
#define THINGNAME "ENV-TEST"

const char WIFI_SSID[] = "WIFI_SSID";
const char WIFI_PASSWORD[] = "WIFI_PASSWORD";
const char AWS_IOT_ENDPOINT[] = "xxxxx.amazonaws.com";

// Amazon Root CA 1
static const char AWS_CERT_CA[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
MIIDQTCCAimgAwIBAgIT........................
-----END CERTIFICATE-----
)EOF";

// Device Certificate
static const char AWS_CERT_CRT[] PROGMEM = R"KEY(
-----BEGIN CERTIFICATE-----
MIIDWjCCAkKgAwIBAgIVA........................
-----END CERTIFICATE-----
)KEY";

// Device Private Key
static const char AWS_CERT_PRIVATE[] PROGMEM = R"KEY(
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAq........................
-----END RSA PRIVATE KEY-----
)KEY";

编辑程序

下記のプログラムを参照し、Arduino IDEを使用してデバイスにコンパイルしアップロードします。


#include "secrets.h"
#include <WiFiClientSecure.h>
#include <MQTTClient.h>
#include <ArduinoJson.h>
#include "WiFi.h"
#include <M5Core2.h>
#include "Adafruit_Sensor.h"
#include "Adafruit_BMP280.h"
#include "SHT3X.h"
SHT3X sht30;
Adafruit_BMP280 bme;

float tmp = 0.0;
float hum = 0.0;
float pressure = 0.0;


// The MQTT topics that this device should publish/subscribe
#define AWS_IOT_PUBLISH_TOPIC   "core2/env"
#define AWS_IOT_SUBSCRIBE_TOPIC "core2/msg"

WiFiClientSecure net = WiFiClientSecure();
MQTTClient client = MQTTClient(256);


void messageHandler(String &topic, String &payload) {
  Serial.println("incoming: " + topic + " - " + payload);
}

void connectAWS()
{
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

  Serial.println("Connecting to Wi-Fi");

  while (WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }

  // Configure WiFiClientSecure to use the AWS IoT device credentials
  net.setCACert(AWS_CERT_CA);
  net.setCertificate(AWS_CERT_CRT);
  net.setPrivateKey(AWS_CERT_PRIVATE);

  // Connect to the MQTT broker on the AWS endpoint we defined earlier
  client.begin(AWS_IOT_ENDPOINT, 8883, net);

  // Create a message handler
  client.onMessage(messageHandler);

  Serial.print("Connecting to AWS IOT");

  while (!client.connect(THINGNAME)) {
    Serial.print(".");
    delay(100);
  }

  if(!client.connected()){
    Serial.println("AWS IoT Timeout!");
    return;
  }

  // Subscribe to a topic
  client.subscribe(AWS_IOT_SUBSCRIBE_TOPIC);

  Serial.println("AWS IoT Connected!");
}

void publishMessage()
{

  pressure = bme.readPressure();
  if(sht30.get()==0){
    tmp = sht30.cTemp;
    hum = sht30.humidity;
  }
  Serial.printf("Temperatura: %2.2f*C  Humedad: %0.2f%%  Pressure: %0.2fPa\r\n", tmp, hum, pressure);
  delay(100);

  StaticJsonDocument<200> doc;
  doc["tmp"] = tmp;
  doc["hum"] = hum;
  doc["pressure"] = pressure;
  char jsonBuffer[512];
  serializeJson(doc, jsonBuffer); // print to client

  client.publish(AWS_IOT_PUBLISH_TOPIC, jsonBuffer);
}

void setup() {
  M5.begin();
  Wire.begin();
  bme.begin(0x76);
  connectAWS();
}

void loop() {
  publishMessage();
  client.loop();
  delay(1000);
}


配信メッセージを購読します

「AWS Management Console」->「Test」をクリックします。AWSアカウント内のデバイスのMQTTメッセージをテストする機能で、「Additional configuration」をクリックすることでQoSレベルを調整できます。

「AWS Management Console」->「Test」をクリックしてオンラインテストのページに行きます。AWSアカウント内のデバイスのMQTTメッセージをテストする機能で、「Additional configuration」をクリックすることでQoSレベルを調整できます。

リリーステーマ:「Topic」と「Message payload」を記入し、「Publish」をクリックしてリリースします。

On This Page