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)를 통해 윈도우 화면 미러링 방법

쉽게 설명한 파티클 필터(particle filter) 동작 원리와 예제

딥러닝을 사용한 로또 번호 예측 실험

바로 프로젝트 적용 가능한 FIR Filter (low/high/band pass filter )를 c나 python으로 만들기