아두이노 나노 ESP32 - MQTT | Arduino Nano ESP32 - MQTT

이 가이드에서는 MQTT 프로토콜을 통해 MQTT 브로커로부터 데이터를 송수신하기 위해 Arduino Nano ESP32를 사용하는 방법에 대해 자세히 알아보겠습니다. 구체적으로 다룰 내용은 다음과 같습니다:

Arduino Nano ESP32 MQTT

우리는 두 가지 다른 시나리오를 검토할 것입니다:

준비물

1×Arduino Nano ESP32 Amazon
1×USB Cable Type-C 쿠팡 | Amazon
1×Breadboard 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Recommended) Screw Terminal Adapter for Arduino Nano 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

아두이노 나노 ESP32 및 MQTT에 관하여

MQTT 프로토콜에 이미 익숙하다면 그것은 좋은 일입니다! 그렇지 않다면 온라인으로 검색해 볼 수 있습니다. 이 튜토리얼은 Arduino Nano ESP32를 사용하여 MQTT를 통해 데이터를 전송하고 수신하는 데 중점을 둡니다.

아두이노 나노 ESP32가 MQTT와 함께 사용될 수 있는 다양한 방법은 다음과 같습니다:

  • Arduino Nano ESP32를 Mosquitto나 AWS IoT와 같은 온라인 MQTT 브로커에 연결할 수 있습니다.
  • Arduino Nano ESP32를 컴퓨터에 설치된 MQTT 브로커, 예를 들어 Mosquitto나 HiveMQ에 연결할 수 있습니다.
  • 예를 들어, Mosquitto가 실행 중인 Raspberry Pi에 Arduino Nano ESP32를 MQTT 브로커에 연결할 수 있습니다.
  • Arduino Nano ESP32를 AWS EC2 상의 Mosquitto나 HiveMQ와 같은 클라우드 기반 MQTT 브로커에도 연결할 수 있습니다.

이 튜토리얼에서는 Arduino Nano ESP32가 온라인 Mosquitto 브로커에 연결할 수 있는지 확인하는 것부터 시작하검습니다. 우리는 Arduino Nano ESP32가 이 브로커를 통해 인터넷을 통해 데이터를 교환하도록 하겠습니다.

그 후에는 컴퓨터에 Mosquitto 브로커를 설정할 것입니다. 그런 다음, Arduino Nano ESP32를 이 로컬 브로커에 연결하고 데이터를 계속해서 보내고 받을 것입니다.

이 튜토리얼을 완료한 후, 다음 추가 튜토리얼들을 살펴보며 더 탐색할 수 있습니다:

이 튜토리얼들은 관련 주제에 대한 더 많은 통찰을 제공할 것입니다.

아두이노 나노 ESP32를 온라인 MQTT 브로커에 연결하기

이 부분에서는 Mosquitto에 의해 생성된 온라인 MQTT 브로커인 test.mosquitto.org에 Arduino Nano ESP32를 연결하는 방법을 배우게 됩니다. 이 브로커는 테스트 목적으로만 사용되어야 함을 유의하십시오.

아두이노 나노 ESP32 코드

아래의 아두이노 나노 ESP32 코드는 다음을 수행합니다:

  • MQTT 브로커에 연결
  • 주제를 구독
  • 구독하는 동일한 주제에 주기적으로 메시지를 게시
/* * 이 Arduino Nano ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-mqtt */ #include <WiFi.h> #include <MQTTClient.h> #include <ArduinoJson.h> const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // WIFI SSID로 변경하세요 const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // WIFI 비밀번호로 변경하세요 const char MQTT_BROKER_ADRRESS[] = "test.mosquitto.org"; // MQTT 브로커 주소로 변경하세요 const int MQTT_PORT = 1883; const char MQTT_CLIENT_ID[] = "YOUR-NAME-esp32-001"; // 원하는 대로 변경하세요 const char MQTT_USERNAME[] = ""; // 필요하다면 변경하세요, 필요없다면 비워 두세요 const char MQTT_PASSWORD[] = ""; // 필요하다면 변경하세요, 필요없다면 비워 두세요 // ESP32가 발행/구독해야 하는 MQTT 토픽 const char PUBLISH_TOPIC[] = "YOUR-NAME-esp32-001/loopback"; // 원하는 대로 변경하세요 const char SUBSCRIBE_TOPIC[] = "YOUR-NAME-esp32-001/loopback"; // 원하는 대로 변경하세요 const int PUBLISH_INTERVAL = 5000; // 5초 WiFiClient network; MQTTClient mqtt = MQTTClient(256); unsigned long lastPublishTime = 0; void setup() { Serial.begin(9600); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Arduino Nano ESP32 - Wi-Fi에 연결 중"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); connectToMQTT(); } void loop() { 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("Arduino Nano ESP32 - MQTT 브로커에 연결 중"); while (!mqtt.connect(MQTT_CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) { Serial.print("."); delay(100); } Serial.println(); if (!mqtt.connected()) { Serial.println("Arduino Nano ESP32 - MQTT 브로커 연결 시간 초과!"); return; } // 주제를 구독하면, 들어오는 메시지는 messageHandler() 함수에 의해 처리됩니다 if (mqtt.subscribe(SUBSCRIBE_TOPIC)) Serial.print("Arduino Nano ESP32 - 주제 구독 성공: "); else Serial.print("Arduino Nano ESP32 - 주제 구독 실패: "); Serial.println(SUBSCRIBE_TOPIC); Serial.println("Arduino Nano 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("Arduino Nano ESP32 - MQTT로 전송됨:"); Serial.print("- 주제: "); Serial.println(PUBLISH_TOPIC); Serial.print("- 페이로드:"); Serial.println(messageBuffer); } void messageHandler(String &topic, String &payload) { Serial.println("Arduino Nano ESP32 - MQTT에서 수신됨:"); Serial.println("- 주제: " + topic); Serial.println("- 페이로드:"); Serial.println(payload); }

