1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
以下实验已经成功本人亲自试过(在下列代码中没有粘贴出连接路由器那部分代码,只是粘贴了连接TLINK部分,因为该部分有一定学习意义) 实现 TCP 和 UDP 通信主要围绕连接热点,连接服务器,向服务器发送数据和接收服务器 传回来的信息这四个大的方面来展开。 实现设备连接远程服务器的流程为:
⚫ ESP8266 握手函数——STM32连接上ESP8266 (使用 ATrn 来检查此时 ESP8266 的状态,如果回复 OK) ⚫ **ESP8266 初始化函数⚫ ** 退出透传模式并重启, 检查 ESP8266 是否正常(是否连接成功), 关闭回显 ⚫ 恢复出厂设置 该函数后 ESP8266 会删除所有用户设置并重启 ⚫ 连接 AP(无线路由器 )⚫ ⚫ 使用指定协议连接到指定服务器⚫ ⚫ 断开与服务器的连接 ⚫ 发送数据到服务器⚫(STM32发数据给平台) 设备和服务器的通信都是通过该函数来完成的 ⚫ 接收数据⚫ ⚫ 处理接收数据⚫ 如控制 LED 和继电器 ⚫⚫⚫最重要的一个操作是检测发送指令后ESP8266返回值是否和程序设置值一样 ⚫⚫⚫注意以下几点: 1.连接上路由器后紧接着是连接云服务器TLINK 连接TLINK顺序如下:注意顺序不可调换 顺序: 先发云服务器TCP,IP,PORT连接上TLINK sendString(USART2,"AT+CIPSTART="TCP","112.74.142.132",8647rn");//连接平台 1 发进入透传模式指令 sendString(USART2,"AT+CIPMODE=1rn"); delay_ms(200); sendString(USART2,"AT+CIPSENDrn"); delay_ms(200); 发TLINK服务器序号 sendString(USART2,"0WQ60ET6QJKW09JUrn");//连接平台 delay_ms(800); 发数据:注意这里没有换行没有换行 sendString(USART2,"FM:40,21,0,#"); //这里不加回车 delay_ms(800); 至此便可连接上TLINK 2.下面是接收TLINK发回数据处理操作: 即连接上TLINK要干什么 //串口2中断处理函数 void USART2_IRQHandler(void) { static u8 i = 0; if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//判断USART2是否接收到TLINK发来数据 { RXBuffer[i++]= USART_ReceiveData(USART2);//保存数据 } if(USART_GetITStatus(USART2, USART_IT_IDLE))//判断USART2是否接收完一帧TLINK发来数据 { USART_ReceiveData(USART2); //读一次UART可以清除空闲标志位 i = 0; printf("%s",RXBuffer);//通过串口1发送给串口助手目的,方便我们查看TLINK发来的数据 if(strstr(RXBuffer,"open")) //字符串对比函数,看RXBuffer中是否还有open这样的子串 { LED1=0; sendString(USART2,"FM:40,21,1,#");//返回状态给TLINK } if(strstr(RXBuffer,"off")) //字符串对比函数,看RXBuffer中是否还有off这样的子串 { LED1=1; sendString(USART2,"FM:40,21,0,#"); //返回状态给TLINK } } } 下面是串口发送字符串函数因为ESP8266发送指令是通过发送字符串 /** * 功能:指定某个UART发送一个字节 * 参数:USARTx:使用的目标串口x为1-3 * byte:待发送字节 * 返回值:None */ void sendByte(USART_TypeDef *USARTx, u16 byte) { USART_ClearFlag(USARTx, USART_FLAG_TC); //软件清除发送完成标志位 USART_SendData(USARTx, byte); //发送一个字节 while (!USART_GetFlagStatus(USARTx, USART_FLAG_TC));//等待发送完成 USART_ClearFlag(USARTx, USART_FLAG_TC); //软件清除发送完成标志位 } /** * 功能:指定某个串口发送字符串 * 参数:USARTx:使用的目标串口x为1-3 * str:字符串指针 * 返回值:None */ void sendString(USART_TypeDef *USARTx, char *str) { while (*str)//直到 |