实现的功能
前言
1.用户在看这一节之前请先学习
https://www.cnblogs.com/yangfengwu/p/12397146.html C# TCP客户端
https://www.cnblogs.com/yangfengwu/p/12393478.html 8266 TCP服务器
2.控制继电器引脚
协议规定
C#TCP客户端发送给ESP8266TCP服务器控制继电器吸合指令:
0xaa 0x55 0x01 0x01
ESP8266执行以后回复给C#TCP客户端:
0x55 0xaa 0x01 0x01
C#TCP客户端发送给ESP8266TCP服务器控制继电器断开指令:
0xaa 0x55 0x01 0x00
ESP8266执行以后回复给C#TCP客户端:
0x55 0xaa 0x01 0x00
ESP8266程序编写
1.处理程序在这节的基础上修改添加
https://www.cnblogs.com/yangfengwu/p/12393478.html
2.配置GPIO5为普通引脚
/*设置GPIO5为普通引脚*/ PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U , FUNC_GPIO5);
3.定义用于返回继电器状态的数组
/*用于返回继电器的状态*/ u8 RelayOn[4]={0x55,0xaa,0x01,0x01};//继电器吸合 u8 RelayOff[4]={0x55,0xaa,0x01,0x00};//继电器断开
4.编写TCP接收处理程序
/** * @brief TCP接收数据 * @param arg:tcp_arg函数传入的参数 * * @param p:接收的数据缓存 * @param err:错误信息 * @param None * @retval None * @warning None * @example **/ static err_t net_tcp_recv_cb(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) { struct pbuf *q; u32 length = 0,i=0; tcp_pcb_server = tpcb; tcp_pcb_server_state = 1; if (!p || err!=ERR_OK) { if(p){ pbuf_free(p); } tcp_pcb_server_state = 0; tcp_close(tcp_pcb_server);//关闭连接 return ERR_CLSD; } //接收TCP数据(固定) for(q=p;q!=NULL;q=q->next){ if(q->len > (TcpServerBuffLen-length))//接收的数据个数大于了数组可以接收的数据个数 memcpy(TcpServerBuff+length,q->payload,(TcpServerBuffLen-length));//只接收数组可以接收的数据个数 else memcpy(TcpServerBuff+length,q->payload,q->len);//接收TCP所有数据 length += q->len; if(length > TcpServerBuffLen) break; } if(TcpServerBuff[0] == 0xaa && TcpServerBuff[1] == 0x55){ if(TcpServerBuff[2] == 0x01){ if(TcpServerBuff[3] == 0x01){ GPIO_OUTPUT_SET(5, 1);//设置GPIO5输出高电平 tcp_write(tcp_pcb_server, RelayOn, 4, TCP_WRITE_FLAG_COPY);//TCP_WRITE_FLAG_COPY:拷贝到发送缓存 tcp_output(tcp_pcb_server);//立即发送 } else if(TcpServerBuff[3] == 0x00){ GPIO_OUTPUT_SET(5, 0);//设置GPIO5输出低电平 tcp_write(tcp_pcb_server, RelayOff, 4, TCP_WRITE_FLAG_COPY);//TCP_WRITE_FLAG_COPY:拷贝到发送缓存 tcp_output(tcp_pcb_server);//立即发送 } } } //固定处理 tcp_recved(tcp_pcb_server, p->tot_len);/*更新接收,告诉底层可以接着缓存数据了*/ pbuf_free(p);//释放链表 return ERR_OK; }
5.先用TCP调试助手测试
5.1 电脑连接 8266 的无线
5.2 打开TCP客户端,连接8266
5.3 发送16进制指令测试
控制继电器吸合
aa 55 01 01
控制继电器断开
aa 55 01 00
C#上位机程序编写
1.处理程序在这节的基础上修改添加
https://www.cnblogs.com/yangfengwu/p/12397146.html
2.页面修改如下