微信物联网生态主要分在微信硬件开发平台与腾讯物联开发平台,前者已经停止维护,但依然有着很大的学习价值,而后者作为主推的平台,集成很多功能,包括从微信小程序实现配网到控制;
为了兼顾更多的朋友开发和自己的学习笔记,我将会一直更新此专题笔记,欢迎关注本人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啦!
本博文已在2020年6月20号更新,增加对smartconfig的配网支持说明;
现在万物智联的时代, 作为一名全栈开发工程师,无线点灯已经成为基本功了,要对自己产品有所优势,就务必把更好玩、更吸引人、更创新的玩法想出来并实现分享给大家!
昨天,公司的前端开发小姐姐问到我她手上的前端如何在微信小程序中配网ESP8266,从而实现控制的功能;于是乎,我很亢奋,微信小程序可以实现配网了吗?我打开了网页,竟然是 腾讯物联网平台,竟然还支持个人开发!!!!
于是乎,从编译代码到读懂配网原理,我只花了1个半小时,今天,有机会给大家分享下如今的“腾讯连连”使用现状!(以 ESP8266资深玩家身份评估)
2019年在腾讯云IoT生态峰会上,腾讯云首次对外升级物联网全链路产品以及发布“腾讯连连”全新产品,简单来说,用户只需要通过这款小程序的入口,就可以实现一键控制不同厂商、不同协议硬件产品,真正实现万物互联。
据腾讯云物联网平台产品总监周佳鑫介绍:“腾讯连连并非是一款简单的微信小程序,它是腾讯云面向物联网行业提供的一整套C to B开放平台服务,借助腾讯连连可以降低物联网产品的研发门槛以及加快研发速度,同时提供以微信小程序为载体的、面向消费者的应用入口,整合腾讯内部的品牌以及多项优势内容服务。”
一句话:腾讯物联网平台升级了,已经结合微信小程序配合从 配网、绑定、控制和分享设备了,真正融合进微信生态啦!
而 “腾讯连连” 一个配网、绑定、控制和分享设备的微信小程序!
关注本人博客的朋友都知道,我在2018年都已经提到了:微信配网airkiss和微信硬件云可能不维护了,现在再验证了这一说法!
微信公众开放平台关于airkiss配网帖子,其管理员提到:
上述的微信生态中的微信公众号Airkiss配网已经不维护,而大家最期待的应该是:微信小程序可以给智能设备配置入网吗?其实 ,在我的圈子里面,已有很多人实现了微信小程序给智能设备配置入网,其原理就是 热点配网!
而官方的优势解释大概意思 : “腾讯连连” 一个配网、绑定、控制和分享设备的微信小程序,可以实现结合微信生态提高用户体验;
在没有“腾讯连连”之前,我们可以实现上面的想法吗? 当然是可以的,我去年做了一个《微信小程序蓝牙配网ESP32》, 就可以看到 微信小程序其实也是可以 配网 设备的,控制设备更不用说了,直接用 webSocket 跑 MQTT 协议就可以了!下面给出链接哈!
因为,激励技术的前进,大多数由于业务的需求;聪明的开发者,都是想尽各种方法实现: 如何做一个配网、绑定、控制和分享设备的微信小程序!确实是可以做到了,本人是做到了,但由于某些原因,是不能开源和发布出来的,如有兴趣可以技术讨论啦!
谈了这么多 , 博主认为 “腾讯连连” 优势在于 官网流量支持,并且会一直维护下去,面向个人和企业想在微信生态做自己的产品,会更 easy ! 更容易上手! 这也对国内的物联网发展,标志着一个里程碑, 但更多需要我们开发者去不断磨合它,不断提出BUG完善它,这样,我们才真正看到一个成熟的 “腾讯连连” !
前面谈了这么多理论和个人想法,相信您一定对这个“腾讯连连” 配网原理很感兴趣,那么,下面跟着我一起走吧!
Wi-Fi 配网,指由外部向 Wi-Fi 设备提供 SSID 和密码(PSW),让 Wi-Fi 设备可以连接指定的热点或路由器,并加入后者所建立的 Wi-Fi 网络。
配网有多种方式,包括 WPS、smartconfig、softAP 等。
配网方式 | 特点 |
---|---|
WPS | 存在安全性问题 |
smartconfig | 较便捷,但一般为各厂商采用私有协议,兼容性和互操作性较差 |
softAP | 适配性兼容性较好,但手机端需要做两次 Wi-Fi 连接设置的切换,步骤较复杂 |
设备通过 softAP 方式创建一个 Wi-Fi 热点,手机连接该热点,通过数据通道,将目标 Wi-Fi 路由器的 SSID/PSW 传递该设备,设备获取后,连接路由器从而连接互联网。同时,为了对设备进行绑定,手机 App 可以利用该数据通道,让设备提供签名数据,再将签名数据发送至物联网后台进行验证和绑定。
本示例基于 ESP8266 腾讯云定制模组配合腾讯连连小程序。
已经烧录好腾讯云固件的ESP8266 模组接到 PC 端 USB 串口。
首先让 Wi-Fi 模组进入 softAP 配网模式。如果模组说明有指示灯在快闪,则说明进入配网模式成功,默认的 热点 SSID 为 ESP8266-SoftAP , 密码12345678 ,也可以修改!
手机连接该 Wi-Fi 热点"ESP8266-SoftAP",获取到 IP。
小程序作为 UDP 客户端连接 Wi-Fi 模组上面的 UDP 服务。(IP 为网关地址,在 ESP8266 上是192.168.4.1,端口为8266)
小程序给模组 UDP 服务发送目标 Wi-Fi 路由器的 SSID/PSW,JSON 格式为:
{"cmdType":1,"ssid":"Home-WiFi","password":"abcd1234"}
发送完成后,等待模组 UDP 服务回复确认消息:
{"cmdType":2,"deviceReply":"dataRecived"}
{"cmdType":0,"timestamp":1234567890}
发送完成后,等待模组 UDP 服务回复签名消息:
{"cmdType":2,"productId":"0C88P7AQQ9","deviceName":"wifi_kit","connId":"eaAZy","signatu re":"e595bf7703cc383d76567f8cc13591012c495c50","timestamp":1234567890,"wifiState":"conn ected","mqttState":"connected"}
设备端签名串 signature 的生成示例请参见 calc_device_sign 函数。
{"cmdType":2,"deviceReply":"Current_Error","log":"ESP WIFI connect error! (10, 2)"}
注意:UDP 相比 TCP 是不可靠的通讯,存在丢包的可能,特别在比较嘈杂的无线 Wi-Fi 环境中,丢包率会比较大。为了保证小程序和设备之间的数据交互是可靠的,需要在应用层设计一些应答以及超时重发的机制。
目前适配了乐鑫ESP-TOUCH协议;
WiFi配网指的是,由外部向WiFi设备提供SSID和密码(PSW),让WiFi设备可以连接指定的热点或路由器并加入后者所建立的WiFi网络。对于具备丰富人机界面包括屏幕/键盘的设备比如电脑或者手机,可以直接输入SSID/PSW来进行连接,而对于不具备丰富人机交互界面的物联网WiFi设备比如智能灯、扫地机器人等,则可以借助手机等智能设备,以某种配网方式将SSID/PSW告诉该设备。
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方式配网及设备绑定的示例流程图:
腾讯连连小程序进入配网模式后,会从物联网开发平台服务获取到当次配网的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上报的结果
{"cmdType":2,"deviceReply":"Current_Error","log":"ESP WIFI connect error! (10, 2)"}
这里对于在腾讯物联网平台新建产品的教程步骤 ,自行去查阅官方文档:点我,注册产品之后再新建一个设备拿到三元组!
这里不再多说 基本编译环境的搭建,参考学习我之前写的文章:
注意,目前2020.3.18号的依赖的是 ESP8266_RTOS_SDK 3.1 分支:
git clone --single-branch -b release/v3.1 https://gitee.com/xuhongv/ESP8266_RTOS_SDK.git
然后把 IDF_PATH 路径指向上面的文件夹!
这时候,开始下载腾讯云提供的 ESP8266 模组接入腾讯物联网平台的SDK开发资源包 :
https://gitee.com/xuhongv/qcloud-iot-esp-wifi
先修改设备三元组信息到HAL_Device_freertos.c
里面修改在腾讯云物联网平台注册的设备信息(目前仅支持密钥设备):
/* Product Id */
static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID";
/* Device Name */
static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME";
/* Device Secret */
static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK";
然后执行make menuconfig可进行功能配置,顶层菜单里面有对本示例的配置(QCloud IoT demo Configuration)
[*] To demo IoT Explorer (y) or IoT Hub (n)
Select explorer demo example (Smart light example) --->
[*] To use WiFi boarding (softAP) or not
(YOUR_SSID) WiFi SSID
(YOUR_WIFI_PW) WiFi PASSWORD
第二项可选择是先进入softAP配网模式(勾选)或者直接连接目标WiFi路由器(不勾选),配网模式需要与腾讯连连小程序进行配合;如果选择直接连接WiFi目标路由器,则后面两项可以用于配置要连接的WiFi路由器热点信息
再执行make就可以在build目录下面生成固件啦。
烧写镜像可以在Linux下面执行make flash命令,或者使用乐鑫在Windows烧录工具下载:
烧写成功之后可以重启开发板运行程序!当出现以下步骤,即可进去配网状态了:
I (352) boot: Loaded app from partition at offset 0x10000
,ծ�INF|1970-01-01 00:00:00|main.c|qcloud_demo_task(163): qcloud_demo_task start
INF|1970-01-01 00:00:00|qcloud_wifi_boarding.c|check_err_log(304): invalid magic code: 0xffffffff
INF|1970-01-01 00:00:00|qcloud_wifi_boarding.c|start_softAP(1417): enter softAP mode
ERR|1970-01-01 00:00:00|qcloud_wifi_boarding.c|wifi_ap_init(619): esp_wifi_disconnect failed: 12290
ERR|1970-01-01 00:00:00|qcloud_wifi_boarding.c|wifi_ap_init(625): esp_wifi_stop failed: 12290
mode : sta(f4:cf:a2:5b:b2:9b) + softAP(f6:cf:a2:5b:b2:9b)
add if0
add if1
bcn 100
INF|1970-01-01 00:00:01|qcloud_wifi_boarding.c|_wifi_event_handler(531): SYSTEM_EVENT_STA_START
INF|1970-01-01 00:00:01|qcloud_wifi_boarding.c|_wifi_event_handler(559): SYSTEM_EVENT_AP_START at channel 1
DBG|1970-01-01 00:00:01|main.c|qcloud_demo_task(174): waiting for boarding result...
INF|1970-01-01 00:00:01|qcloud_wifi_boarding.c|udp_server_task(1229): UDP server socket listening...
DBG|1970-01-01 00:00:03|main.c|qcloud_demo_task(174): waiting for boarding result...
DBG|1970-01-01 00:00:04|qcloud_wifi_boarding.c|udp_server_task(1298): wait for read...
DBG|1970-01-01 00:00:05|main.c|qcloud_demo_task(174): waiting for boarding result...
DBG|1970-01-01 00:00:07|main.c|qcloud_demo_task(174): waiting for boarding result...
DBG|1970-01-01 00:00:07|qcloud_wifi_boarding.c|udp_server_task(1298): wait for read...
DBG|1970-01-01 00:00:09|main.c|qcloud_demo_task(174): waiting for boarding result...
DBG|1970-01-01 00:00:10|qcloud_wifi_boarding.c|udp_server_task(1298): wait for read...
附加 qcloud_wifi_boarding.c 说明
微信搜索进去 “腾讯连连” 小程序 ,添加设备,扫描二维码,二维码在【交互开发】 > 【配网引导】中的最下面!
第一步,输入 2.4G频道的家庭Wi-Fi的密码!
第二步,自己打开手机Wi-Fi设置进去ESP8266发出的热点,默认名字是 ESP8266-SAP
,而密码是 12345678
!
第三步:返回来小程序,等待结果!如下所示即可成功,之后慢慢享受控制吧!
涉及到的数据交互,动作处理,我后面再为大家一一分析,时间不早了,晚安!
esp8266
带你飞、加群QQ
群,不喜的朋友勿喷勿加:434878850