13. MQTT & Nod red - sunbang123/Smart_device GitHub Wiki

์‹ค์Šต ๋ณด๊ณ ์„œ

MQTT to Node-red

  1. Node-RED ์„ค์น˜:
  • Node-RED๋Š” Node.js ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ. node-red๋ฅผ ์„ค์น˜ํ•จ.
  1. MQTT ๋…ธ๋“œ ์ถ”๊ฐ€:
  • Node-RED์˜ ํ”Œ๋กœ์šฐ ์—๋””ํ„ฐ์—์„œ MQTT ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€. MQTT ๋…ธ๋“œ๋Š” MQTT ๋ธŒ๋กœ์ปค์— ์—ฐ๊ฒฐํ•˜๊ณ  MQTT ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†ก ๋ฐ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ. Node-RED ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ํ†ตํ•ด MQTT ๋…ธ๋“œ๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Œ.
  1. MQTT ์„ค์ •:
  • MQTT ๋…ธ๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด MQTT ๋ธŒ๋กœ์ปค์˜ ํ˜ธ์ŠคํŠธ, ํฌํŠธ, ์ฃผ์ œ ๋“ฑ์„ ์„ค์ •. ์ด๋ฅผ ํ†ตํ•ด Node-RED์—์„œ MQTT ๋ธŒ๋กœ์ปค์— ์—ฐ๊ฒฐํ•˜๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ.
  1. MQTT ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ:
  • MQTT ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด ์ˆ˜์‹ ํ•œ MQTT ๋ฉ”์‹œ์ง€๋ฅผ ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฉ”์‹œ์ง€๋ฅผ ํ•„ํ„ฐ๋งํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜์—ฌ ์›ํ•˜๋Š” ๋Œ€์ƒ์—๊ฒŒ ์ „์†กํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ. Node-RED์˜ ๋‹ค๋ฅธ ๋…ธ๋“œ์™€ ํ•จ๊ป˜ ์กฐํ•ฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ์ œ์–ด ํ๋ฆ„์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ.

์‹ค์Šต : MQTT๋ฅผ ํ†ตํ•ด ์˜จ์Šต๋„ ๋ฐ์ดํ„ฐ Node-red์— ์ถœ๋ ฅ

์‹ค์Šต ์ˆœ์„œ

  1. http://www.mqtt-dashboard.com/ ์ ‘์†, ๋กœ๊ทธ์ธ
  2. https://www.hivemq.com/demos/websocket-client/ SETTING
  1. EspMQTTClient ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜
  1. ์ฝ”๋“œ ์ž‘์„ฑ, ESP32 ์—ฐ๊ฒฐ -> ์—…๋กœ๋“œ

  2. Serial Monitor์™€ MQTT์—์„œ ์˜จ์Šต๋„ ํ™•์ธ

  1. Node-Red ์„ค์ •
  • ๋…ธ๋“œ๋ฅผ group์œผ๋กœ ๋ฌถ์Œ.
  • MQTT, MQTT๋ธŒ๋กœ์ปค ๋…ธ๋“œ ์„ค์ •
  1. Node-Red ๋Œ€์‹œ๋ณด๋“œ ํ™•์ธ

์ฝ”๋“œ

#include <WiFi.h> //WIFI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
#include <EspMQTTClient.h> // PubSubclient ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•œ ESP32 MQTT Client ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
#include <DHT.h> //DHT11 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
#define DHTTYPE DHT11 // DHT ์„ผ์„œ ํƒ€์ž… ์ •์˜

DHT dht(13, DHTTYPE); //DHT ์„ค์ • dht( ํ•€, DHT ์ข…๋ฅ˜)
float temp1,humid1;
char temp[10]; // temp, humid ๋ฅผ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์ณ์„œ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜ ์ •์˜
char humid[10];

EspMQTTClient client(
  "[wifi ์ด๋ฆ„]", // SSID
  "[wifi ๋น„๋ฐ€๋ฒˆํ˜ธ]", // PW
//๋ฐ”๊พธ์ง€ ๋ง๊ฒƒ!!
  "broker.mqtt-dashboard.com", // MQTT Broker ์„œ๋ฒ„ IP
  "MQTT_TestClient", // ํด๋ผ์ด์–ธํŠธ ์ด๋ฆ„
  1883 // MQTT ํฌํŠธ๋ฒˆํ˜ธ
);
//WiFiClient client;
void setup()
{
  Serial.begin(115200); //Initialize serial
  dht.begin();
  client.enableDebuggingMessages();
  client.enableLastWillMessage("TestClient/lastwill", "I am going offline");
}
void onConnectionEstablished(){
}
void loop() {
  client.loop();
  temp1 = dht.readTemperature(); // ์˜จ๋„๋ฅผ ์ฝ์–ด์„œ tem์— ์ €์žฅ
  humid1 = dht.readHumidity(); // ์Šต๋„๋ฅผ ์ฝ์–ด์„œ hum์— ์ €์žฅ
  sprintf(temp, "%.2f" ,dht.readTemperature());
  sprintf(humid, "%.2f" ,dht.readHumidity());
  Serial.print(F("Humidity : "));
  Serial.println(humid1);
  Serial.print(F("Temperature : "));
  Serial.println(temp1);
  client.publish("mytopic/temp", temp);
  client.publish("mytopic/humid", humid);
  delay(5000);
}

๋Š๋‚€์ 

  • ์ด ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด MQTT์™€ ESP32, DHT11 ์„ผ์„œ, Node-RED์˜ ์กฐํ•ฉ์„ ํ†ตํ•ด ๊ฐ„๋‹จํ•œ IoT ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›€.
  • MQTT๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์†์‰ฝ๊ฒŒ ์„ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ  ๋‹ค์–‘ํ•œ ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Œ.
  • MQTT ๋ธŒ๋กœ์ปค๋Š” MQTT ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ๊ฒŒ์‹œํ•˜๋Š” ์ค‘์•™ ํ—ˆ๋ธŒ ์—ญํ• ์„ ํ•จ.
  • ์ด ์˜ˆ์ œ์—์„œ๋Š” mqtt-dashboard.com์ด๋ผ๋Š” ๊ณต๊ฐœ MQTT ๋ธŒ๋กœ์ปค๋ฅผ ์‚ฌ์šฉ.
  • MQTT ๋ธŒ๋กœ์ปค์— ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ  ๊ตฌ๋…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›€.
  • Node-RED๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ถœ๋ ฅํ•˜๋Š” ์ž‘์—…์„ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ.
  • ์‹œ๊ฐ์  ํ”Œ๋กœ์šฐ ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋„๊ตฌ์ธ Node-RED๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ MQTT ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ์„ ๋ฐฐ์›€.
โš ๏ธ **GitHub.com Fallback** โš ๏ธ