Linux esp8266 driver c source code - TCP Server

 임베디드 리눅스 환경에서 user mode에서 동작하는 esp8266 드라이버를 만드는 중이다. 이전 포스트에서 smartconfig와 client 모드에서의 TCP, UDP 연결에 대해 알아보고 구현했다. 

linux용 esp8266 드라이버 c source code - smartconfig
Linux esp8266 driver c source code - client TCP, UDP

이번 포스트에서는 TCP server 기능을 구현하고 예제를 통해 동작을 확인했다.



ESP8266 TCP 서버 모드

ESP8266에서는 간단하게 AT+CIPSERVER 커맨드를 사용해 TCP 서버를 만들 수 있다.

AT+CIPSERVER=<mode>[,<port>]

파라메터

  • <mode> : 0 이면 서버 종료, 1 이면 서버 생성
  • <port> : 포트 번호, 디폴트 값은 333이다.

원격 클라이언트에서 서버로 연결되면 ESP8266는 CONNECT 메세지를 보내온다. 

서버를 반드시 multiple connection모드인 상태에서 사용해야 한다.  multiple connection모드는 AT+CIPMUX=1 커맨드를 사용하여 설정할 수 있다.



클라이언트 연결 닫기

서버에 연결된 클라이언트는 아래 AT 커맨드를 사용해 연결을 끊을 수 있다.

AT+CIPCLOSE=<link ID>



데이터 읽고 쓰기

연결된 클라이언트와 데이터를 주고, 받는 방법은 Linux esp8266 driver c source code - client TCP, UDP 포스트의 데이터 전송과 데이터 읽기의 방식을 그대로 사용하면 된다. 



ESP8266 Driver C Source

esp8266.tcpserver.h
esp8266.tcpserver.c



TCP 서버 예제

TCP 서버 예제 소스는 아래와 같다. 서버 테스트는 이전 포스트에서 python socket API 와 non-blocking socket server client example code의 ping/pong 서버/클라이언트의 모델을 사용하였다.

esp8266 드라이버를 초기화하고 WIFI AP에 연결되면 test_server를 호출한다.


TCP 서버를 실행하고, 'ping' 메세지가 전송되면, 연결된 클라이언트로 'pong'메시지를 전송한다. 


이벤트 callback 함수를 두어 클라이언트와 연결되면 호출되도록 했다.


실행 결과

서버 실행 로그


클라이언트 실행 로그


관련 글

Linux esp8266 driver c source code - AP 모드로 softAP


댓글

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

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

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

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

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