스마트 디바이스 실습 15.2주차
aws & node red
한세대학교 컴퓨터공학과 22학번 김선영
한세대학교 컴퓨터공학과 22학번 김선영
$ node-red
msg.payload = msg.payload.humidity;
return msg;
msg.payload = msg.payload.temperature;
return msg;
#include "secrets.h"
#include ≶WiFiClientSecure.h>
#include ≶MQTTClient.h>
#include ≶ArduinoJson.h>
#include ≶DHT.h>
#include ≶WiFi.h>
// AWS IoT 설정
#define AWS_IOT_PUBLISH_TOPIC "esp32/pub"
#define AWS_IOT_SUBSCRIBE_TOPIC "esp32/sub"
// DHT11 센서 설정
#define DHT_PIN 13 // DHT11 데이터 핀
#define DHT_TYPE DHT11 // DHT11 센서
WiFiClientSecure net;
MQTTClient client;
DHT dht(DHT_PIN, DHT_TYPE);
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(float temperature, float humidity)
{
StaticJsonDocument≶200> doc;
doc["temperature"] = temperature;
doc["humidity"] = humidity;
char jsonBuffer[512];
serializeJson(doc, jsonBuffer);
client.publish(AWS_IOT_PUBLISH_TOPIC, jsonBuffer);
}
void messageHandler(String &topic, String &payload) {
Serial.println("incoming: " + topic + " - " + payload);
}
void setup() {
Serial.begin(9600);
connectAWS();
dht.begin();
}
void loop() {
// 온습도 데이터 읽기
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
Serial.println(temperature);
Serial.println(humidity);
// 온습도 데이터를 Node-RED로 전송
// JSON 형식으로 데이터를 생성하여 MQTT 메시지로 전송
StaticJsonDocument≶200> doc;
doc["temperature"] = temperature;
doc["humidity"] = humidity;
char jsonBuffer[512];
serializeJson(doc, jsonBuffer);
client.publish("node-red/esp32-data", jsonBuffer); // Node-RED에서 subscribe할 토픽을 "node-red/esp32-data"로 지정
// AWS IoT에도 데이터를 전송
publishMessage(temperature, humidity);
// AWS IoT 클라이언트 루프
client.loop();
delay(1000);
}