Arduino IDE의 왼쪽 탐색 바에 있는 Library Manager 아이콘을 클릭하여 라이브러리 관리자를 엽니다.
검색 상자에 MQTT를 입력한 후, Joel Gaehwiler에 의한 MQTT 라이브러리를 찾습니다.
Install 버튼을 클릭하여 MQTT 라이브러리를 설치하세요.
검색 상자에 ArduinoJson을 입력한 다음, Benoit Blanchon의 ArduinoJson 라이브러리를 찾으세요.
Install 버튼을 클릭하여 ArduinoJson 라이브러리를 설치하세요.
위의 코드를 복사하고 Arduino IDE로 열기
코드에서 WiFi 정보(SSID와 비밀번호)를 자신의 것으로 바꾸세요.
코드에서 'YOUR-NAME'이라는 단어를 세 번 볼 수 있습니다. 이 단어를 귀하의 이름 또는 무작위 문자(알파벳 문자만, 공백 없음)로 바꾸세요. 이 변경을 하지 않으면 동시에 이 코드를 실행하는 사람이 여러 명 있을 수 있으며, MQTT 클라이언트 ID와 주제가 모두 같기 때문에 충돌이 발생할 수 있기 때문에 필요합니다.
Arduino IDE에서 Upload 버튼을 클릭하여 ESP32에 코드를 업로드하세요.
시리얼 모니터 열기
시리얼 모니터에서 결과를 확인하세요.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
ESP32 - Connecting to MQTT broker
ESP32 - Subscribed to the topic: YOUR-NAME-esp32-001/loopback
ESP32 - MQTT broker Connected!
ESP32 - sent to MQTT:
- topic: YOUR-NAME-esp32-001/loopback
- payload:{"timestamp":11757,"data":255}
ESP32 - received from MQTT:
- topic: YOUR-NAME-esp32-001/loopback
- payload:
{"timestamp":11757,"data":255}
ESP32 - sent to MQTT:
- topic: YOUR-NAME-esp32-001/loopback
- payload:{"timestamp":16896,"data":259}
ESP32 - received from MQTT:
- topic: YOUR-NAME-esp32-001/loopback
- payload:
{"timestamp":16896,"data":259}
Ln 11, Col 1
ESP32 Dev Module on COM15
2
보시다시피, ESP32는 MQTT 브로커에 메시지를 게시한 다음 동일한 메시지를 다시 받습니다. 제공된 코드가 데이터를 게시하는 동일한 주제를 구독하기 때문에 이러한 현상이 발생합니다. ESP32가 게시한 메시지를 받지 않기를 원한다면, SUBSCRIBE 주제를 PUBLISH 주제와 다르게 설정함으로써 쉽게 달성할 수 있습니다.
C: 드라이브가 아닌 D: 드라이브에 설치하세요. 잠재적인 문제를 방지하기 위해 C: 드라이브에 Mosquitto 브로커를 설치하지 마세요.
모스키토 MQTT 브로커 실행하기
이제 다음 단계를 따라 MQTT 브로커가 제대로 작동하는지 확인해 봅시다:
Mosquitto가 설치된 디렉토리로 이동하세요. 예를 들면: D:\Draft\mosquitto>
새 파일 test.conf를 만들고 아래 내용을 복사하여 해당 디렉토리에 저장하세요:
listener 1883
allow_anonymous true
PC에서 관리자 권한으로 명령 프롬프트를 실행하십시오. 이것을 Broker Window라고 부릅시다. 튜토리얼이 끝날 때까지 이 창을 닫지 마십시오.
아래의 명령어들을 차례대로 실행하세요:
cd /d D:\Draft\mosquitto
mosquitto -v -c test.conf
당신은 보게 될 것입니다:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930]
(c) Microsoft Corporation. All rights reserved.
C:\WINDOWS\system32>cd /d D:\Draft\mosquitto
D:\Draft\mosquitto>mosquitto -v -c test.conf
1710918939: mosquitto version 2.0.18 starting
1710918939: Config loaded from test.conf.
1710918939: Opening ipv6 listen socket on port 1883.
1710918939: Opening ipv4 listen socket on port 1883.
1710918939: mosquitto version 2.0.18 running
Microsoft Windows [Version 10.0.19045.3930]
(c) Microsoft Corporation. All rights reserved.
C:\WINDOWS\system32>cd /d D:\Draft\mosquitto
D:\Draft\mosquitto>mosquitto_pub -h 192.168.0.26 -p 1883 -t esp32-001/send -m "Hello, MQTT!"
D:\Draft\mosquitto>
다음과 같이 그 메시지가 구독자 창으로 전달되었음을 보게 될 것입니다:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930]
(c) Microsoft Corporation. All rights reserved.
C:\WINDOWS\system32>cd /d D:\Draft\mosquitto
D:\Draft\mosquitto>mosquitto_sub -h 192.168.0.26 -p 1883 -t esp32-001/send
Hello, MQTT!
이제 PC에 Mosquitto MQTT 브로커를 성공적으로 설치했습니다. 브로커 창, 구독자 창, 그리고 게시자 창 세 개의 창을 닫지 말아 주세요. 곧 이 창들을 사용할 것입니다.
ESP32 코드
아래의 ESP32 코드는 다음과 같은 기능을 합니다:
MQTT 브로커에 연결하기
주제를 구독하기
다른 주제에 주기적으로 메시지를 게시하기
/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-mqtt */#include <WiFi.h>#include <MQTTClient.h>#include <ArduinoJson.h>#define CLIENT_ID "ESP32-001"// 원하는 대로 변경하세요constchar WIFI_SSID[] = "YOUR_WIFI_SSID"; // WIFI SSID로 변경하세요constchar WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // WIFI 비밀번호로 변경하세요constchar MQTT_BROKER_ADRRESS[] = "192.168.0.26"; // MQTT 브로커의 IP 주소로 변경하세요constint MQTT_PORT = 1883;constchar MQTT_USERNAME[] = ""; // 필요한 경우 변경하세요constchar MQTT_PASSWORD[] = ""; // 필요한 경우 변경하세요// 이 디바이스가 게시/구독해야 하는 MQTT 주제#define PUBLISH_TOPIC "esp32-001/send"#define SUBSCRIBE_TOPIC "esp32-001/receive"#define PUBLISH_INTERVAL 5000 // 5초WiFiClient network;MQTTClientmqtt = MQTTClient(256);unsignedlong lastPublishTime = 0;voidsetup() {Serial.begin(9600);WiFi.mode(WIFI_STA);WiFi.begin(WIFI_SSID, WIFI_PASSWORD);Serial.println("ESP32 - Wi-Fi에 연결 중");while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print("."); }Serial.println(); connectToMQTT();}voidloop() {mqtt.loop();if (millis() - lastPublishTime > PUBLISH_INTERVAL) { sendToMQTT(); lastPublishTime = millis(); }}void connectToMQTT() {// MQTT 브로커에 연결mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network);// 들어오는 메시지를 위한 핸들러 생성mqtt.onMessage(messageHandler);Serial.print("ESP32 - MQTT 브로커에 연결 중");while (!mqtt.connect(CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) {Serial.print(".");delay(100); }Serial.println();if (!mqtt.connected()) {Serial.println("ESP32 - MQTT 브로커 연결 시간 초과!");return; }// 토픽 구독, 들어오는 메시지는 messageHandler() 함수가 처리if (mqtt.subscribe(SUBSCRIBE_TOPIC))Serial.print("ESP32 - 토픽 구독 성공: ");elseSerial.print("ESP32 - 토픽 구독 실패: ");Serial.println(SUBSCRIBE_TOPIC);Serial.println("ESP32 - MQTT 브로커 연결됨!");}void sendToMQTT() { StaticJsonDocument<200> message; message["timestamp"] = millis(); message["data"] = analogRead(0); // 다른 센서에서 데이터 읽기 가능char messageBuffer[512]; serializeJson(message, messageBuffer);mqtt.publish(PUBLISH_TOPIC, messageBuffer);Serial.println("ESP32 - MQTT로 전송됨:");Serial.print("- 토픽: ");Serial.println(PUBLISH_TOPIC);Serial.print("- 페이로드:");Serial.println(messageBuffer);}void messageHandler(String &topic, String &payload) {Serial.println("ESP32 - MQTT에서 수신됨:");Serial.println("- 토픽: " + topic);Serial.println("- 페이로드:");Serial.println(payload);// 들어온 데이터를 json 객체로 처리한 후 무언가를 제어할 수 있음/* StaticJsonDocument<200> doc; deserializeJson(doc, payload); const char* message = doc["message"]; */}
사용 방법
위의 코드를 복사하고 Arduino IDE로 열기
코드의 WiFi 정보(SSID 및 비밀번호)를 자신의 것으로 교체하십시오.
코드에서 MQTT 브로커 주소(도메인 이름 또는 IP 주소)를 교체하십시오.
Arduino IDE에서 Upload 버튼을 클릭하여 코드를 ESP32에 업로드하십시오.
ESP32에서 PC로 MQTT를 통해 메시지 보내기
ESP32 코드는 esp32-001/send MQTT 토픽에 데이터를 게시하고, PC의 구독자 창에서는 해당 토픽을 구독하여 데이터를 수신합니다.
시리얼 모니터를 열면 ESP32가 주기적으로 토픽에 메시지를 게시하는 것을 볼 수 있습니다.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
ESP32 - Connecting to MQTT broker
ESP32 - Subscribed to the topic: esp32-001/receive
ESP32 - MQTT broker Connected!
ESP32 - sent to MQTT:
- topic: esp32-001/send
- payload:{"timestamp":10708,"data":311}
ESP32 - sent to MQTT:
- topic: esp32-001/send
- payload:{"timestamp":15837,"data":298}
ESP32 - sent to MQTT:
- topic: esp32-001/send
- payload:{"timestamp":20965,"data":291}
ESP32 - sent to MQTT:
- topic: esp32-001/send
- payload:{"timestamp":26094,"data":286}
Ln 11, Col 1
ESP32 Dev Module on COM15
2
구독자 창을 확인하십시오. ESP32에 의해 발행된 메시지를 다음과 같이 수신하는 것을 볼 수 있습니다:
Command Prompt
Microsoft Windows [Version 10.0.19045.3930]
(c) Microsoft Corporation. All rights reserved.
C:\WINDOWS\system32>cd /d D:\Draft\mosquitto
D:\Draft\mosquitto>mosquitto_sub -h 192.168.0.26 -p 1883 -t esp32-001/send
Hello, MQTT!
{"timestamp":10708,"data":311}
{"timestamp":15837,"data":298}
{"timestamp":20965,"data":291}
{"timestamp":26094,"data":286}
PC에서 ESP32로 MQTT를 통해 메시지 보내기
ESP32는 esp32-001/receive라는 토픽을 구독하고, PC의 발행자 창에서 그 토픽에 메시지를 발행하여 ESP32로 전송합니다.
다음 명령어를 실행하여 ESP32가 구독한 주제에 메세지를 게시하십시오: Publisher Window에서