一、前言
上一篇用蓝牙作为通信方式,虽然勉强完成了控制,但结果显然不是那么符合我们的预期,既然用蓝牙还需要研究一段时间,那我们就先整一些现成的,不需要研究的!iot云平台!这里当然也是通过wifi的方式。
二、开发准备
1、硬件了解
这是官方手册中wifi的特性描述,同样也是2.4g,速率150M是比我之前在stm32上用过的esp8266快的,对我的预期来说那是够够的了,毕竟我顶多就控控灯开关,上报一下传感器数据之类的。
2、例程选择
我一贯都是用mqtt连接的腾讯云,所以我现在也是选择mqtt的例程,然后这里还有ssl、tcp和ws,我选择的是tcp,ssl强调安全加密,ws是适配浏览器环境的,tcp没有加密而且轻量,直接通过1883端口通信。
3、例程分析
这个例程就比较简单了,只对连接mqtt来说的话,其实前边都不是我们需要关心的内容,直接从网络连接 example_connect 这里看起就好
这里有注释,大意就是根据在menuconfig中的选项(wifi或以太网)自动初始化对应的网络模块,而且要提前在menuconfig中设置wifi的参数。(我也是百度翻译的)
但是这个函数,我是没找到,可能不是用C来实现的吧(瞎猜的),因为这里所说的menuconfig,在vscode本来就是点一下那个设置的图标,这里配置后边再说
然后mqtt_app_start就是,mqtt连接的开始
点开,这里有一个config的结构体,但是跟我记忆中的不太一样,我记得好像这个结构体以前是输入端口,username和password之类的就行来着
点进去看看:
现在分了好几个,我将每一个都折叠了
就是mqtt的参数和任务的参数,我看了一下,broker_t设置url,credentials_t设置username、client_id、password,其他保持默认就好,具体设置后边说。至于全部参数的详细作用,其实我也并不能都说得上来,有需要大家自行百度!
三、修改例程
1、设置wifi名称和密码
点一下下边的这个设置,就会发现新大陆兄弟们
直接搜索wifi就好,然后输你的wifi名称和密码,注意是2.4g那个,下边的参数就用默认的就好,改完点右上角保存
2、设置mqtt的参数
因为是测试,所以我直接将腾讯云设备信息下边那里有直接给出来的三元组直接宏定义了,服务器地址要加上mqtt://,不要url会报错
如果是想做成通用点的程序,三元组就要通过计算了,算法官方有:
服务器地址的话可以通过snprintf,例如:
char endpoint[100];
snprintf(endpoint, sizeof(endpoint), "mqtts://%s.iotcloud.tencentdevices.com", ClientID);
然后只需要在mqtt_app_start这个函数,注释掉本来的url,加上我们的参数,就实现简单的连接了
3、检验是否激活设备
烧录程序:
成功连接wifi后会显示ip地址
后边的就是mqtt订阅成功,成功激活设备了
在平台上看一看
4、增加上报led状态和接收led开/关指令
①增加头文件
②增加宏定义
topic在腾讯云上可以直接看到
③增加变量:
增加了一个灯的开关状态变量
一个任务句柄
一个环形结构
还有一个信号量
④增加函数
1、led相关
2、存储区部分
3、回调函数修改:
4、创建任务
我把原先的mqtt_app_start注释不用,自己创建了一个任务,还有前边一些初始化
任务也很简单,就是有中断有数据接收时,直接进入数据处理,如果是开关的话就执行led开/关的操作,并直接上报灯的状态。如果没有的话就5s上报一次。
但其实这里5s并不准确,因为每次上报会有数据回复,又会跳转到处理数据这里。
四、烧录验证
1、串口打印消息查看
这里是主动上报的,我加了一帧打印计数
这是控制的
2、平台查看
可以看到,数据一直有上报,并且突变时会直接上
3、实际效果
esp32C3基于idf 腾讯云mqtt控制灯亮灭视频-CSDN直播
五、总结
中断这里我把数据存到存储区,然后AI搜了一下这个环形缓冲区结构,再自己修改了下,之前都是用的静态申请空间的。
一整个流程下来,其实跟我之前STM32+ESP8266是没什么区别的。感兴趣可以对比下。
STM32+ESP8266连接腾讯IOT上传数据(四)_stm32通过esp8266上传数据到云平台-CSDN博客
比stm32+eps8266这种方法省了一个cpu,稳定性还没测,我准备到时候把功能写完,再一直挂着试试