/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-to-esp32-mqtt-communication */// ESP32 #1: 버튼/스위치에 연결되어 MQTT 퍼블리셔로 동작#include <WiFi.h>#include <MQTTClient.h>#include <ezButton.h>#define BUTTON_PIN 21 // ESP32 핀 GPIO21이 버튼에 연결됨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.26"; // 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("ESP32 #1: 버튼/스위치에 연결되어 MQTT 퍼블리셔로 동작");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();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("ESP32 - MQTT 브로커에 연결 중");while (!mqtt.connect(MQTT_CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) {Serial.print(".");delay(100); }Serial.println();if (!mqtt.connected()) {Serial.println("ESP32 - MQTT 브로커 연결 시간 초과!");return; }Serial.println("ESP32 - MQTT 브로커 연결됨!");}void sendToMQTT(charcommand) {char messageBuffer[1]; messageBuffer[0] = command;mqtt.publish(MQTT_TOPIC, messageBuffer);Serial.println("ESP32 - MQTT로 보냄:");Serial.print("- 토픽: ");Serial.println(MQTT_TOPIC);Serial.print("- 페이로드:");Serial.println(messageBuffer);}
ESP32 코드 #2
/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-to-esp32-mqtt-communication */// ESP32 #2: MQTT 구독자로 연결된 LED#include <WiFi.h>#include <MQTTClient.h>#define LED_PIN 18 // ESP32 핀 GPIO18이 LED에 연결됨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.26"; // MQTT 브로커의 IP 주소로 변경하세요constint MQTT_PORT = 1883;constchar MQTT_CLIENT_ID[] = "esp32-002"; // 원하는대로 변경하세요constchar MQTT_USERNAME[] = ""; // 필요한 경우 변경하세요, 필요 없으면 비워두세요constchar MQTT_PASSWORD[] = ""; // 필요한 경우 변경하세요, 필요 없으면 비워두세요// ESP32가 게시/구독해야하는 MQTT 주제constchar MQTT_TOPIC[] = "esp32/command"; // 원하는대로 변경하세요WiFiClient network;MQTTClientmqtt = MQTTClient(256);voidsetup() {Serial.begin(9600);pinMode(LED_PIN, OUTPUT);Serial.println("ESP32 #2: MQTT 구독자로 연결된 LED");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();}void connectToMQTT() {// MQTT 브로커에 연결mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network);// 들어오는 메시지를 위한 핸들러 생성mqtt.onMessage(messageReceived);Serial.print("ESP32 - MQTT 브로커에 연결 중");while (!mqtt.connect(MQTT_CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) {Serial.print(".");delay(100); }Serial.println();if (!mqtt.connected()) {Serial.println("ESP32 - MQTT 브로커 연결 시간 초과!");return; }// 주제를 구독하고, 들어오는 메시지는 messageReceived() 함수에서 처리if (mqtt.subscribe(MQTT_TOPIC))Serial.print("ESP32 - 주제 구독 성공: ");elseSerial.print("ESP32 - 주제 구독 실패: ");Serial.println(MQTT_TOPIC);Serial.println("ESP32 - MQTT 브로커 연결됨!");}void messageReceived(String &topic, String &payload) {Serial.println("ESP32 - MQTT로부터 수신됨:");Serial.println("- 주제: " + topic);Serial.print("- 페이로드: ");Serial.println(payload);charcommand = payload[0];if (command == '1') {Serial.print("- 수신된 명령: ");Serial.print(command);Serial.println(" => LED 켜짐");digitalWrite(LED_PIN, HIGH); // LED 켜기 } elseif (command == '0') {Serial.print("- 수신된 명령: ");Serial.print(command);Serial.println(" => LED 꺼짐");digitalWrite(LED_PIN, LOW); // LED 끄기 } else {Serial.print("- 지원되지 않는 명령 수신: ");Serial.println(command); }}
사용 방법
ESP32를 처음 사용하는 경우, Arduino IDE에서 ESP32 환경 설정 방법을 보려면 ESP32 - 소프트웨어 설치.
PC에서 Arduino IDE를 두 개 엽니다.
ESP32 #1에 버튼/스위치를 연결합니다.
ESP32 #2에 LED를 연결합니다.
Arduino IDE의 왼쪽 네비게이션 바에 있는 Library Manager 아이콘을 클릭하여 라이브러리 관리자를 엽니다.
검색 상자에 MQTT를 입력한 다음, Joel Gaehwiler의 MQTT 라이브러리를 찾습니다.
MQTT 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
검색 상자에 ezButton을 입력한 다음, ESP32GetStarted의 버튼 라이브러리를 찾으세요.
ezButton 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
올바른 ESP32 보드 선택하기 (예: ESP32 Dev 모듈).
ESP32 #1을 USB 케이블을 통해 PC에 연결하고 Arduino IDE #1에서 ESP32 #1의 COM 포트를 선택하기
ESP32 #2를 USB 케이블을 통해 PC에 연결하고 Arduino IDE #2에서 ESP32 #2의 COM 포트를 선택하기
ESP32 #1 코드를 복사하여 Arduino IDE #1에 붙여넣고 저장하기 (이름: ESP32-1)
ESP32 #2 코드를 복사하여 Arduino IDE #2에 붙여넣고 저장하기 (이름: ESP32-2)
둘 다 코드에서 WiFi 정보(SSID 및 비밀번호)를 자신의 것으로 교체하기
둘 다 코드에서 MQTT 브로커 주소(도메인 이름 또는 IP 주소) 교체하기
ESP32 #1 코드를 ESP32 #1에 업로드하기
ESP32 #2 코드를 ESP32 #2에 업로드하기
Arduino IDE #1에서 시리얼 모니터 열기
Arduino IDE #2에서 시리얼 모니터 열기
ESP32 #1의 버튼을 누르고 있기 → ESP32 #2의 LED 상태 확인하기 (켜짐)
ESP32 #1의 버튼을 놓기 → ESP32 #2의 LED 상태 확인하기 (꺼짐)
버튼을 여러 번 누르고, 누르고 있었다가 놓기
두 Arduino IDE의 시리얼 모니터에서 출력 확인하기
ESP32 #1의 시리얼 모니터
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 #1: CONNECTED TO A BUTTON/SWITCH, ACTED AS A MQTT PUBLISHER
ESP32 - Attempting to connect to SSID: YOUR_WIFI_SSID
ESP32 - Connecting to MQTT broker
ESP32 - MQTT broker Connected!
- The button is pressed, send command: 1
ESP32 - sent to MQTT:
- topic: esp32/command
- payload:1
- The button is released, send command: 0
ESP32 - sent to MQTT:
- topic: esp32/command
- payload:0
Ln 11, Col 1
ESP32 Dev Module on COM15
2
ESP32 #2의 시리얼 모니터
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 #2: CONNECTED TO A LED, ACTED AS A MQTT SUBSCRIBER
ESP32 - Attempting to connect to SSID: YOUR_WIFI_SSID
ESP32 - Connecting to MQTT broker
ESP32 - Subscribed to the topic: esp32/command
ESP32 - MQTT broker Connected!
ESP32 - received from MQTT:
- topic: esp32/command
- payload: 1
- Received command: 1 => Turned LED on
ESP32 - received from MQTT:
- topic: esp32/command
- payload: 0
- Received command: 0 => Turned LED off