Linux esp8266 driver c source code - client TCP, UDP
리눅스 환경에서 esp8266 드라이버를 만드는 중이다. 이전 포스트에서 smartconfig 기능까지 구현했었다.
linux용 esp8266 드라이버 c source code - smartconfig
본 포스트에서는 client 모드로 TCP/UDP 통신 기능을 구현하고 예제를 통해 동작을 확인했다.
SSL의 경우 esp8266에서는 지원한다고 되어있으나, 동작하지 않는 사이트가 많아 제외했다.
esp8266 single/multiple connection mode
아래 명령어를 사용해 single/multiple 연결 모드를 설정할 수 있다.
Single Connection
AT+CIPMUX= 0
multiple Connection
AT+CIPMUX=1
Multiple Connection 모드인 경우 TCP/UDP 연결 command 및 데이터 메세지에 <link ID>가 붙어 어떤 link를 사용할지 구분할 수 있다.
esp8266에서는 0~4까지의 link ID를 지원한다.
esp8266 TCP/UPD 연결
Single Connection
AT+CIPSTART=<type>,<remote IP>,<remote port>[,<TCP keep alive>]
Multiple Connections
AT+CIPSTART=<link ID>,<type>,<remote IP>,<remote port>[,<TCP keep alive>]
파라미터
- <type> : "TCP","UDP"
- <remote IP> : 연결하고자 하는 IP 주소 문자열이나 주소 문자열
- <remote port> : 포트 번호
- <TCP keep alive> : 옵션, TCP 패킷 alive 시간(초) 설정
응답 메시지
- OK
- ERROR
- ALREADY CONNECTED
esp8266 TCP/UDP 연결 닫기
Single Connection
AT+CIPCLOSE
Multiple Connections
AT+CIPCLOSE=<link ID>
esp8266 TCP/UPD 데이터 전송
Single Connection
AT+CIPSEND=<len>
Multiple Connections
AT+CIPSEND=<link ID>,<len>
데이터 전송의 경우 위 커맨드를 사용하여 전송할 데이터의 양을 알려준 후 esp8266에서 OK 메세지가 오면 그 다음 전송할 데이터를 esp8266에 쓰면 된다.
esp8266 TCP/UPD 데이터 읽기
연결된 peer 측에서 보내오는 데이터는 아래와 같은 형식으로 esp8266으로부터 전달된다.
Single Connection
+IPD,<len>[,<remote IP>,<remote port>]:<data>
Multiple Connections
+IPD,<link ID>,<len>[,<remote IP>,<remote port>]:<data>
<remote IP>와 <remote port>는 AT+CIPDINFO 커맨드를 통해 표시 여부를 설정할 수 있다. AT+CIPDINFO=1으로 하면 <remote IP>와 <remote port>정보를 함께 전달 받을 수 있다.
esp8266 driver source
esp8266.tcpudp.h
esp8266.tcpudp.c
소스는 smartconfig 기능과 client 모드에서 TCP/UDP 통신 기능까지 구현되어 있다.
TCP/UDP 통신 예제
통신 예제 소스는 아래와 같다.
WIFI 연결이 완료되면, UDP/TCP 통신을 테스트했다.
UDP 통신 테스트
UDP 통신 테스트는 NTP서버로부터 시간을 받아오는 예제를 사용했다.
실행 결과는 아래와 같다. NTP 서버와 통신하여 시간을 받아오는 것을 볼 수 있다.
TCP 통신 테스트
TCP 통신 테스트는 이전 포스트에서 python으로 만든 ping/pong 서버를 사용했다.
![]() |
실행 결과는 아래와 같다.
서버측 실행 로그는 아래와 같다.
테스트에서는 TCP통신이 잘 이루어지는 것을 볼 수 있다.
관련 글
NTP 타임서버 시간 확인 및 시간 동기화 예제 소스
python socket API 와 non-blocking socket server client example code
Linux esp8266 driver c source code - TCP Server
Linux esp8266 driver c source code - AP 모드로 softAP
댓글
댓글 쓰기