사용 방법

  • 아두이노 나노 ESP32를 처음 사용한다면, 아두이노 IDE에서 아두이노 나노 ESP32 환경 설정 방법에 관한 튜토리얼을 참고하세요.아두이노 나노 ESP32 환경 설정 방법 튜토리얼.
  • 제공된 다이어그램에 따라 컴포넌트를 연결하세요.
  • USB 케이블을 사용하여 아두이노 나노 ESP32 보드를 컴퓨터에 연결하세요.
  • 컴퓨터에서 아두이노 IDE를 실행하세요.
  • Arduino Nano ESP32 보드와 해당 COM 포트를 선택하세요.
  • PC에서 아두이노 IDE를 엽니다
  • 아두이노 IDE의 왼쪽 내비게이션 바에 있는 Library Manager 아이콘을 클릭하여 라이브러리 관리자를 엽니다
  • 검색 상자에 MQTT를 입력한 다음, Joel Gaehwiler에 의한 MQTT 라이브러리를 찾습니다.
  • Install 버튼을 클릭하여 MQTT 라이브러리를 설치하세요.
Arduino Nano ESP32 MQTT library

검색 상자에 Arduino Nano ESP32Json을 입력한 다음, Benoit Blanchon이 만든 Arduino Nano ESP32Json 라이브러리를 찾으세요.

Install 버튼을 클릭하여 Arduino Nano ESP32Json 라이브러리를 설치하세요.

Arduino Nano ESP32 Json library
  • 위의 코드를 복사하여 아두이노 IDE로 열기
  • 코드에서 WiFi 정보(SSID 및 비밀번호)를 귀하의 것으로 교체하세요.
  • 코드에서 'YOUR-NAME'이라는 단어를 세 번 볼 수 있습니다. 이 단어를 귀하의 이름이나 무작위 문자(알파벳 문자만, 공백 없음)로 교체하세요. 이는 변경하지 않을 경우, 동일한 MQTT 클라이언트 ID와 주제로 인해 여러 사람이 동시에 이 코드를 실행할 수 있어 충돌이 발생할 수 있기 때문입니다.
  • 아두이노 IDE에서 Upload 버튼을 클릭하여 아두이노 나노 ESP32에 코드를 업로드하세요.
  • 시리얼 모니터 열기
  • 시리얼 모니터에서 결과 보기
COM6
Send
Arduino Nano ESP32 - Connecting to MQTT broker Arduino Nano ESP32 - Subscribed to the topic: YOUR-NAME-esp32-001/loopback Arduino Nano ESP32 - MQTT broker Connected! Arduino Nano ESP32 - sent to MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload:{"timestamp":11757,"data":255} Arduino Nano ESP32 - received from MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload: {"timestamp":11757,"data":255} Arduino Nano ESP32 - sent to MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload:{"timestamp":16896,"data":259} Arduino Nano ESP32 - received from MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload: {"timestamp":16896,"data":259}
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

아시다시피, Arduino Nano ESP32는 MQTT 브로커에 메시지를 게시한 다음 동일한 메시지를 다시 받습니다. 그 이유는 위의 코드가 데이터를 게시하는 동일한 주제를 구독하기 때문입니다. Arduino Nano ESP32가 게시한 메시지를 받지 않길 원한다면, 단순히 SUBSCRIBE 주제를 PUBLISH 주제와 다르게 만들면 됩니다.

