微信物联网生态:硬件开发平台与腾讯物联开发平台的探索与实践

2024-07-26
来源:网络整理

微信IoT生态主要分为微信硬件开发平台和腾讯IoT开发平台,前者已经停止维护,但依然很有学习价值,后者作为主平台,集成了包括微信小程序的网络配置、控制等诸多功能;

为了兼顾更多朋友和自己的学习笔记,我会持续更新这篇专题笔记,欢迎关注CSDN,带你走进前沿领域,学习前沿技术!

自建微信服务器&微信硬件开发平台

【微信小程序控制硬件 上】全网首发,借助emq消息服务器,带你搭建微信小程序mqtt服务器,轻松控制智能硬件!

【微信小程序控制硬件第二部分】开启微信小程序之旅,导入小程序Mqtt客户端源码,实现与服务端的简单验证和通信!

【微信小程序控制硬件第三部分】从软件到硬件搭建一个微信小程序控制的项目,自定义通讯协议,为面试岗位、竞赛项目加分!

【微信小程序控制硬件第四部分】深入解析微信公众号配网原理及流程,如何为微信自定义回调参数,实现绑定设备第一步!

【微信小程序硬件控制 第五部分】明确必须遵循的架构思想,学习观察者模式,微信小程序多个页面同时接收设备推送事件!

【微信小程序硬件控制第六部分】如何将七牛云存储SDK集成到服务器中将用户自定义的设备镜像存储到第三方服务器!

【微信小程序控制硬件 第七】我们来做一个微信小程序使用Mqtt协议控制智能硬件的框架,放飞我们全栈工程师的梦想吧!!

【微信小程序控制硬件之八】微信小程序连接阿里云IOT物联网平台mqtt服务器,封装起来使用就是这么简单!

【微信小程序硬件控制之九】利用阿里云物联网平台免费连接,通过微信小程序采集颜色控制彩灯输出,中秋节来一场直播如何?!

【微信公众号控制硬件第十】微信公众号网页如何连接mqtt服务器的教程!!

【微信小程序硬件控制第十一章】全网首发微信小程序BLE蓝牙控制,无需连接网络,就能控制亮度开关。

【微信小程序控制硬件十二】如何用微信小程序开发蓝牙控制硬件?全面解析微信小程序蓝牙API的使用。

【微信小程序硬件控制第十三篇】安信科B站直播学习总结,微信小程序MQTT远程控制,聊聊微信生态系统。

腾讯物联网开发平台

【腾讯连连-腾讯IoT开发平台 第一部分】腾讯官方精机发布的“腾讯连连”终于来了,跟着官方教程,手把手教你在微信小程序中实现网络配置与控制!

【腾讯连连-腾讯IoT开发平台 第二部分】深入解析微信小程序配网原理,本质ESP-12S直连腾讯IoT开发平台!!

目录

前言

最后更新了跨平台腾讯小程序控件的第二篇,由于这里所有的工作我都已经做完了,所以这几篇文章先给大家普及一些理论知识,为以后的发展打下扎实的基础;

因为现在腾讯小程序已经支持一键配网了,​​就是这个!是不是感觉国内的物联网在慢慢往前走呢?跟着我的笔记慢慢学习吧!

1.1 什么是WiFi网络配置?

WiFi配网是指从外部向WiFi设备提供SSID和密码(PSW),使WiFi设备能够连接到指定热点或路由器,加入后者建立的WiFi网络。对于具有屏幕/键盘等丰富人机交互界面的设备,如电脑或手机,可以直接输入SSID/PSW进行连接。对于智能灯、扫地机器人等人机交互界面不丰富的物联网WiFi设备,可以通过某种配网方式,利用手机等智能设备将SSID/PSW告诉设备。

1.2 网络配置与设备绑定

这种方法的基本原理是先让设备进入WiFi混杂模式,监听并抓取周边的WiFi报文。由于设备还未连入互联网,且WiFi网络的数据帧都是加密的,因此设备无法得知内容,但可以知道报文的一些特征数据,比如每条报文的长度。同时,对于一些数据帧,比如UDP广播包或者多播包,报文的帧头结构相对固定,很容易被识别。

