12. MQTT - sunbang123/Smart_device GitHub Wiki
- Message Queuing Telemetry Transport์ ์ฝ์, ๊ฒฝ๋์ publish/subscribe ๋ฉ์์ง ํ๋กํ ์ฝ.
MQTT์ ํต์ฌ ๊ตฌ์ฑ ์์ / ํด๋ผ์ด์ธํธ, ๋ธ๋ก์ปค, ํ ํฝ(topic)
- ํด๋ผ์ด์ธํธ : MQTT ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋๋ ๋๋ฐ์ด์ค ๋๋ ์์ฉ ํ๋ก๊ทธ๋จ. ๋ธ๋ก์ปค์๊ฒ ๋ฉ์์ง๋ฅผ ๋ฐํ(publish)ํ๊ฑฐ๋ ๊ตฌ๋ (subscribe)ํ ์ ์์.
- ๋ธ๋ก์ปค : ํด๋ผ์ด์ธํธ ๊ฐ์ ๋ฉ์์ง ์ ๋ฌ์ ์ค๊ฐํ๋ ์ค์ ์๋ฒ ์ญํ .
- ํ ํฝ : ๋ฉ์์ง๋ฅผ ๊ตฌ๋ถํ๋ ์ฃผ์ ๋ฅผ ๋ํ๋.

- DHT11 - ESP32 <- WiFi -> Internet <-> MQTT ๋ธ๋ก์ปค <- Internet ->MQTT Client(PC)
- http://www.mqtt-dashboard.com/ ์ ์, ๋ก๊ทธ์ธ
- https://www.hivemq.com/demos/websocket-client/ SETTING

- EspMQTTClient ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น

-
์ฝ๋ ์์ฑ, ESP32 ์ฐ๊ฒฐ -> ์ ๋ก๋
-
Serial Monitor์ MQTT์์ ์จ์ต๋ ํ์ธ

์ค๋งํธํฐ ์ฑ MQTT Brocker App์์ ์จ์ต๋ ํ์ธ.
- new connection

- new topic

- connect

