关于单片机连接ESP8266模块截取其回显内容
发布日期:2019-10-13 09:52 来源:和记h88 发布人:和记娱乐 点击:
1,首先,ESP使用串口,跟51单片机通信,控制端可以使用手机,但是,51单片机和手机不在一个档次,那么在51单片机上需要分析操作。
2,ESP8266在接收或者发送数据时,会向串口发送回显内容,也就是提示信息,提示接收到了什么,发送了什么,所以,在单片机上做字符串的分析截取很重要,不然手机和单片机的通信质量大大下降,前期的wifi小车写项目的时候,这个问题困扰了我很久,后来进度过慢,我就折衷的使用了分析一个字符的方法,对小车进行控制,但是这样的处理方式很差。
3,前阵子终于把wifi小车做完了,虽然只是简单的行进和lcd显示以及避障,但也不能继续做下去了,需要去学新东西了,在这之前我需要把ESP用的完善了才能学下一步的东西,也为以后的项目铺了。
2,然后,在串口的中断服务函数中,用temp承接SBUF中的回显数据,再在中断服务函数中立即做判断处理,该存的存,该的跳过,而且在中断服务函数中不能做延时较长的动作,所以只能使用令人头疼的标志位。
3,那么如何辨别什么时候是一整句的回显呢?因为回显并不回显\0,最多也只有\r\n(回车换行),那么如何判断什么时候开始接收一句话的第一个字符呢?我现在使用的方法是,把\n作为接收一句回显的开始,把\r作为接收一句回显的结束。这个过程通过设置标志位实现,较为简单。
4,其次,现在比较重要的就是获取手机发来的数据,也就是+IPD,0,3:abc(0:客户连接号,3:字符串长度)这样的回显句子,需要截取下来,并存在单片机中,供其他函数使用,那么解析这个字符串就是在动态的过程中做的,所以时效性需要很高,需要立即分析完成并且处理完毕,不能先存下来再判断,因为没有字符串结束符,结束标志完全靠着:前面的3,也就是字符串长度来判断,这里连\r都没有用,只能动态的判断分析获取。
//专门用来接收IPD和CIFSR,结束接收时要把Rev_Str_status置为无效,再次进入下面的循环,检测第一个字符
Str_Ready = OK;//设置标志位,说明我已经接收到了一个整的字符串了,可以进行操作了。
if(temp == :)//要是开始了:,那么后面开始接收字符长度为str_len的字符串长度
6,由于是在动态过程中做的,那么判断和标志位是无可奈何的选择,这里就需要逻辑搞清楚,虽然的程序我也是比较晕的,但是凭着感觉写出来,在进行一点一点调试,最后还是能够稳定的实现的。算法方面我还需要加强。
7,还有一个就是要善用sprintf它可以把你需要显示的数字为对应的字符串。注意:最好使用int型。
//检测是否接收到了数据,供其他函数调用,如果接收到了数据,那么,就供其他函数提取全局变量Get_str
Get_str_loc = 0;//清空一部分全局变量,以便下一次操作,Get_str要在外面函数接收完再清空
//str:发送内容,str_len:发送的字节数,client_num:客户端连接号,注意:参数均为字符串形式!
//经过一秒以后,查看是否有发送成功标志位,要是发送成功了,那么就置Send_flag为有效
//专门用来接收IPD和CIFSR,结束接收时要把Rev_Str_status置为无效,再次进入下面的循环,检测第一个字符
Str_Ready = OK;//设置标志位,说明我已经接收到了一个整的字符串了,可以进行操作了。
if(temp == :)//要是开始了:,那么后面开始接收字符长度为str_len的字符串长度
最后,还是有点缺陷的是,没有很好的完成的客户端,只能发送字符串给单片机,但是不能将单片机发来的数据用socket在手机上显示出来,是个弱项,但是socket通信还是需要好好学学,网络编程后续学习,对应客户端我也会尝试写出来。
和记娱乐,和记h88,h88平台官网