공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
아두이노 UNO R4 및 MQTT에 대하여
Arduino UNO R4를 프로그래밍하여 MQTT 브로커(또는 MQTT 서버)를 통해 데이터를 송수신하는 방법을 배울 것입니다. MQTT 브로커는 다음과 같습니다.
인터넷에 있는 MQTT 브로커(예: Mosquitto 또는 AWS IoT).
컴퓨터에 설정된 MQTT 브로커(예: Mosquitto 또는 HiveMQ).
Raspberry Pi에서 실행 중인 MQTT 브로커(예: Mosquitto).
클라우드에 있는 MQTT 브로커(예: AWS EC2의 Mosquitto 또는 HiveMQ).
이 가이드에서는 Arduino UNO R4가 온라인 Mosquitto 브로커에 연결할 수 있는지부터 확인합니다. Arduino UNO R4는 인터넷을 통해 이 브로커로 메시지를 보내고 받을 것입니다.
다음으로, 컴퓨터에 Mosquitto 브로커를 설치할 것입니다. 그 후, Arduino UNO R4를 우리 컴퓨터의 MQTT 브로커에 연결할 것입니다. 이를 통해 이 로컬 브로커를 통해 데이터를 송수신할 것입니다.
Arduino UNO R4를 온라인 MQTT 브로커에 연결하기
이 섹션에서는 Mosquitto에서 제공하는 온라인 MQTT 서비스인 test.mosquitto.org에 Arduino UNO R4를 연결하는 방법을 이해할 것입니다. 이 서비스는 오직 테스트 용도로만 제공된다는 점을 기억하세요.
아두이노 UNO R4 코드
이 Arduino UNO R4 코드는 다음과 같은 작업을 수행합니다:
MQTT 브로커에 연결
토픽 구독
구독한 동일한 토픽에 정기적으로 메시지 전송
/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-mqtt */#include <WiFiS3.h>#include <MQTTClient.h>#include <ArduinoJson.h>constchar WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSIDconstchar WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORDconstchar MQTT_BROKER_ADRRESS[] = "test.mosquitto.org"; // CHANGE TO MQTT BROKER'S ADDRESSconstint MQTT_PORT = 1883;constchar MQTT_CLIENT_ID[] = "YOUR-NAME-arduino-uno-r4"; // CHANGE IT AS YOU DESIREconstchar MQTT_USERNAME[] = ""; // CHANGE IT IF REQUIRED, empty if not requiredconstchar MQTT_PASSWORD[] = ""; // CHANGE IT IF REQUIRED, empty if not required// The MQTT topics that Arduino should publish/subscribeconstchar PUBLISH_TOPIC[] = "YOUR-NAME-arduino-uno-r4/loopback"; // CHANGE IT AS YOU DESIREconstchar SUBSCRIBE_TOPIC[] = "YOUR-NAME-arduino-uno-r4/loopback"; // CHANGE IT AS YOU DESIREconstint PUBLISH_INTERVAL = 5000; // 5 secondsWiFiClient network;MQTTClientmqtt = MQTTClient(256);unsignedlong lastPublishTime = 0;voidsetup() {Serial.begin(9600);intstatus = WL_IDLE_STATUS;while (status != WL_CONNECTED) {Serial.print("Arduino UNO R4 - Attempting to connect to SSID: ");Serial.println(WIFI_SSID);// Connect to WPA/WPA2 network. Change this line if using open or WEP network:status = WiFi.begin(WIFI_SSID, WIFI_PASSWORD);// wait 5 seconds for connection:delay(5000); }// print your board's IP address:Serial.print("IP Address: ");Serial.println(WiFi.localIP()); connectToMQTT();}voidloop() {mqtt.loop();if (millis() - lastPublishTime > PUBLISH_INTERVAL) { sendToMQTT(); lastPublishTime = millis(); }}void connectToMQTT() {// Connect to the MQTT brokermqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network);// Create a handler for incoming messagesmqtt.onMessage(messageHandler);Serial.print("Arduino UNO R4 - Connecting to MQTT broker");while (!mqtt.connect(MQTT_CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) {Serial.print(".");delay(100); }Serial.println();if (!mqtt.connected()) {Serial.println("Arduino UNO R4 - MQTT broker Timeout!");return; }// Subscribe to a topic, the incoming messages are processed by messageHandler() functionif (mqtt.subscribe(SUBSCRIBE_TOPIC))Serial.print("Arduino UNO R4 - Subscribed to the topic: ");elseSerial.print("Arduino UNO R4 - Failed to subscribe to the topic: ");Serial.println(SUBSCRIBE_TOPIC);Serial.println("Arduino UNO R4 - MQTT broker Connected!");}void sendToMQTT() { StaticJsonDocument<200> message; message["timestamp"] = millis(); message["data"] = analogRead(0); // Or you can read data from other sensorschar messageBuffer[512]; serializeJson(message, messageBuffer);mqtt.publish(PUBLISH_TOPIC, messageBuffer);Serial.println("Arduino UNO R4 - sent to MQTT:");Serial.print("- topic: ");Serial.println(PUBLISH_TOPIC);Serial.print("- payload:");Serial.println(messageBuffer);}void messageHandler(String &topic, String &payload) {Serial.println("Arduino UNO R4 - received from MQTT:");Serial.println("- topic: " + topic);Serial.println("- payload:");Serial.println(payload);}
적절한 Arduino Uno R4 보드(예: Arduino Uno R4 WiFi)와 COM 포트를 선택합니다.
Arduino IDE 왼쪽에 있는 "라이브러리 매니저" 아이콘을 클릭하여 엽니다.
검색 상자에 MQTT를 입력하고 Joel Gaehwiler의 MQTT 라이브러리를 검색합니다.
Install 버튼을 클릭하여 MQTT 라이브러리를 추가합니다.
검색 상자에 ArduinoJson을 입력하고 Benoit Blanchon의 ArduinoJson 라이브러리를 찾습니다. 그런 다음, Install 버튼을 클릭하여 라이브러리를 설치하세요.
코드를 복사하여 Arduino IDE에서 엽니다.
코드에서 WiFi 세부 정보(SSID 및 비밀번호)를 본인의 것으로 변경하세요.
코드에서 'YOUR-NAME'을 세 번 찾게 됩니다. 이를 자신의 이름이나 문자(공백 없이)로 변경하세요. 이 변경은 동일 코드를 실행하는 여러 사용자로 인한 충돌을 방지하기 위해 중요합니다.
Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino UNO R4에 업로드하세요.
시리얼 모니터를 엽니다.
시리얼 모니터에서 결과를 확인하세요.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
IP Address: 192.168.0.2
Arduino UNO R4 - Connecting to MQTT broker
Arduino UNO R4 - Subscribed to the topic: YOUR-NAME-arduino-uno-r4/loopback
Arduino UNO R4 - MQTT broker Connected!
Arduino UNO R4 - sent to MQTT:
- topic: YOUR-NAME-arduino-uno-r4/loopback
- payload:{"timestamp":11757,"data":255}
Arduino UNO R4 - received from MQTT:
- topic: YOUR-NAME-arduino-uno-r4/loopback
- payload:
{"timestamp":11757,"data":255}
Arduino UNO R4 - sent to MQTT:
- topic: YOUR-NAME-arduino-uno-r4/loopback
- payload:{"timestamp":16896,"data":259}
Arduino UNO R4 - received from MQTT:
- topic: YOUR-NAME-arduino-uno-r4/loopback
- payload:
{"timestamp":16896,"data":259}
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
Arduino UNO R4는 MQTT 브로커에게 메시지를 보낸 후 동일한 메시지를 다시 받습니다. 이는 메시지를 보낸 주제로부터 메시지를 수신하도록 설정되어 있기 때문입니다. Arduino UNO R4가 자신의 메시지를 수신하지 않도록 하려면 전송 및 수신에 다른 주제를 사용하면 됩니다.
C: 드라이브가 아니라 D: 드라이브에 설치하세요. 이는 가능한 문제를 피하는 데 도움이 됩니다.
모스키토 MQTT 브로커 실행
이제 다음 단계들을 통해 MQTT 브로커가 제대로 작동하는지 확인해 봅시다:
Mosquitto를 설치한 폴더로 이동합니다. 예를 들어 D:\Draft\mosquitto와 같이 이동합니다. test.conf라는 파일을 만들고, 다음 세부 사항을 그 파일에 붙여넣은 후, 이 폴더에 파일을 저장합니다.
listener 1883
allow_anonymous true
컴퓨터에서 명령 프롬프트를 관리자 권한으로 엽니다. 이를 "브로커 창"이라고 부릅니다. 튜토리얼을 완료할 때까지 이 창을 닫지 않도록 주의하세요.
다음 명령어들을 순서대로 실행하십시오:
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.11 -p 1883 -t arduino-uno-r4/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.11 -p 1883 -t arduino-uno-r4/send
Hello, MQTT!
당신의 PC에 Mosquitto MQTT 브로커를 성공적으로 설치했습니다. 브로커 창, 구독자 창, 그리고 발행자 창 세 창을 닫지 마십시오. 우리는 다음에 그것들을 사용할 것입니다.
아두이노 UNO R4 코드
다음 코드는 Arduino UNO R4용이며 다음 작업을 수행합니다:
MQTT 브로커에 연결
주제에 구독
다른 주제로 정기적으로 메시지 전송
/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-mqtt */#include <WiFiS3.h>#include <MQTTClient.h>#include <ArduinoJson.h>constchar WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSIDconstchar WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD//const char MQTT_BROKER_ADRRESS[] = "test.mosquitto.org"; // CHANGE TO MQTT BROKER'S ADDRESSconstchar MQTT_BROKER_ADRRESS[] = "192.168.0.11"; // CHANGE TO MQTT BROKER'S IP ADDRESSconstint MQTT_PORT = 1883;constchar MQTT_CLIENT_ID[] = "arduino-uno-r4"; // CHANGE IT AS YOU DESIREconstchar MQTT_USERNAME[] = ""; // CHANGE IT IF REQUIRED, empty if not requiredconstchar MQTT_PASSWORD[] = ""; // CHANGE IT IF REQUIRED, empty if not required// The MQTT topics that Arduino should publish/subscribeconstchar PUBLISH_TOPIC[] = "arduino-uno-r4/send"; // CHANGE IT AS YOU DESIREconstchar SUBSCRIBE_TOPIC[] = "arduino-uno-r4/receive"; // CHANGE IT AS YOU DESIREconstint PUBLISH_INTERVAL = 5000; // 5 secondsWiFiClient network;MQTTClientmqtt = MQTTClient(256);unsignedlong lastPublishTime = 0;voidsetup() {Serial.begin(9600);intstatus = WL_IDLE_STATUS;while (status != WL_CONNECTED) {Serial.print("Arduino UNO R4 - Attempting to connect to SSID: ");Serial.println(WIFI_SSID);// Connect to WPA/WPA2 network. Change this line if using open or WEP network:status = WiFi.begin(WIFI_SSID, WIFI_PASSWORD);// wait 10 seconds for connection:delay(10000); }// print your board's IP address:Serial.print("IP Address: ");Serial.println(WiFi.localIP()); connectToMQTT();}voidloop() {mqtt.loop();if (millis() - lastPublishTime > PUBLISH_INTERVAL) { sendToMQTT(); lastPublishTime = millis(); }}void connectToMQTT() {// Connect to the MQTT brokermqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network);// Create a handler for incoming messagesmqtt.onMessage(messageHandler);Serial.print("Arduino UNO R4 - Connecting to MQTT broker");while (!mqtt.connect(MQTT_CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) {Serial.print(".");delay(100); }Serial.println();if (!mqtt.connected()) {Serial.println("Arduino UNO R4 - MQTT broker Timeout!");return; }// Subscribe to a topic, the incoming messages are processed by messageHandler() functionif (mqtt.subscribe(SUBSCRIBE_TOPIC))Serial.print("Arduino UNO R4 - Subscribed to the topic: ");elseSerial.print("Arduino UNO R4 - Failed to subscribe to the topic: ");Serial.println(SUBSCRIBE_TOPIC);Serial.println("Arduino UNO R4 - MQTT broker Connected!");}void sendToMQTT() { StaticJsonDocument<200> message; message["timestamp"] = millis(); message["data"] = analogRead(0); // Or you can read data from other sensorschar messageBuffer[512]; serializeJson(message, messageBuffer);mqtt.publish(PUBLISH_TOPIC, messageBuffer);Serial.println("Arduino UNO R4 - sent to MQTT:");Serial.print("- topic: ");Serial.println(PUBLISH_TOPIC);Serial.print("- payload:");Serial.println(messageBuffer);}void messageHandler(String &topic, String &payload) {Serial.println("Arduino UNO R4 - received from MQTT:");Serial.println("- topic: " + topic);Serial.println("- payload:");Serial.println(payload);// You can process the incoming data as json object, then control something/* StaticJsonDocument<200> doc; deserializeJson(doc, payload); const char* message = doc["message"]; */}
자세한 사용 방법
위의 코드를 복사하여 Arduino IDE에서 엽니다.
코드에서 WiFi 세부 정보(SSID 및 비밀번호)를 본인 것으로 변경합니다.
코드에서 MQTT 브로커 주소(도메인 이름 또는 IP 주소)를 변경합니다.
Arduino IDE에서 Upload 버튼을 클릭하여 Arduino UNO R4에 코드를 전송합니다.
아두이노 UNO R4에서 MQTT를 통해 PC로 메시지 보내기
Arduino UNO R4는 arduino-uno-r4/send라는 MQTT 토픽에 정보를 보냅니다. 컴퓨터에서는 Subscriber Window가 해당 토픽을 구독하여 데이터를 수신합니다.
시리얼 모니터를 열어 아두이노 UNO R4가 주기적으로 토픽에 메시지를 보내는 것을 확인하세요.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
IP Address: 192.168.0.2
Arduino UNO R4 - Connecting to MQTT broker
Arduino UNO R4 - Subscribed to the topic: arduino-uno-r4/receive
Arduino UNO R4 - MQTT broker Connected!
Arduino UNO R4 - sent to MQTT:
- topic: arduino-uno-r4/send
- payload:{"timestamp":10708,"data":311}
Arduino UNO R4 - sent to MQTT:
- topic: arduino-uno-r4/send
- payload:{"timestamp":15837,"data":298}
Arduino UNO R4 - sent to MQTT:
- topic: arduino-uno-r4/send
- payload:{"timestamp":20965,"data":291}
Arduino UNO R4 - sent to MQTT:
- topic: arduino-uno-r4/send
- payload:{"timestamp":26094,"data":286}
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
구독자 창을 보면 Arduino UNO R4에서 보낸 메시지가 다음과 같이 표시되는 것을 알 수 있습니다.
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.11 -p 1883 -t arduino-uno-r4/send
Hello, MQTT!
{"timestamp":10708,"data":311}
{"timestamp":15837,"data":298}
{"timestamp":20965,"data":291}
{"timestamp":26094,"data":286}
PC에서 Arduino UNO R4로 메시지를 MQTT를 통해 보내기
Arduino UNO R4는 arduino-uno-r4/receive 주제로부터 메시지를 수신하도록 설정되어 있습니다. PC의 Publisher 창에서 Arduino UNO R4와 통신하기 위해 이 주제로 메시지를 보냅니다.
Arduino UNO R4가 구독한 주제에 메시지를 보내려면 출판자 창에서 이 명령을 사용하십시오: