【腾讯连连 腾讯物联网入门学习 第2篇】深度解析微信小程序smartconfig配网原理,安信可ESP-12S直连腾讯物联开发平台!
Posted on 2020-07-05 10:51 CoreHouse 阅读(1145) 评论(0) 编辑 收藏 举报微信物联网生态主要分在微信硬件开发平台与腾讯物联开发平台,前者已经停止维护,但依然有着很大的学习价值,而后者作为主推的平台,集成很多功能,包括从微信小程序实现配网到控制;
为了兼顾更多的朋友和自己的学习笔记,我将会一直更新此专题笔记,欢迎关注本人CSDN半颗心脏,带你走进前沿领域,学习前沿技术!
自搭微信服务器&&微信硬件开发平台
【微信小程序控制硬件第1篇 】 全网首发,借助 emq 消息服务器带你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件!
【微信小程序控制硬件第2篇 】 开始微信小程序之旅,导入小程序Mqtt客户端源码,实现简单的验证和通讯于服务器!
【微信小程序控制硬件第3篇 】 从软件到硬件搭建一个微信小程序控制esp8266的项目,自定义通讯协议,为面试职位和比赛项目加分!
【微信小程序控制硬件第4篇 】 深度剖析微信公众号配网 Airkiss 原理与过程,esp8266如何自定义回调参数给微信,实现绑定设备第一步!
【微信小程序控制硬件第5篇 】理清接下来必须走的架构思想,学习下 JavaScript 的观察者模式,在微信小程序多页面同时接收到设备推送事件!
【微信小程序控制硬件第6篇 】服务器如何集成七牛云存储SDK,把用户自定义设备图片存储在第三方服务器!
【微信小程序控制硬件第7篇 】动起来做一个微信小程序Mqtt协议控制智能硬件的框架,为自己心里全栈工程师梦想浇水!!
【微信小程序控制硬件第8篇 】微信小程序以 websocket 连接阿里云IOT物联网平台mqtt服务器,封装起来使用就是这么简单!
【微信小程序控制硬件第9篇 】巧借阿里云物联网平台的免费连接,从微信小程序颜色采集控制 esp8266 输出七彩灯效果,中秋节来个直播如何?!
【微信公众号控制硬件 第10篇 】如何在微信公众号网页实现连接mqtt服务器教程!!
【微信小程序控制硬件 第11篇 】全网首发,微信小程序ble蓝牙控制esp32,实现无需网络也可以控制亮度开关。
【微信小程序控制硬件 第12篇 】微信小程序蓝牙控制硬件应如何开发?为您全面解析微信小程序蓝牙API的使用。
【微信小程序控制硬件 第13篇 】安信可B站直播学习总结,微信小程序MQTT远程控制ESP8266 NodeMCU,谈谈微信生态那些事。
腾讯物联开发平台
【腾讯连连 - 腾讯物联开发平台 第1篇 】腾讯官方静鸡鸡发布的“腾讯连连”终于来了,按照官方教程教你在微信小程序实现配网、控制 ESP8266啦!
【腾讯连连 - 腾讯物联开发平台 第2篇 】深度解析微信小程序smartconfig配网原理,安信可ESP-12S直连腾讯物联开发平台!!
文章目录
前言
终于更新了跨平台的腾讯小程序控制ESP8266的第二篇了,因为我这里已经做好了全部工作,这几篇先给大家做些理论的知识,对往后的开发埋下扎实的基础;
因为现在的腾讯小程序已经支持ESP8266的一键配网了,即smartconfig! 是不是感觉国内物联网正在慢慢前进?跟着我的笔记慢慢学习吧!
一 SmartConfig配网简介及交互流程
1.1 WiFi配网是什么
WiFi
配网指的是,由外部向WiFi设备提供SSID
和密码(PSW),让WiFi设备可以连接指定的热点或路由器并加入后者所建立的WiFi网络。对于具备丰富人机界面包括屏幕/键盘的设备比如电脑或者手机,可以直接输入SSID/PSW
来进行连接,而对于不具备丰富人机交互界面的物联网WiFi设备比如智能灯、扫地机器人等,则可以借助手机等智能设备,以某种配网方式将SSID/PSW
告诉该设备。
1.2 SmartConfig配网及设备绑定
SmartConfig
方式配网的基本原理是先让设备进入WiFi
混杂模式(promiscuous mode)以监听捕获周围的WiFi报文,由于设备还没有联网,而WiFi
网络的数据帧是通过加密的,设备无法知道payload
的内容,但是可以知道报文的某些特征数据比如每个报文的长度,同时对于某些数据帧比如UDP
的广播包或多播包,其报文的帧头结构比较固定,可以很容易的识别出来。
这个时候在手机app或者小程序测,就可以通过发送UDP
的广播包或者多播包,聪明的开发者利用报文的特征比如长度变化来进行编码,将目标WiFi路由器的SSID/PSW
字符以约定的编码方式发送出去,设备端在捕获到UDP报文后按约定的方式进行解码就可以得到目标WiFi路由器的相关信息并进行联网。
SmartConfig
方式配网,在编码方式和报文选择上面,每个厂商有自己的协议,对于ESP8266
,采用的是乐鑫ESP-TOUCH协议。
基于该协议,设备端在连接WiFi路由器成功之后,会告知手机端自己的IP地址,这个时候手机端可以通过数据通道比如TCP/UDP
通讯将后台提供的配网token
发送给设备,并由设备转发至物联网后台,依据token可以进行设备绑定。
目前腾讯连连小程序已经支持采用ESP-TOUCH
协议进行SmartConfig配网,并提供了相应的小程序SDK.
下面是腾讯连连小程序SmartConfig方式配网及设备绑定的示例流程图:
二 SmartConfig配网设备端与腾讯连连小程序及后台交互的数据协议
-
腾讯连连小程序进入配网模式后,会从物联网开发平台服务获取到当次配网的token,小程序相关操作可以参考 生成Wi-Fi设备配网Token
-
使WiFi设备进入SmartConfig配网模式,看到设备有指示灯在快闪,则说明进入配网模式成功。
-
小程序按照提示依次获取WiFi列表,输入家里目标路由器的SSID/PSW,按下一步之后就会通过SmartConfig方式发送报文。
-
设备端通过监听捕获SmartConfig报文,解析出目标路由器的SSID/PSW并进行联网,联网成功之后设备会告知小程序自己的IP地址,同时开始连接物联网后台。
-
小程序作为UDP客户端会连接WiFi设备上面的UDP服务(默认端口为8266),给设备发送配网token,JSON格式为:
{"cmdType":0,"token":"6ab82618a9d529a2ee777bf6e528a0fd"}
发送完了之后等待设备UDP回复设备信息及配网协议版本号:
{"cmdType":2,"productId":"OSPB5ASRWT","deviceName":"dev_01","protoVersion":"2.0"}
-
如果2秒之内没有收到设备回复,则重复步骤5,UDP客户端重复发送配网token。
如果重复发送5次都没有收到回复,则认为配网失败,WiFi设备有异常。 -
如果步骤5收到设备回复,则说明设备端已经收到token,并准备上报token。这个时候小程序会开始通过token轮询物联网后台来确认配网及设备绑定是否成功。小程序相关操作可以参考 查询配网Token状态
-
设备端在成功连接WiFi路由器之后,需要通过MQTT连接物联网后台,并将小程序发送来的配网token通过下面MQTT报文上报给后台服务:
topic: $thing/up/service/ProductID/DeviceName
payload: {"method":"app_bind_token","clientToken":"client-1234","params": {"token":"6ab82618a9d529a2ee777bf6e528a0fd"}}
设备端也可以通过订阅主题 $thing/down/service/ProductID/DeviceName 来获取token上报的结果
- 在以上5-7步骤中,如果小程序收到设备UDP服务发送过来的错误日志,且deviceReply字段的值为"Current_Error",则表示当前配网绑定过程中出错,需要退出配网操作。如果deviceReply字段是"Previous_Error",则为上一次配网的出错日志,只需要上报,不影响当此操作。
错误日志JSON格式例子:
{"cmdType":2,"deviceReply":"Current_Error","log":"ESP WIFI connect error! (10, 2)"}
-
如果设备成功上报了token,物联网后台服务确认了token有效性,小程序会提示配网完成,设备添加成功。
-
设备端会记录配网的详细日志,如果配网或者添加设备失败,还可以让设备端创建一个特殊的
softAP
和UDP
服务,通过小程序可以从设备端获取更多日志用于错误分析。
三 ESP8266使用SmartConfig配网接口
先上开源仓库:https://github.com/Ai-Thinker-Open/Ai-Thinker-Open-qcloud-esp-wifi
腾讯云IoT AT指令ESP8266定制固件
如果ESP-12S模组烧写了腾讯云IoT AT指令ESP8266定制固件,则只要通过指令AT+TCDEVINFOSET配置好设备信息,再通过下面的指令启动SmartConfig配网就可以
AT+TCSTARTSMART
关于AT指令的详细说明,请参考qcloud-iot-at-esp8266目录文档
配网代码示例
在qcloud-iot-esp8266-demo/main/wifi_config
目录下,提供了SmartConfig
配网在ESP8266上面的参考实现,用户可以使用qcloud-iot-esp8266-demo
工程进行体验。
使用示例,配网接口说明请查看wifi_config/qcloud_wifi_config.h
,可以按照下面方式使用:
/* to use WiFi config and device binding with Wechat mini program */
int wifi_config_state;
int ret = start_smartconfig();
if (ret) {
Log_e("start wifi config failed: %d", ret);
} else {
/* max waiting: 150 * 2000ms */
int wait_cnt = 150;
do {
Log_d("waiting for wifi config result...");
HAL_SleepMs(2000);
wifi_config_state = query_wifi_config_state();
} while (wifi_config_state == WIFI_CONFIG_GOING_ON && wait_cnt--);
}
wifi_connected = is_wifi_config_successful();
if (!wifi_connected) {
Log_e("wifi config failed!");
// setup a softAP to upload log to mini program
start_log_softAP();
}
另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!
- 玩转
esp8266
带你飞、加群QQ
群,不喜的朋友勿喷勿加:434878850 - 个人邮箱:xuhongv@yeah.net 24小时在线,有发必回复!
- esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
- esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
- 关注下面微信公众号二维码,干货多多,第一时间推送!