#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);
}
client.enableDebuggingMessages();
- ํด๋ผ์ด์ธํธ์ ๋๋ฒ๊น ๋ฉ์์ง๋ฅผ ํ์ฑํํ๋ ๋ฐ ์ฌ์ฉ.
- ์ผ๋ฐ์ ์ผ๋ก ๋๋ฒ๊น ๋ฉ์์ง๋ ๊ฐ๋ฐ ์ค์ ์ํํธ์จ์ด์ ๋์์ ์ถ์ ํ๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ ์ค.
- ์ด ํจ์๋ฅผ ํธ์ถํ๋ฉด ํด๋ผ์ด์ธํธ๋ ๋๋ฒ๊น ๋ฉ์์ง๋ฅผ ์์ฑํ๊ณ ์ถ๋ ฅํ๊ฒ ๋จ.
- ์ด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ๋ด๋ถ ๋์ ๋ฐ ๋คํธ์ํฌ ํต์ ๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ์๋ณํ ์ ์์.
client.enableLastWillMessage("TestClient/lastwill", "I am going offline");
- LastWillMessage๋ ํด๋ผ์ด์ธํธ๊ฐ ๋น์ ์์ ์ผ๋ก ์ฐ๊ฒฐ์ด ๋์ด์ง ๊ฒฝ์ฐ ๋ธ๋ก์ปค ๋๋ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ก๋๋ ๋ฉ์์ง.
- ์ฌ๊ธฐ์ "TestClient/lastwill"์ ์์ง ๋ฉ์์ง๋ฅผ ์ ์กํ ์ฃผ์ (topic), "I am going offline"๋ ๋ฉ์์ง ๋ด์ฉ.
- ์ด ํจ์๋ฅผ ํธ์ถํ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ์ด ๋์ด์ง ๊ฒฝ์ฐ์ ์๋์ผ๋ก ํด๋น ๋ฉ์์ง๋ฅผ ์ ์กํ๊ฒ ๋จ.
- ์ด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ ์ํ๋ฅผ ์ถ์ ํ๊ณ ์ฐ๊ฒฐ์ด ๋์ด์ง ๊ฒฝ์ฐ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๋ ์์คํ ์ ์๋ฆฌ๋ ๋ฐ ์ฌ์ฉํ ์ ์์.
EspMQTTClient client(
"[wifi ์ด๋ฆ]", // SSID
"[wifi ๋น๋ฐ๋ฒํธ]", // PW
//๋ฐ๊พธ์ง ๋ง๊ฒ!!
"broker.mqtt-dashboard.com", // MQTT Broker ์๋ฒ IP
"MQTT_TestClient", // ํด๋ผ์ด์ธํธ ์ด๋ฆ
1883 // MQTT ํฌํธ๋ฒํธ
);
์ ์ค์ต ์ฝ๋์์๋ client ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ MQTT ๋ธ๋ก์ปค์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์ ๋ณด๋ฅผ ์ค์ ํ๊ณ ์์.
- MQTT ๋ธ๋ก์ปค์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ์ค์ ํด์ผ ํ๋ ๊ฐ : WiFi ID, WiFi PW, MQTT Broker ์ฃผ์, Client ID, Port ๋ฒํธ.
ํด๋ผ์ด์ธํธ ID์ ํฌํธ ๋ฒํธ๋ MQTT ๋ธ๋ก์ปค์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์๋ณ์์ ํฌํธ ์ ๋ณด๋ฅผ ๋ํ๋.
- ์ฝ๋์์ ์ฃผ์ด์ง ๊ฐ์ธ "MQTT_TestClient"์ 1883์ MQTT ๋ธ๋ก์ปค์ ์ค์ ๊ณผ ์ผ์นํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉ๋จ.
๋ฐฐ์ด ์ :
- MQTT ํ๋กํ ์ฝ์ ๊ธฐ๋ณธ ๊ฐ๋ : MQTT๋ ํด๋ผ์ด์ธํธ-๋ธ๋ก์ปค ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ํด๋ผ์ด์ธํธ๋ ๋ฉ์์ง๋ฅผ ๋ฐํ(publish)ํ๊ฑฐ๋ ๊ตฌ๋ (subscribe)ํ์ฌ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์.
- MQTT์ ํต์ฌ ๊ตฌ์ฑ ์์: MQTT ํด๋ผ์ด์ธํธ, MQTT ๋ธ๋ก์ปค, ํ ํฝ(topic)์ MQTT ํ๋กํ ์ฝ์์ ์ค์ํ ๊ตฌ์ฑ ์์. ํด๋ผ์ด์ธํธ๋ ๋ฉ์์ง๋ฅผ ๋ฐํํ๊ณ ๊ตฌ๋ ํ๋ฉฐ, ๋ธ๋ก์ปค๋ ํด๋ผ์ด์ธํธ ๊ฐ์ ๋ฉ์์ง ์ ๋ฌ์ ์ค๊ฐํจ. ํ ํฝ์ ๋ฉ์์ง๋ฅผ ๊ตฌ๋ถํ๋ ์ฃผ์ ๋ฅผ ๋ํ๋.
- MQTT ๋ธ๋ก์ปค ์ค์ : MQTT ๋ธ๋ก์ปค๋ MQTT ๋ฉ์์ง๋ฅผ ์์ ํ๊ณ ๊ฒ์ํ๋ ์ค์ ์๋ฒ๋ก ์ญํ ์ ํจ. ์ค์ต์์ ์ฌ์ฉํ "broker.mqtt-dashboard.com"์ MQTT ๋ธ๋ก์ปค์ IP ์ฃผ์๋ฅผ ๋ํ๋.
์๋กญ๊ฒ ์๊ฒ๋ ์ :
- EspMQTTClient ๋ผ์ด๋ธ๋ฌ๋ฆฌ: ์ค์ต์์ ์ฌ์ฉ๋ EspMQTTClient๋ ESP32 ๊ธฐ๋ฐ์ MQTT ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌํํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ESP32๋ฅผ MQTT ๋ธ๋ก์ปค์ ์ฐ๊ฒฐํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ์ ์์.
- DHT11 ์ผ์: DHT11์ ์จ๋์ ์ต๋๋ฅผ ์ธก์ ํ๋ ๋์งํธ ์ผ์๋ก ์ฌ์ฉ๋จ. DHT11 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ผ์๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ์ ์์.