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

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

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

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