두 개의 Arduino Nano ESP32 보드는 MQTT 서버를 사용하여 서로 통신할 수 있습니다. MQTT 서버를 사용하지 않고 직접 통신하길 원한다면, [Arduino Nano ESP32에서 Arduino Nano ESP32까지 TCP 클라이언트/서버 통신]에 관한 튜토리얼을 참조하십시오(BASE_URL/tutorials/arduino-nano-esp32/communication-between-two-arduino-nano-esp32).
Arduino Nano ESP32 #1과 Arduino Nano ESP32 #2가 MQTT 브로커를 통해 데이터를 교환할 때:
/* * 이 아두이노 나노 esp32 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 esp32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/communication-between-two-arduino-nano-esp32-via-mqtt */// ESP32 #1: 버튼/스위치에 연결, MQTT 발행자로 동작#include <WiFi.h>#include <MQTTClient.h>#include <ezButton.h>#define BUTTON_PIN D2 // 아두이노 나노 ESP32 핀이 버튼에 연결됨constchar WIFI_SSID[] = "YOUR_WIFI_SSID"; // WIFI SSID로 변경하세요constchar WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // WIFI 비밀번호로 변경하세요constchar MQTT_BROKER_ADRRESS[] = "test.mosquitto.org"; // MQTT 브로커의 주소로 변경하세요//const char MQTT_BROKER_ADRRESS[] = "192.168.0.5"; // MQTT 브로커의 IP 주소로 변경하세요constint MQTT_PORT = 1883;constchar MQTT_CLIENT_ID[] = "esp32-001"; // 원하는 대로 변경하세요constchar MQTT_USERNAME[] = ""; // 필요하다면 변경하세요, 필요 없으면 비워두세요constchar MQTT_PASSWORD[] = ""; // 필요하다면 변경하세요, 필요 없으면 비워두세요// ESP32가 발행/구독해야 하는 MQTT 토픽constchar MQTT_TOPIC[] = "esp32/command"; // 원하는 대로 변경하세요WiFiClient network;MQTTClientmqtt = MQTTClient(256);ezButtonbutton(BUTTON_PIN); // 핀 7에 연결된 ezButton 생성voidsetup() {Serial.begin(9600);button.setDebounceTime(100); // 디바운스 시간을 100밀리초로 설정Serial.println("Arduino Nano ESP32 #1: 버튼/스위치에 연결, MQTT 발행자로 동작");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();}voidloop() {mqtt.loop();button.loop(); // loop() 함수를 먼저 호출해야 함if (button.isPressed()) {Serial.println("- 버튼이 눌렸습니다, 명령 보내기: 1"); sendToMQTT('1'); }if (button.isReleased()) {Serial.println("- 버튼이 놓였습니다, 명령 보내기: 0"); sendToMQTT('0'); }}void connectToMQTT() {// MQTT 브로커에 연결mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network);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; }Serial.println("Arduino Nano ESP32 - MQTT 브로커에 연결됨!");}void sendToMQTT(charcommand) {char messageBuffer[1]; messageBuffer[0] = command;mqtt.publish(MQTT_TOPIC, messageBuffer);Serial.println("Arduino Nano ESP32 - MQTT에 보냈습니다:");Serial.print("- 토픽: ");Serial.println(MQTT_TOPIC);Serial.print("- 페이로드:");Serial.println(messageBuffer);}
아두이노 나노 ESP32 코드 #2
/* * 이 아두이노 나노 esp32 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 esp32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/communication-between-two-arduino-nano-esp32-via-mqtt */// ESP32 #2: LED에 연결되어 MQTT 구독자로 동작합니다.#include <WiFi.h>#include <MQTTClient.h>#define LED_PIN D5 // The Arduino Nano ESP32 pin connected to LEDconstchar 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 ADDRESS//const char MQTT_BROKER_ADRRESS[] = "192.168.0.5"; // CHANGE TO MQTT BROKER'S IP ADDRESSconstint MQTT_PORT = 1883;constchar MQTT_CLIENT_ID[] = "esp32-002"; // 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 ESP32 should publish/subscribeconstchar MQTT_TOPIC[] = "esp32/command"; // CHANGE IT AS YOU DESIREWiFiClient network;MQTTClientmqtt = MQTTClient(256);voidsetup() {Serial.begin(9600);pinMode(LED_PIN, OUTPUT);Serial.println("Arduino Nano ESP32 #2: LED에 연결되어 MQTT 구독자로 동작합니다.");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();}voidloop() {mqtt.loop();}void connectToMQTT() {// MQTT 브로커에 연결합니다.mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network);// 들어오는 메시지를 처리할 핸들러를 생성합니다.mqtt.onMessage(messageReceived);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; }// 주제를 구독하고, 들어오는 메시지는 messageReceived() 함수에서 처리됩니다.if (mqtt.subscribe(MQTT_TOPIC))Serial.print("Arduino Nano ESP32 - 주제를 구독했습니다: ");elseSerial.print("Arduino Nano ESP32 - 주제 구독에 실패했습니다: ");Serial.println(MQTT_TOPIC);Serial.println("Arduino Nano ESP32 - MQTT 브로커에 연결되었습니다!");}void messageReceived(String &topic, String &payload) {Serial.println("Arduino Nano ESP32 - MQTT에서 메시지를 받았습니다:");Serial.println("- topic: " + topic);Serial.print("- payload: ");Serial.println(payload);charcommand = payload[0];if (command == '1') {Serial.print("- Received command: ");Serial.print(command);Serial.println(" => LED를 켭니다.");digitalWrite(LED_PIN, HIGH); // Turn LED on } elseif (command == '0') {Serial.print("- Received command: ");Serial.print(command);Serial.println(" => LED를 끕니다.");digitalWrite(LED_PIN, LOW); // Turn LED off } else {Serial.print("- 받은 명령어를 지원하지 않습니다: ");Serial.println(command); }}
사용 방법
Arduino Nano ESP32를 시작하려면 다음 단계를 따르세요:
Arduino Nano ESP32에 익숙하지 않다면, Arduino IDE에서 Arduino Nano ESP32 환경을 설정하는 방법에 대한 튜토리얼을 참조하세요. 아두이노 나노 ESP32 - 소프트웨어 설치
제공된 다이어그램에 따라 구성 요소를 연결하세요.
USB 케이블을 사용하여 Arduino Nano ESP32 보드를 컴퓨터에 연결하세요.
컴퓨터에서 Arduino IDE를 실행하세요.
Arduino Nano ESP32 보드와 해당하는 COM 포트를 선택하세요.
버튼/스위치를 Arduino Nano ESP32 #1에 연결하세요.
LED를 Arduino Nano ESP32 #2에 연결하세요.
Arduino IDE(이를 Arduino IDE #1이라고 합니다)를 열어주세요.
PC에서 Arduino IDE 아이콘을 클릭하여 또 다른 Arduino IDE 창을 엽니다(이를 Arduino IDE #2라고 합니다)(중요!())
Arduino IDE의 왼쪽 탐색 바에 있는 Library Manager 아이콘을 클릭하여 라이브러리 관리자를 엽니다.
검색 상자에 MQTT를 입력한 다음, Joel Gaehwiler가 개발한 MQTT 라이브러리를 찾아보세요.
MQTT 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
검색 상자에 ezButton을 입력한 다음, Arduino Nano ESP32GetStarted의 버튼 라이브러리를 찾으세요.
ezButton 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
아두이노 나노 ESP32 #1을 USB 케이블을 통해 PC에 연결하고 아두이노 IDE #1에서 아두이노 나노 ESP32 #1의 COM 포트를 선택하세요.
아두이노 나노 ESP32 #2을 USB 케이블을 통해 PC에 연결하고 아두이노 IDE #2에서 아두이노 나노 ESP32 #2의 COM 포트를 선택하세요.
아두이노 나노 ESP32 #1 코드를 복사하여 아두이노 IDE #1에 붙여넣고 저장하세요(이름은 아두이노 나노 ESP32-1으로 지정).
아두이노 나노 ESP32 #2 코드를 복사하여 아두이노 IDE #2에 붙여넣고 저장하세요(이름은 아두이노 나노 ESP32-2으로 지정).
두 코드의 WiFi 정보(SSID와 비밀번호)를 자신의 것으로 교체하세요.
두 코드의 MQTT 브로커 주소(도메인 이름 또는 IP 주소)를 교체하세요.
아두이노 나노 ESP32 #1 코드를 아두이노 나노 ESP32 #1에 업로드하세요.
아두이노 나노 ESP32 #2 코드를 아두이노 나노 ESP32 #2에 업로드하세요.
아두이노 IDE #1에서 시리얼 모니터를 열세요.
아두이노 IDE #2에서 시리얼 모니터를 열세요.
아두이노 나노 ESP32 #1의 버튼을 누르고 있으면 → 아두이노 나노 ESP32 #2의 LED 상태를 확인하세요(켜짐).
아두이노 나노 ESP32 #1의 버튼을 놓으면 → 아두이노 나노 ESP32 #2의 LED 상태를 확인하세요(꺼짐).
버튼을 여러 번 누르고, 누른 상태로 잡고, 놓으세요.
두 시리얼 모니터의 출력을 확인하세요.
아두이노 나노 ESP32 #1의 시리얼 모니터
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Arduino Nano ESP32 #1: CONNECTED TO A BUTTON/SWITCH, ACTED AS A MQTT PUBLISHER
Arduino Nano ESP32 - Attempting to connect to SSID: YOUR_WIFI_SSID
Arduino Nano ESP32 - Connecting to MQTT broker
Arduino Nano ESP32 - MQTT broker Connected!
- The button is pressed, send command: 1
Arduino Nano ESP32 - sent to MQTT:
- topic: arduino/command
- payload:1
- The button is released, send command: 0
Arduino Nano ESP32 - sent to MQTT:
- topic: arduino/command
- payload:0
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2
아두이노 나노 ESP32 #2의 시리얼 모니터
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Arduino Nano ESP32 #2: CONNECTED TO A LED, ACTED AS A MQTT SUBSCRIBER
Arduino Nano ESP32 - Attempting to connect to SSID: YOUR_WIFI_SSID
Arduino Nano ESP32 - Connecting to MQTT broker
Arduino Nano ESP32 - Subscribed to the topic: arduino/command
Arduino Nano ESP32 - MQTT broker Connected!
Arduino Nano ESP32 - received from MQTT:
- topic: arduino/command
- payload: 1
- Received command: 1 => Turned LED on
Arduino Nano ESP32 - received from MQTT:
- topic: arduino/command
- payload: 0
- Received command: 0 => Turned LED off