두 개의 ESP8266 보드는 MQTT 서버를 사용하여 서로 통신할 수 있습니다. MQTT 서버에 의존하지 않고 두 ESP8266 간의 직접 통신을 선호하는 경우 [ESP8266에서 ESP8266로의 TCP 클라이언트/서버 통신]에 대한 자습서를 확인해 주세요(BASE_URL/tutorials/esp8266/communication-between-two-esp8266).
ESP8266 #1과 ESP8266 #2가 MQTT 브로커를 통해 데이터를 교환할 때:
두 ESP8266 모두 MQTT 브로커에 연결합니다.
ESP8266 #2가 ESP8266 #1에 데이터를 보내게 하려면:
ESP8266 #1은 esp8266-1/data와 같은 토픽을 구독합니다.
ESP8266 #2는 ESP8266 #1이 구독한 토픽에 게시함으로써 ESP8266 #1에 데이터를 전송할 수 있습니다.
마찬가지로, ESP8266 #1이 ESP8266 #2에 데이터를 보낼 수 있게 하려면:
ESP8266 #2은 esp8266-2/data와 같은 토픽을 구독합니다.
ESP8266 #1은 ESP8266 #2가 구독한 토픽에 게시함으로써 ESP8266 #2에 데이터를 보낼 수 있습니다.
이 접근법을 따르면, 두 ESP8266이 데이터를 양방향으로 교환할 수 있습니다.
예시 사용 사례
다음 응용 프로그램을 실현합시다: ESP8266 #1에 연결된 버튼/스위치가 MQTT를 통해 ESP8266 #2에 연결된 LED를 제어합니다.
위에서 언급한 것처럼, 우리가 사용할 수 있는 몇 가지 애플리케이션 프로토콜이 있습니다. 이 예에서, 단순화하기 위해, 우리 스스로 프로토콜을 정의할 것입니다 (자체 정의된 프로토콜).
작동 원리
간단한 프로토콜을 정의해봅시다:
ESP8266 #1과 ESP8266 #2가 MQTT 브로커(MQTT 서버)에 연결됩니다.
ESP8266 #1에 대하여:
스위치의 상태가 바뀔 때마다 ESP8266 #1은 특정 토픽에 MQTT 메시지를 발행합니다.
버튼/스위치가 켜질 때, MQTT 메시지 페이로드는 1로 설정됩니다.
버튼/스위치가 꺼질 때, MQTT 메시지 페이로드는 0으로 설정됩니다.
ESP8266 #2에 대하여:
ESP8266 #2는 같은 토픽을 구독합니다.
만약 ESP8266 #2가 페이로드가 1인 MQTT 메시지를 받으면, LED를 활성화합니다.
만약 ESP8266 #2가 페이로드가 0인 MQTT 메시지를 받으면, LED를 비활성화합니다.
올바른 ESP8266 보드를 선택하세요(예: NodeMCU 1.0 (ESP-12E Module)) 및 해당 COM 포트.
ESP8266 #1에 버튼/스위치를 연결하세요.
ESP8266 #2에 LED를 연결하세요.
Arduino IDE(아두이노 IDE #1이라고 함)를 엽니다.
PC에서 Arduino IDE 아이콘을 클릭하는 것으로 또 다른 Arduino IDE 창(아두이노 IDE #2라고 함)을 엽니다(중요!()).
Arduino IDE 왼쪽 탐색 바에서 Library Manager 아이콘을 클릭하여 라이브러리 관리자를 엽니다.
검색 상자에 MQTT를 입력한 다음, Joel Gaehwiler의 MQTT 라이브러리를 찾습니다.
Install 버튼을 클릭하여 MQTT 라이브러리를 설치하세요.
검색 상자에 ezButton을 입력한 다음, ESP8266GetStarted에서 제작된 버튼 라이브러리를 찾으세요.
ezButton 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
ESP8266 #1을 PC에 USB 케이블로 연결하고 Arduino IDE #1에서 ESP8266 #1의 COM 포트를 선택합니다.
ESP8266 #2를 PC에 USB 케이블로 연결하고 Arduino IDE #2에서 ESP8266 #2의 COM 포트를 선택합니다.
ESP8266 #1 코드를 복사하여 Arduino IDE #1에 붙여넣고 저장합니다(이름은 ESP8266-1).
ESP8266 #2 코드를 복사하여 Arduino IDE #2에 붙여넣고 저장합니다(이름은 ESP8266-2).
두 코드 모두에서 WiFi 정보(SSID 및 비밀번호)를 귀하의 것으로 바꿉니다.
두 코드 모두에서 MQTT 브로커 주소를 변경합니다(도메인 이름 또는 IP 주소).
ESP8266 #1 코드를 ESP8266 #1에 업로드합니다.
ESP8266 #2 코드를 ESP8266 #2에 업로드합니다.
Arduino IDE #1에서 시리얼 모니터를 엽니다.
Arduino IDE #2에서 시리얼 모니터를 엽니다.
ESP8266 #1의 버튼을 누르고 있습니다 → ESP8266 #2의 LED 상태를 확인하세요(켜짐).
ESP8266 #1의 버튼을 놓습니다 → ESP8266 #2의 LED 상태를 확인하세요(꺼짐).
버튼을 여러 번 누르고, 누르고 있었다가 놓습니다.
두 시리얼 모니터의 출력을 확인하세요.
ESP8266 #1의 시리얼 모니터
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
ESP8266 #1: CONNECTED TO A BUTTON/SWITCH, ACTED AS A MQTT PUBLISHER
ESP8266 - Attempting to connect to SSID: YOUR_WIFI_SSID
ESP8266 - Connecting to MQTT broker
ESP8266 - MQTT broker Connected!
- The button is pressed, send command: 1
ESP8266 - sent to MQTT:
- topic: esp8266/command
- payload:1
- The button is released, send command: 0
ESP8266 - sent to MQTT:
- topic: esp8266/command
- payload:0
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2
ESP8266 #2의 시리얼 모니터
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
ESP8266 #2: CONNECTED TO A LED, ACTED AS A MQTT SUBSCRIBER
ESP8266 - Attempting to connect to SSID: YOUR_WIFI_SSID
ESP8266 - Connecting to MQTT broker
ESP8266 - Subscribed to the topic: esp8266/command
ESP8266 - MQTT broker Connected!
ESP8266 - received from MQTT:
- topic: esp8266/command
- payload: 1
- Received command: 1 => Turned LED on
ESP8266 - received from MQTT:
- topic: esp8266/command
- payload: 0
- Received command: 0 => Turned LED off