아두이노 나노 ESP32를 PC에 설치된 MQTT 브로커에 연결하십시오.

Mosquitto MQTT 브로커 설치하기

  • Mosquitto MQTT Broker를 다운로드하십시오.
  • C: 드라이브 대신 D: 드라이브에 설치하십시오. 잠재적인 문제를 방지하기 위해 Mosquitto 브로커를 C: 드라이브에 설치하지 마십시오.

모스키토 MQTT 브로커 실행하기

이제 아래 단계를 따라서 MQTT 브로커가 제대로 기능하는지 확인해 보겠습니다:

  • Mosquitto가 설치된 디렉토리로 이동하세요. 예를 들어: D:\mosquitto>
  • 새 파일을 만들어 test.conf라고 이름 붙이고, 아래 내용을 복사하여 해당 디렉토리에 저장하세요:
listener 1883 allow_anonymous true

PC에서 관리자로 명령 프롬프트를 실행하세요. 이를 Broker Window라고 부릅시다. 튜토리얼이 끝날 때까지 닫지 마세요.

Windows command prompt administrator

아래 명령어들을 차례로 실행하세요:

cd /d D:\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:\mosquitto D:\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
  • PC에서 관리자 권한으로 다른 명령 프롬프트를 엽니다.
  • 아래 명령어를 실행하여 PC의 IP 주소를 찾으세요:
ipconfig
Command Prompt
C:\WINDOWS\system32>ipconfig Windows IP Configuration Ethernet adapter: Subnet Mask . . . . . . . . . . . : 255.0.0.0 IPv4 Address. . . . . . . . . . . : 192.168.0.5 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . :

나중에 사용할 IP 주소를 적어두세요. 위의 예시에서: 192.168.0.5

모스키토 브로커가 작동하는지 테스트하세요

  • PC에서 다른 명령 프롬프트를 관리자로 열십시오. 이를 구독자 창이라고 합시다
  • 아래 명령어를 차례로 실행하며 주제를 구독하십시오 (당신의 IP 주소로 바꾸십시오):
cd /d D:\mosquitto mosquitto_sub -h 192.168.0.5 -p 1883 -t esp32-001/send
  • PC에서 관리자로 다른 명령 프롬프트를 엽니다. 이를 발행자 창이라고 부릅시다.
  • 아래 명령어를 차례대로 실행하여 동일한 토픽에 메시지를 발행하세요 (귀하의 IP 주소로 대체하세요):
cd /d D:\mosquitto mosquitto_pub -h 192.168.0.5 -p 1883 -t esp32-001/send -m "Hello, MQTT!"

당신은 볼 것입니다:

Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\mosquitto D:\mosquitto>mosquitto_pub -h 192.168.0.5 -p 1883 -t esp32-001/send -m "Hello, MQTT!" D:\mosquitto>

다음과 같이 메시지가 구독자 창으로 전달됨을 확인하게 될 것입니다:

Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\mosquitto D:\mosquitto>mosquitto_sub -h 192.168.0.5 -p 1883 -t esp32-001/send Hello, MQTT!

이제 PC에 Mosquitto MQTT 브로커를 성공적으로 설치했습니다. 다음 브로커 창, 구독자 창, 그리고 발행자 창 세 개의 창을 닫지 말아 주세요. 우리는 이 창들을 다음에 사용할 것입니다.

아두이노 나노 ESP32 코드

아래의 아두이노 나노 ESP32 코드는 다음과 같은 기능을 합니다:

  • MQTT 브로커에 연결하다
  • 토픽을 구독하다
  • 주기적으로 다른 토픽에 메시지를 게시하다
