스마트 디바이스 실습 14.2주차
AWS
한세대학교 컴퓨터공학과 22학번 김선영
한세대학교 컴퓨터공학과 22학번 김선영
> 라이브러리
#include ≶pgmspace.h>
#include "secrets.h"
#include ≶WiFiClientSecure.h>
#include ≶MQTTClient.h>
#include ≶ArduinoJson.h>
#include "WiFi.h"
> MQTT 클라이언트가 게시(publish) 및 구독(subscribe)할 MQTT 토픽을 정의
#define SECRET
#define THINGNAME "Mtest"
// The MQTT topics that this device should publish/subscribe
#define AWS_IOT_PUBLISH_TOPIC "outTopic"
#define AWS_IOT_SUBSCRIBE_TOPIC "inTopic"
WiFiClientSecure 인스턴스 net과 MQTTClient 인스턴스 client를 생성
WiFiClientSecure net = WiFiClientSecure();
MQTTClient client = MQTTClient(256);
const char WIFI_SSID[] = "i2r";
const char WIFI_PASSWORD[] = "00000000";
const char AWS_IOT_ENDPOINT[] = "*****************.iot.us-east-2.amazonaws.com";
void connectAWS()
{
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
// Wi-Fi 연결을 수행합니다.
// Wi-Fi가 연결될 때까지 연결 상태를 확인합니다.
// Configure WiFiClientSecure to use the AWS IoT device credentials
net.setCACert(AWS_CERT_CA);
net.setCertificate(AWS_CERT_CRT);
net.setPrivateKey(AWS_CERT_PRIVATE);
// AWS IoT의 장치 인증서와 개인 키를 사용하여 WiFiClientSecure를 구성합니다.
// MQTT 브로커에 연결합니다.
client.begin(AWS_IOT_ENDPOINT, 8883, net);
// Create a message handler
client.onMessage(messageHandler);
// 메시지 처리기를 생성합니다.
// AWS IoT에 연결을 시도합니다.
while (!client.connect(THINGNAME)) {
delay(100);
}
// AWS IoT에 연결되면 구독을 수행합니다.
client.subscribe(AWS_IOT_SUBSCRIBE_TOPIC);
}
void publishMessage()
{
// 센서 데이터를 JSON 형식으로 만듭니다.
StaticJsonDocument<200> doc;
doc["time"] = millis();
doc["sensor_a0"] = analogRead(0);
char jsonBuffer[512];
serializeJson(doc, jsonBuffer); // print to client
client.publish(AWS_IOT_PUBLISH_TOPIC, jsonBuffer);
}
void messageHandler(String &topic, String &payload) {
Serial.println("incoming: " + topic + " - " + payload);
// StaticJsonDocument<200> doc;
// deserializeJson(doc, payload);
// const char* message = doc["message"];
}
void setup() {
Serial.begin(9600);
connectAWS();
}
void loop() {
publishMessage();
client.loop();
delay(1000);
}
코드 출처: https://github.com/kdi6033/cloud/blob/master/6-2-0%20aws%20ESP32%20Mqtt/AWS_ESP32/AWS_ESP32.ino