上一篇讲了8266作为client与电脑进行TCP通信,今天我们接着讲一下8266作为server与电脑进行TCP通信。
首先,我们让8266连接上路由,路由会分配一个IP地址给8266.连接成功后,我们把8266配置成server模式,监听客户端的连接,当有client连接时,就可以和8266进行TCP通信了。
我画了张TCP通信的示意图,如下
注意,路由器分配给8266的IP要记录下来(通过串口打印出来),电脑的客户端是通过这个IP连接8266的。
那我们怎么通过程序获取8266的IP呢?查看编程指南,有获取IP的函数(wifi_get_ip_info)。如下图
下面我们讲一下esp8266配置成server模式的步骤:
初始化espconn参数(本地IP和端口号) |
注册连接成功回调函数和连接异常断开时的回调函数 |
监听TCP连接(espconn_accept函数) |
TCP连接成功后,注册接收数据的回调函数、发送数据成功回调函数、断开连接回调函数 |
也是4个步骤,下面我们看下编程指南中的TCP监听函数
这个函数也很简单,就是把设置好的espconn传进去就可以了。
下面我们就开始写程序
void ICACHE_FLASH_ATTR syp_TCP_server_init() {
struct ip_info info;
||获取8266的IP
wifi_get_ip_info(0x00, &info);
||TCP server端的业务主函数入口
syp_server_init( &info.ip, 9000);
}
void ICACHE_FLASH_ATTR syp_server_init(struct ip_addr *local_ip,int port){
LOCAL struct espconn esp_conn_syp;
||初始化espconn参数
esp_conn_syp.type=ESPCONN_TCP;
esp_conn_syp.state=ESPCONN_NONE;
esp_conn_syp.proto.tcp=(esp_tcp *)os_malloc(sizeof(esp_tcp));
os_memcpy(esp_conn_syp.proto.tcp->local_ip,local_ip,4);
esp_conn_syp.proto.tcp->local_port=port;
||注册连接成功回调函数和连接异常断开时的回调函数
espconn_regist_connectcb(&esp_conn_syp,server_listen_syp);
espconn_regist_reconcb(&esp_conn_syp,server_recon_syp);
||监听客户端连接
espconn_accept(&esp_conn_syp);
}
端口号设置为9000(可以修改,只要和客户端一致就可以)
客户端连接成功回调函数和连接异常断开时的回调函数如下:
void ICACHE_FLASH_ATTR server_listen_syp(void *arg) {
struct espconn *pespconn = arg;
||客户端连接成功后,注册回调函数
espconn_regist_recvcb(pespconn, server_recv_syp);
espconn_regist_sentcb(pespconn, server_sent_syp);
espconn_regist_disconcb(pespconn, server_discon_syp);
}
void ICACHE_FLASH_ATTR server_recon_syp(void *arg,sint8 err){
os_printf("连接错误,错误代码为:%d\r\n",err);
}
客户端连接成功后,接收数据的回调函数、发送数据成功回调函数、断开连接回调函数如下:
void ICACHE_FLASH_ATTR server_recv_syp(void *arg,
char *pdata,
unsigned short len){
os_printf("收到的数据:%s\r\n", pdata);
||发送数据
espconn_sent((struct espconn*)arg,"我是ESP8266,数据已收到\r\n",strlen("我是ESP8266,数据已收到\r\n"));
}
void ICACHE_FLASH_ATTR server_sent_syp(void *arg){
os_printf("发送成功\r\n");
}
void ICACHE_FLASH_ATTR server_discon_syp(void *arg){
os_printf("连接已经断开!");
}
好了,到这里8266配置成TCP服务器的程序就写好了,下载测试如下:
8266的串口1打印输出如下:
电脑网络助手接收和发送的数据如下图
今天就 讲这么多,精彩继续,下一篇讲8266的AP模式。
原创不易,如果你喜欢我的公众号、觉得我 文章对你有所启发,
请务必“点赞、收藏、转发”,这对我很重要,谢谢!
欢迎订阅 嵌入式小书虫