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

댓글

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

windows에서 간단하게 크롬캐스트(Chromecast)를 통해 윈도우 화면 미러링 방법

python ctypes LoadLibrary로 windows dll 로드 및 함수 호출 예제

아두이노(arduino) 심박센서 (heart rate sensor) 심박수 측정 example code

base64 인코딩 디코딩 예제 c 소스