/* * 이 Arduino Nano ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-mqtt */ #include <WiFi.h> #include <MQTTClient.h> #include <ArduinoJson.h> #define CLIENT_ID "ESP32-001" // 원하는 대로 변경하세요 const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // 와이파이 SSID로 변경하세요 const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // 와이파이 비밀번호로 변경하세요 const char MQTT_BROKER_ADRRESS[] = "192.168.0.5"; // MQTT 브로커의 IP 주소로 변경하세요 const int MQTT_PORT = 1883; const char MQTT_USERNAME[] = ""; // 필요하다면 변경하세요 const char MQTT_PASSWORD[] = ""; // 필요하다면 변경하세요 // 이 장치가 게시/구독해야 하는 MQTT 토픽 #define PUBLISH_TOPIC "esp32-001/send" #define SUBSCRIBE_TOPIC "esp32-001/receive" #define PUBLISH_INTERVAL 5000 // 4초 WiFiClient network; MQTTClient mqtt = MQTTClient(256); unsigned long lastPublishTime = 0; void setup() { Serial.begin(9600); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Arduino Nano ESP32 - Wi-Fi 연결 중"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); connectToMQTT(); } void loop() { 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("Arduino Nano ESP32 - MQTT 브로커 연결 중"); while (!mqtt.connect(CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) { Serial.print("."); delay(100); } Serial.println(); if (!mqtt.connected()) { Serial.println("Arduino Nano ESP32 - MQTT 브로커 연결 시간 초과!"); return; } // 토픽을 구독하면, 들어오는 메시지는 messageHandler() 함수에서 처리됩니다 if (mqtt.subscribe(SUBSCRIBE_TOPIC)) Serial.print("Arduino Nano ESP32 - 토픽 구독 성공: "); else Serial.print("Arduino Nano ESP32 - 토픽 구독 실패: "); Serial.println(SUBSCRIBE_TOPIC); Serial.println("Arduino Nano 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("Arduino Nano ESP32 - MQTT로 전송됨:"); Serial.print("- 토픽: "); Serial.println(PUBLISH_TOPIC); Serial.print("- 페이로드:"); Serial.println(messageBuffer); } void messageHandler(String &topic, String &payload) { Serial.println("Arduino Nano ESP32 - MQTT에서 수신됨:"); Serial.println("- 토픽: " + topic); Serial.println("- 페이로드:"); Serial.println(payload); // 들어오는 데이터를 json 객체로 처리한 후, 무언가를 제어할 수 있습니다 /* StaticJsonDocument<200> doc; deserializeJson(doc, payload); const char* message = doc["message"]; */ }

사용 방법

Arduino Nano ESP32를 시작하는 방법은 다음과 같습니다:

아두이노 나노 ESP32에 새로 오셨다면, 아두이노 IDE에서 아두이노 나노 ESP32 환경 설정하는 방법에 대한 튜토리얼을 참조하세요. BASE_URL/tutorials/arduino-nano-esp32/arduino-nano-esp32-software-installation.

제공된 다이어그램에 따라 구성요소들을 연결하세요.

아두이노 나노 ESP32 보드를 USB 케이블을 사용하여 컴퓨터에 연결하세요.

컴퓨터에서 아두이노 IDE를 실행하세요.

Arduino Nano ESP32 보드와 해당 COM 포트를 선택하세요.

위의 코드를 복사해서 아두이노 IDE에서 열기

코드에서 WiFi 정보(SSID와 비밀번호)를 여러분의 것으로 변경하세요.

코드에서 MQTT 브로커 주소(도메인 이름 또는 IP 주소)를 변경하세요.

아두이노 IDE에서 Upload 버튼을 클릭하여 아두이노 나노 ESP32로 코드를 업로드하세요.

아두이노 나노 ESP32에서 PC로 MQTT를 통해 메시지 보내기

아두이노 나노 ESP32 코드는 MQTT 주제 esp32-001/send에 데이터를 게시하고, PC의 구독자 창에서 해당 주제를 구독하여 데이터를 수신합니다.

시리얼 모니터를 열면, Arduino Nano ESP32가 주기적으로 토픽에 메시지를 게시하는 것을 볼 수 있습니다.

COM6
Send
Arduino Nano ESP32 - Connecting to MQTT broker Arduino Nano ESP32 - Subscribed to the topic: esp32-001/receive Arduino Nano ESP32 - MQTT broker Connected! Arduino Nano ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":10708,"data":311} Arduino Nano ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":15837,"data":298} Arduino Nano ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":20965,"data":291} Arduino Nano ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":26094,"data":286}
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

구독자 창을 확인하세요. 아래와 같이 Arduino Nano ESP32에서 발행한 메시지를 받는 것을 볼 수 있습니다:

Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\mosquitto D:\mosquitto>mosquitto_sub -h 192.168.0.5 -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에서 Arduino Nano ESP32로 MQTT를 통해 메시지 보내기

Arduino Nano ESP32는 esp32-001/receive 주제를 구독하고, PC의 발행자 창에서 그 주제에 메시지를 발행하여 Arduino Nano ESP32로 보냅니다.

아래 명령을 실행하여 발행자 창에서 Arduino Nano ESP32가 구독한 주제에 메시지를 게시하세요:

mosquitto_pub -h 192.168.0.5 -p 1883 -t esp32-001/receive -m "Hello, Arduino Nano ESP32!"

이 메시지가 아래와 같이 Arduino Nano ESP32의 시리얼 모니터에서 받아진 것을 볼 수 있습니다:

COM6
Send
Arduino Nano ESP32 - received from MQTT: - topic: esp32-001/receive - payload: Hello, Arduino Nano ESP32!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!