此时在手机APP或者小程序测试中,可以发送UDP广播包或者组播包,聪明的开发者利用该报文的长度变化等特点,将目标WiFi路由器的SSID/PSW字符按照约定的编码方式进行编码发送,设备捕获到UDP报文后按照约定的方式进行解码,即可获取目标WiFi路由器的相关信息并连接上网。

对于网络配置,每个制造商都有自己的编码和消息选择协议。 对于,使用 ESP协议。

基于此协议,设备成功连接WiFi路由器后,会将自己的IP地址告知手机,此时手机可以通过TCP/UDP通信等数据通道将后台提供的网络配置发送给设备,设备再转发给物联网后台,据此即可进行设备绑定。

目前腾讯连连小程序已经支持使用ESP协议进行配网,并提供了相应的小程序SDK。

以下是使用腾讯连连小程序进行网络配置及设备绑定的示例流程图:

腾讯云小程序云开发_腾讯云小程序云开发教程_腾讯云微信小程序开发

第二方网络设备与腾讯连连小程序及后台交互的数据协议

腾讯连连小程序进入配网模式后,会从物联网开发平台服务中获取当前的网络配置,小程序相关操作请参考生成Wi-Fi设备网络配置

将WiFi设备进入网络配置模式,如果看到设备上的指示灯快速闪烁,表示设备已成功进入网络配置模式。

小程序按照提示依次获取WiFi列表,输入家里目标路由器的SSID/PSW,按下一步发送消息。

设备监听到消息,解析目标路由器的SSID/PSW并连接互联网,连接成功后设备会将自己的IP地址告知小程序,并开始连接物联网后台。

作为UDP客户端,小程序会连接WiFi设备上的UDP服务(默认端口为8266),并将网络配置以JSON格式发送给设备:

{"cmdType":0,"token":"6ab82618a9d529a2ee777bf6e528a0fd"}

发送后等待设备UDP回复设备信息和网络配置协议版本号:

{"cmdType":2,"productId":"OSPB5ASRWT","deviceName":"dev_01","protoVersion":"2.0"}

如果2秒内没有收到设备的回应,则重复步骤5,UDP客户端再次发送网络配置消息。

若重复发送5次仍没有收到回应,则认为网络配置失败,WiFi设备有问题。

如果第5步设备有回应,说明设备已经收到消息,准备上报,此时小程序会开始轮询物联网后端,确认配网、设备绑定是否成功,小程序相关操作请参考查询配网状态

设备成功连接WiFi路由器后,需要通过MQTT连接物联网后端,将小程序发送的网络配置通过以下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服务发送的错误日志,且字段的值为“”,则表示当前配网绑定过程中出现错误,需要退出配网操作。如果字段为“”,则为上一次配网的错误日志,只需上报,不会影响当前操作。

错误日志JSON格式示例:

{"cmdType":2,"deviceReply":"Current_Error","log":"ESP WIFI connect error! (10, 2)"}

若设备上报成功,且IoT后端服务确认设备合法性,小程序会提示配网完成,设备添加成功。

设备会记录详细的网络配置日志,如果网络配置或设备添加失败,还可以让设备创建专门的UDP服务,通过小程序可以获取设备更多的日志,用于错误分析。

3.使用网络配置界面

首先去开源仓库:

腾讯云指令定制固件

如果ESP-12S模组烧写的是腾讯云IoT AT 指令定制固件,则只需要通过AT+指令配置设备信息,然后通过以下命令开始配网即可。

AT+TCSTARTSMART

有关AT命令的详细说明,请参阅-iot-at-文档

网络配置代码示例

在-iot--demo/main/目录下提供了网络配置的参考实现,用户可以使用-iot--demo项目进行体验。

使用示例,网络配置接口说明请参见/.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(); }

另外,不要把我的博客当成学习的标准,只是我的笔记,难免会有疏漏,如果有不足之处还请大家指出,也欢迎留言哦!

分享