두 아두이노 나노 ESP32 간의 통신 | Communication between two Arduino Nano ESP32
이 가이드는 두 개의 아두이노 나노 ESP32 장치 간에 TCP/IP를 통해 WiFi를 통한 연결을 설정하고 데이터를 교환하는 방법을 보여줍니다. 하나의 아두이노 나노 ESP32는 TCP 클라이언트로 기능하며 다른 하나는 TCP 서버로 작동합니다. 예를 들어 이 과정을 자세히 살펴봅시다:
- 첫 번째 Arduino Nano ESP32(Arduino Nano ESP32 #1로 지칭)는 버튼에 연결되어 있으며 TCP 클라이언트로 작동합니다.
- 두 번째 Arduino Nano ESP32(Arduino Nano ESP32 #2로 지칭)는 LED에 연결되어 있으며 TCP 서버로 작동합니다.
- 두 Arduino Nano ESP32 장치는 로컬 LAN이나 인터넷을 통해 서로 연결됩니다.
- Arduino Nano ESP32 #1의 버튼을 누르면 Arduino Nano ESP32 #2의 LED가 켜지도록 합니다.
준비물
2 | × | ESP-WROOM-32 Dev Module | 쿠팡 | Amazon | |
2 | × | Micro USB Cable | Amazon | |
1 | × | Push Button | 쿠팡 | Amazon | |
1 | × | LED | Amazon | |
1 | × | Breadboard | 쿠팡 | Amazon | |
1 | × | Jumper Wires | Amazon | |
1 | × | (Recommended) Screw Terminal Expansion Board for ESP32 | 쿠팡 | Amazon |
두 Arduino Nano ESP32 간의 통신 - 개요
"Arduino Nano ESP32 #1"과 "Arduino Nano ESP32 #2" 사이의 통신을 가능하게 하는 다양한 방법이 있습니다. 방법의 선택은 그들 사이의 거리에 따라 달라집니다. 몇 가지 옵션으로는:
Methods | Distance |
---|---|
SPI | very short |
I2C | very short |
UART (TTL) | very short |
UART (RS-232/485/422) | short |
Bluetooth | short |
LoRa | long |
WiFi | unlimited(*) |
※ NOTE THAT:
(*):
- 두 개의 Arduino Nano ESP32 장치가 인터넷에 연결되어 있으면, 통신 거리는 제한이 없습니다.
- 두 개의 Arduino Nano ESP32 장치가 인터넷에 연결되어 있지 않지만 동일한 LAN(Local Area Network)에 연결되어 있을 경우, 통신 거리는 LAN 네트워크 내로 제한됩니다.
이 튜토리얼은 두 개의 ESP32 사이의 통신을 위해 WiFi를 사용할 것입니다.
두 Arduino Nano ESP32 간의 WiFi를 통한 통신
다음 조건에서 두 개의 Arduino Nano ESP32 장치는 WiFi를 통해 통신을 수립할 수 있습니다:
- 두 Arduino Nano ESP32 장치가 동일한 LAN(로컬 영역 네트워크) 내에 있으면 인터넷에 연결할 필요 없이 서로 통신할 수 있습니다.
- 두 Arduino Nano ESP32 장치가 서로 다른 LAN 네트워크에 있을 경우, 통신을 원활하게 하기 위해 인터넷에 연결해야 합니다.
아두이노 나노 ESP32 장치 두 대 간 통신을 위한 두 가지 주요 방법이 있습니다:
직접 통신:
이 방법에서, 하나의 아두이노 나노 ESP32는 TCP 클라이언트로 작동하고 다른 하나는 TCP 서버로 사용됩니다. 그들은 WiFi를 통해 서로 직접 통신합니다.
중앙 집중 서버를 통한 간접적인 커뮤니케이션 (예: MQTT 서버):
아두이노 나노 ESP32 장치 둘 다 TCP 클라이언트로 작동하며 MQTT 서버와 같은 중앙 집중식 서버를 통해 간접적으로 통신합니다. 구현 세부 사항은 ESP32에서 아두이노 나노 ESP32로의 통신 via MQTT 튜토리얼을 참조하실 수 있습니다.
두 개의 Arduino Nano ESP32가 서로 통신하기 위해 사용하는 애플리케이션 프로토콜이 필요합니다. 예를 들어:
- 자체 정의 프로토콜(TCP 기반) (직접 통신에 사용됨)
- 모드버스 TCP (직접 통신에 사용됨)
- HTTP (직접 통신에 사용됨)
- 텔넷 (직접 통신에 사용됨)
- SSH (직접 통신에 사용됨)
- MQTT (서버를 통한 간접 통신에 사용됨)
예시 응용 프로그램
다음 애플리케이션을 구현합시다: 아두이노 나노 ESP32 #1에 연결된 버튼이나 스위치가 WiFi를 통해 아두이노 나노 ESP32 #2에 연결된 LED를 제어할 것입니다.
단순화하기 위해, 우리가 정의한 프로토콜(우리가 만든 것이지, 표준이 아닌)을 사용할 것입니다.
자체 정의 프로토콜
다음과 같이 단순한 프로토콜을 정의합니다:
- 아두이노 나노 ESP32 #1과 아두이노 나노 ESP32 #2 사이에 TCP 연결을 생성합니다.
- 아두이노 나노 ESP32 #1:
- TCP 클라이언트: 아두이노 나노 ESP32 #2에게 TCP 연결 요청을 적극적으로 합니다.
- 스위치의 상태가 켜짐으로 변경되면, 아두이노 나노 ESP32 #1은 아두이노 나노 ESP32 #2에게 1의 값으로 바이트(명령)를 보냅니다.
- 스위치의 상태가 꺼짐으로 변경되면, 아두이노 나노 ESP32 #1은 아두이노 나노 ESP32 #2에게 0의 값으로 바이트(명령)를 보냅니다.
- 아두이노 나노 ESP32 #2:
- TCP 서버: 아두이노 나노 ESP32 #1에서 온 TCP 연결 요청을 듣습니다. TCP 요청이 있으면, 이를 받아들이고 연결이 생성됩니다.
- 바이트를 받으면:
- 값이 1이면, LED를 켭니다.
- 값이 0이면, LED를 끕니다.
- 만약 이번이 처음으로 ESP32를 사용하는 경우, Arduino Nano ESP32용 환경 설정 방법을 참조하세요.
- 버튼/스위치를 Arduino Nano ESP32 #1에 연결하세요
- LED를 Arduino Nano ESP32 #2에 연결하세요
- Arduino IDE를 엽니다 (Arduino IDE #1이라고 함)
- Arduino IDE에 ezButton 라이브러리를 설치하세요
- USB 케이블을 이용해 Arduino Nano ESP32 #1을 PC에 연결하고 Arduino IDE #1에서 Arduino Nano ESP32 #1의 COM 포트를 선택하세요
- PC에서 Arduino IDE 아이콘을 클릭하여 다른 Arduino IDE 창을 엽니다 (Arduino IDE #2라고 함, 중요!(**))
- USB 케이블을 이용해 Arduino Nano ESP32 #2을 PC에 연결하고 Arduino IDE #2에서 Arduino Nano ESP32 #2의 COM 포트를 선택하세요
- Arduino Nano ESP32 #1 코드를 복사하여 Arduino IDE #1에 붙여넣고 저장하세요 (이름은 ESP321로 함)
- Arduino Nano ESP32 #2 코드를 복사하여 Arduino IDE #2에 붙여넣고 저장하세요 (이름은 ESP322로 함)
- 먼저 Arduino Nano ESP32 #2 코드를 Arduino Nano ESP32 #2에 업로드하세요
- Arduino IDE #2에서 시리얼 모니터를 열고 TCP 서버 IP 주소를 얻으세요
- 아두이노 나노 ESP32 #1 코드에서 TCP 서버 IP 주소 업데이트하기
- 아두이노 나노 ESP32 #1 코드를 아두이노 나노 ESP32 #1에 업로드하기
- 아두이노 IDE #1에서 시리얼 모니터 열기
- 아두이노 나노 ESP32 #1에 있는 버튼을 누르고 있기 → 아두이노 나노 ESP32 #2의 LED 상태 확인하기 (켜짐)
- 아두이노 나노 ESP32 #1의 버튼을 놓기 → 아두이노 나노 ESP32 #2의 LED 상태 확인하기 (꺼짐)
- 위 과정을 여러 번 반복하기.
- 두 시리얼 모니터의 출력 확인하기
- 아두이노 나노 ESP32 #1의 시리얼 모니터
- (**): "파일" → "새로 만들기" 또는 "열기"를 통해 Arduino IDE #2 창에서 Arduino IDE #2 창을 열 경우, 동일한 PC에서 두 개의 Arduino Nano ESP32에 대해 두 개의 시리얼 모니터를 동시에 열 수 없습니다.
- 이 자체 정의된 프로토콜에는 대안이 있습니다. 그것은 Modbus TCP입니다. Modbus 프로토콜은 표준화되었으며, 자체 정의된 프로토콜에 비해 많은 장점이 있습니다. Arduino Nano ESP32 - Modbus 튜토리얼에서 더 보십시오.
배선도
Arduino Nano ESP32 #1을 위한 배선도: TCP 클라이언트 + 버튼/스위치
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
아두이노 나노 ESP32 #2를 위한 배선도: TCP 서버 + LED
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
※ NOTE THAT:
내장된 저항기가 없는 경우 LED에는 저항기를 사용해야 합니다. 버튼과 LED에 대한 전용 튜토리얼이 있습니다. 다음에서 더 자세한 내용을 알아볼 수 있습니다:
Arduino Nano ESP32 용 코드 Arduino Nano ESP32 #1
아두이노 나노 ESP32 코드 아두이노 나노 ESP32 #2
사용 방법
아두이노 나노 ESP32 #2의 시리얼 모니터
※ NOTE THAT:
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.