一、Esp8266固件准备
固件这里就花了不少时间,因为我之前是在腾讯云有账号的,就想着用乐鑫的腾讯专用固件,但没想到还遇到了不少坑。
首先就是下载的固件,官网上有两个版本,区别是AT指令用的串口号不一样,因为时间比较久,我现在也忘记了用哪个。。。一起保存了。其次就是下载工具,一开始用的版本不对,一直烧录不进去,后来用的flash_download_tool_v3.8.5版本,又是搜了很久的设置,才成功烧录,过程很曲折,好在最后还是用上了腾讯的AT固件。这里工具和固件在官网都能找到,百度一下就可以了,文章底下也有我上传的链接。
二、调试串口的准备
我是想换一个地方能够不用修改程序就能连接wifi,还有用监控之类的上位机去监控数据。记录的同时我自己也会想着更改之前程序的不足,这个测试例程我还加了FreeRtos进去,也不用照搬我之前裸机的框架,而且很多地方我也是尽量往好的框架去考虑。
1、串口接收数据处理
这里处理与上一章ESP8266做的处理一样,都是用了一个定时器做不定长的接收。
定时器中断触发之后,这里我直接用信号量切换到对应的任务,没有像之前裸机那样用一个标志位来告知任务串口获取到数据。
2、调试串口的任务处理
而调试串口的任务,我这里只是简单做了一个接收的信号量处理,就是把在串口输入的wifi名称和密码分割,然后替换到程序响应变量。这里替换完应该再重新有一个输出,告知是否输入成功,当时没做。
3、调试串口的输出信息处理
在串口输出信息,这里也只做了一个简单的输出函数
三、Esp8266连接Wifi
1、任务的处理
发送我是利用了xTaskNotifyWait等待信号量,如果接收到发送的信号量,就调用发送函数,如果等待信号量超时(2S),就进入发送函数。等待到接收数据的信号量,就进入数据处理函数
2、Esp8266的发送
我沿用以前的程序,做了一个Esp8266的结构体,里边还有一些没有用到,我是直接复制过来的。
以下就是我的发送处理函数,大致的思路就是,每次指令CloudFaultTime都会++,成功后置0,次数大于32次,就重新复位,进入初始化,这里CloudFaultTime一开始我的初始值是32,所以一开始就会进入初始化。
ESP8266链接wifi的指令过程就是 CIPSTATUS →CWMODE →CIPMUX→CWJAP
这个过程没什么好说的,都是很简单的发送指令和校验回帧
3、Esp8266的接收
这里我查询CPISTATUS的时候,如果能连接上网络,就不需要再输入wifi的名称和密码了。
如果链接不上,就会在串口输出需要输入wifi名称和密码
后边的就是一些常规的处理,也没什么好说的。
四、程序测试
然后下边就是测试过程,这个过程,因为我是抓了Esp8266的回帧在左边看,所以单看右边的话,会有点不连贯的感觉。我应该在输入后调试串口增加输入成功,并且打印出输入的wifi名称和密码,在链接过程中也在调试过程中增加wifi连接中这样的信息。
最后附上链接