打印
[STM32F1]

【转】关于单片机连接ESP8266模块截取其回显内容

[复制链接]
943|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TXQDM|  楼主 | 2017-1-12 12:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

1,首先,ESP使用串口,跟51单片机通信,控制端可以使用手机,但是,51单片机和手机不在一个档次,那么在51单片机上需要分析操作。

2,ESP8266在接收或者发送数据时,会向串口发送回显内容,也就是提示信息,提示接收到了什么,发送了什么,所以,在单片机上做字符串的分析截取很重要,不然手机和单片机的通信质量大大下降,前期的wifi小车写项目的时候,这个问题困扰了我很久,后来进度过慢,我就折衷的使用了分析一个字符的方法,对小车进行控制,但是这样的处理方式很差。

3,前阵子终于把wifi小车做完了,虽然只是简单的行进和lcd显示以及避障,但也不能继续做下去了,需要去学新东西了,在这之前我需要把ESP用的完善了才能安心学下一步的东西,也为以后的项目铺了路。


分析思路:

1,首先uart串口的初始化不再详述,学习过就可以初始化成功。

2,然后,在串口的中断服务函数中,用temp承接SBUF中的回显数据,再在中断服务函数中立即做判断处理,该存的存,该舍弃的跳过,而且在中断服务函数中不能做延时较长的动作,所以只能使用令人头疼的标志位。

3,那么如何辨别什么时候是一整句的回显呢?因为回显并不回显\0,最多也只有\r\n(回车换行),那么如何判断什么时候开始接收一句话的第一个字符呢?我现在使用的方法是,把\n作为接收一句回显的开始,把\r作为接收一句回显的结束。这个过程通过设置标志位实现,较为简单。

0,CONNECT

+IPD,0,1:y
对应十六进制:30 2C 43 4F 4E 4E 45 43 54 0D 0A   0D 0A 2B 49 50 44 2C 30 2C 31 3A 79
                                                                        \r    \n    \r    \n




以上是回显的模板,可以根据这些内容理解出使用\r\n判断起始终止位置比较有效。


4,其次,现在比较重要的就是获取手机发来的数据,也就是+IPD,0,3:abc(0:客户连接号,3:字符串长度)这样的回显句子,需要截取下来,并存在单片机中,供其他函数使用,那么解析这个字符串就是在动态的过程中做的,所以时效性需要很高,需要立即分析完成并且处理完毕,不能先存下来再判断,因为没有字符串结束符,结束标志完全靠着:前面的3,也就是字符串长度来判断,这里连\r都没有用,只能动态的判断分析获取。


沙发
TXQDM|  楼主 | 2017-1-12 12:17 | 只看该作者
5,由于是在动态过程中做的,那么判断和标志位是无可奈何的选择,这里就需要逻辑搞清楚,虽然上面的程序我也是比较晕的,但是凭着感觉写出来,在进行一点一点调试,最后还是能够稳定的实现的。算法方面我还需要加强。
6,还有一个就是要善用sprintf它可以把你需要显示的数字转化为对应的字符串。注意:最好使用int型。
最后,还是有点缺陷的是,没有很好的完成安卓的客户端,只能发送字符串给单片机,但是不能将单片机发来的数据用socket在手机上显示出来,安卓是个弱项,但是socket通信还是需要好好学学,网络编程后续学习,对应安卓客户端我也会尝试写出来。

使用特权

评论回复
板凳
渔夫的烟斗| | 2017-1-12 13:43 | 只看该作者
依旧没有讲明白

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

110

主题

593

帖子

11

粉丝