Accepting incoming tcp connections on the esp8266 (trivial example)
I’ve been working on some code that accepts incoming connections on the esp8266, if your looking for a full HTTP server take a look at sprite_tm’s code. But these are my notes on accepting a TCP connection.
As with TCP transmissions, you register a bunch of callbacks which process connections. So the first step is to initialize the TCP system with your connect callback:
#include "ets_sys.h" #include "osapi.h" #include "os_type.h" static struct espconn httpconfig_conn; static esp_tcp httpconfig_tcp_conn; void ICACHE_FLASH_ATTR httpconfig_conn_init() { httpconfig_conn.type=ESPCONN_TCP; httpconfig_conn.state=ESPCONN_NONE; httpconfig_tcp_conn.local_port=80; httpconfig_conn.proto.tcp=&httpconfig_tcp_conn; espconn_regist_connectcb(&httpconfig_conn, httpconfig_connected_cb); espconn_accept(&httpconfig_conn); }
When a connection is received on the specified port, httpconfig_connected_cb will be called. In this function you can send data to the client, and register other functions to trigger when data is received/disconnect etc.
static void ICACHE_FLASH_ATTR httpconfig_recv_cb(void *arg, char *data, unsigned short len) { struct espconn *conn=(struct espconn *)arg; espconn_disconnect(conn); } static void ICACHE_FLASH_ATTR httpconfig_recon_cb(void *arg, sint8 err) { } static void ICACHE_FLASH_ATTR httpconfig_discon_cb(void *arg) { } static void ICACHE_FLASH_ATTR httpconfig_sent_cb(void *arg) { } static void ICACHE_FLASH_ATTR httpconfig_connected_cb(void *arg) { struct espconn *conn=arg; espconn_regist_recvcb (conn, httpconfig_recv_cb); espconn_regist_reconcb (conn, httpconfig_recon_cb); espconn_regist_disconcb(conn, httpconfig_discon_cb); espconn_regist_sentcb (conn, httpconfig_sent_cb); char *transmission = "OK\r\n\r\nOK!\n"; sint8 d = espconn_sent(conn,transmission,strlen(transmission)); }
I currently don’t fully understand what the reconnect callback does. If you know, please mail me.