惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Project Zero
Project Zero
F
Fortinet All Blogs
Recent Announcements
Recent Announcements
云风的 BLOG
云风的 BLOG
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
M
MIT News - Artificial intelligence
S
SegmentFault 最新的问题
Blog — PlanetScale
Blog — PlanetScale
T
Tailwind CSS Blog
WordPress大学
WordPress大学
Engineering at Meta
Engineering at Meta
S
Schneier on Security
N
News and Events Feed by Topic
N
News | PayPal Newsroom
H
Help Net Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
The Exploit Database - CXSecurity.com
Attack and Defense Labs
Attack and Defense Labs
博客园 - Franky
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
A
About on SuperTechFans
AWS News Blog
AWS News Blog
S
Secure Thoughts
The Cloudflare Blog
Hugging Face - Blog
Hugging Face - Blog
爱范儿
爱范儿
C
Cybersecurity and Infrastructure Security Agency CISA
V2EX - 技术
V2EX - 技术
Recorded Future
Recorded Future
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
MyScale Blog
MyScale Blog
Martin Fowler
Martin Fowler
Help Net Security
Help Net Security
人人都是产品经理
人人都是产品经理
Latest news
Latest news
C
Cyber Attacks, Cyber Crime and Cyber Security
大猫的无限游戏
大猫的无限游戏
The Last Watchdog
The Last Watchdog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
月光博客
月光博客
H
Hacker News: Front Page
P
Proofpoint News Feed
N
News and Events Feed by Topic
H
Heimdal Security Blog
L
Lohrmann on Cybersecurity
有赞技术团队
有赞技术团队
L
LangChain Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog

Java技术经验分享

生产故障处理SOP分享 | Java技术经验分享 系统稳定性建设实践总结【转载】 | Java技术经验分享 valine访问leancloud国际版异常,评论失效修复 | Java技术经验分享 匆匆忙忙的2021 | Java技术经验分享 聊一下换工作 | Java技术经验分享 IoT系列(1):什么是物联网 | Java技术经验分享 Java8特性2 - StreamApi | Java技术经验分享 Java8特性1 - lambda表达式&函数式接口 | Java技术经验分享 设计模式(5)-适配器模式 | Java技术经验分享 设计模式(4)-建造者模式 | Java技术经验分享 设计模式(3)-原型模式与浅拷贝和深拷贝 | Java技术经验分享 设计模式(2)-工厂模式图文介绍 | Java技术经验分享 设计模式(1)-带你了解3类8种单例模式 | Java技术经验分享 Java时间处理5---Java8中时区相关类库介绍 | Java技术经验分享 Java时间处理4---Java8中LocalDate、LocalTime、LocalDateTime介绍 | Java技术经验分享 Java时间处理3---Java8中Instant、Duration、Period、Clock介绍 | Java技术经验分享 一些有意思的问答 | Java技术经验分享 Nacos系列博客说明 | Java技术经验分享 菜鸡程序员的2019年度总结 | Java技术经验分享 Java中“附近的人”实现方案讨论及代码实现 | Java技术经验分享 Java时间处理2----时区TimeZone类方法探究(Java8以前) | Java技术经验分享 Java时间处理1----Date和Calendar方法探究(Java8以前) | Java技术经验分享 FastJson中JSONString、JavaBean、JSONObject、JSONArray的转换关系及API示例 | Java技术经验分享 2019.11软考软件设计师归来心得体会及复习备考指南 | Java技术经验分享 你还没用过“约定式提交”吗?那你赶紧来补补知识吧 | Java技术经验分享 教你如何看懂UML中的类图及类图中的关系 | Java技术经验分享 设计模式总览 | Java技术经验分享 萌新入门Github请看这里,学不会远程教 | Java技术经验分享 Hexo的工作原理探究 | Java技术经验分享 Hexo-theme-butterfly修改调整记录教程 | Java技术经验分享 排序8:基数排序 | Java技术经验分享 排序7:归并排序 | Java技术经验分享 排序6:快速排序 | Java技术经验分享 排序5:冒泡排序 | Java技术经验分享 排序4:堆排序 | Java技术经验分享 排序3:选择排序 | Java技术经验分享 排序2:希尔排序 | Java技术经验分享 排序1:直接插入排序 | Java技术经验分享 推荐一款博客一文多发的良心工具OpenWrite | Java技术经验分享 近期学习计划 | Java技术经验分享 Nacos(九):Nacos集群部署和遇到的问题 | Java技术经验分享 Nacos(八):Nacos持久化 | Java技术经验分享 Nacos(七):Nacos共享配置 | Java技术经验分享 Nacos(六):多环境下如何“管理”及“隔离”配置和服务 | Java技术经验分享 Nacos(五):多环境下如何“读取”Nacos中相应的配置 | Java技术经验分享 Nacos(四):SpringCloud项目中接入Nacos作为配置中心 | Java技术经验分享 Nacos(三):Nacos与OpenFeign的对接使用 | Java技术经验分享 Nacos(二):SpringCloud项目中接入Nacos作为注册中心 | Java技术经验分享 Nacos(一):Nacos介绍 | Java技术经验分享 20190719小组分享 | Java技术经验分享 Java中equals和HashCode方法的分析 | Java技术经验分享 Java中==和equals方法的分析 | Java技术经验分享 Java中的自动拆装箱、装箱缓存 | Java技术经验分享 About-blog | Java技术经验分享 Java中的编译、反编译和反编译工具全家桶分享 | Java技术经验分享 finalize()的生命周期(执行过程) | Java技术经验分享 Java关键字之final、finally与finalize方法 | Java技术经验分享 Java中重写、重载 | Java技术经验分享 Java中面向对象的三大特征:继承、封装、多态 | Java技术经验分享 DockerFile介绍 | Java技术经验分享 Docker环境下安装Gitlab | Java技术经验分享 Docker中私有仓库的搭建流程 | Java技术经验分享 Centos7下两种方式安装Docker-CE | Java技术经验分享 Vert.x创建一个Http服务 | Java技术经验分享 Vert.x创建TCP服务端及客户端 | Java技术经验分享 Vert.x Core(二)- Event Bus(事件总线) | Java技术经验分享 Vert.x-Core(一)- 基础篇 | Java技术经验分享 SpringBoot项目中实现国际化 | Java技术经验分享 Vert.x介绍 | Java技术经验分享 毕设选题项目本地运行环境搭建教程 | Java技术经验分享 Jupyter Notebooks的安装和使用介绍 | Java技术经验分享 算法笔试题:1元,5元,10元,20元,50元、100元面值人民币组合给定x元的问题 | Java技术经验分享 Quartz学习总结 | Java技术经验分享 SpringBoot2.x集成Redis | Java技术经验分享 SpringBoot2.x集成MongoDB | Java技术经验分享 [SpringCloud学习] - 浅谈微服务架构 | Java技术经验分享 基于hexo和coding免费搭建个人博客网站 | Java技术经验分享 Hello World | Java技术经验分享
IoT系列(2):WIFI设备常见配网方案介绍 | Java技术经验分享
文章作者: LarsCheng · 2021-01-15 · via Java技术经验分享

前言

本文讨论目前市面上基于WIFI智能设备的配网方案,结合自身开发案例,对不同的配网方案进行对比介绍。

阅读本文你可以了解到如下几种配网方案:

  1. 一键配网
  2. 设备热点配网
  3. 零配
  4. 手机热点配网

设备配网说明

提到设备配网这一流程,通俗的理解就是让设备连上网,本文主要就WIFI智能设备的配网展开讨论,目前市面上常见的配网方案都绕不开以下几个步骤:

  • WIFI设备拿到某一wifi的SSID和Password
  • APP拿到WIFI设备的唯一编号
  • APP用户发起设备绑定请求
  • WIFI设备发起入网请求

下面我们针对不同的配网方案来注意分析器配网流程

一键配网

如果你近几年购买过一些智能灯具、智能插座等等WIFI设备,那么大概率他的配网方式就是一键配网

因为一键配网方案,用户操作简单,只需要录入wifi的ssid和password,即可等待设备完成配网。

正如此一键配网几乎是智能设备的通用标准,但是它最大的痛点就是成功率低,特别低!!!

下面一起来看下一键配网的实现原理:

一键配网

  1. 手机提前连接至路由器wifi
  2. APP中输入ssid和密码点击配网,开始进行广播
  3. WIFI智能设备抓取广播包,拿到wifi信息,连接至路由器
  4. WIFI设备连接至路由器后,将自身唯一编号MAC进行局域网广播
  5. 手机APP收到设备广播的MAC编号,向服务器发起设备绑定

从步骤上来看,没有任何毛病,但是在实际的用户配网过程中会出现各种各样的问题,导致用户体验极差,配网成功率极低

  • 路由器兼容性:部分型号的路由器不支持或者禁止发送广播包,直接导致配网永远无法成功,并且用户无法排查
  • 手机兼容性:WIFI设备连接的频段和手机连接的频段不同,导致双方无法收发广播包,例如5G和2.4G频段
  • wifi同名:如果设备附近有多个同名的ssid信号,极有可能设备会无法连接到正确的路由器
  • 等等一些稀奇古怪的问题

看似用户操作方便,并且使用率极高的配网方式,实际操作中有很苛刻的配网条件,这也是一键配网让人又爱又恨的地方

如果有新的WIFI智能设备项目,不建议选用一键配网方案!

设备热点配网

既然一键配网成功率这么低,那有没有成功率高的方案呢,当然是有的:设备热点配网

由于它出众的配网成功率,很快成为wifi设备配网的新宠,像米家的摄像头就采用的这种配网方式

一起来看看他的实现原理:

设备热点配网

  1. WIFI设备进入AP模式,对外提供一个wifi热点
  2. 用户手机连接此wifi,然后通过APP将路由器的SSID和密码发送给WIFI设备
  3. WIFI设备收到SSID信息后将唯一编号MAC发送给APP
  4. 手机APP收到MAC编号,向服务器发起设备绑定【预绑定】
  5. 设备连接路由器联网,向服务器发起入网【激活绑定】

设备热点配网时首先由设备AP模式,手机STA模式,去连接到设备热点上,进行数据传输

整个过程不需要通过路由器广播数据,所以不存在路由器兼容性,也不存在信号频段问题

唯一的风险点就是用户通过APP输入SSID和密码错误,导致设备无法联网。

针对这一风险点,在绑定流程上设计了预绑定和激活绑定:
app携带用户id和设备mac发起预绑定,如果设备正常联网上线,那么绑定生效,设备激活;如果设备拿到了错误的ssid信息一定时间内没有上线,那么清除预绑定记录。

设备热点配网相对于一键配网几乎没有任何额外的成本增加,在尽量不增加用户操作复杂度的前提下,极大的提高了配网成功率,这也是当下新的WIFI设备配网首选方案。

零配

零配,我最早在天猫精灵系列设备的配网方案中遇到过,这是一种特定场景的配网方案,大致思路是通过已经配网成功的设备(智能音箱)给新的设备进行配网,实现真正意义上的零配置配网

现在大部分的智能音箱联动场景中都支持零配方案。

先看一下的的实现步骤:

零配

前提:通过其他方式已经完成配网的智能设备(天猫精灵),与服务器连接正常,并存有路由器SSID信息

  1. 手动触发WIFI设备将自己MAC信息通过Sniffer报文发送到天猫精灵
  2. 天猫精灵收到设备MAC信息后,将本地保存的路由器SSID信息发送给WIFI设备
  3. 天猫精灵向服务器发起该设备的预绑定请求
  4. WIFI设备连接路由器联网,并向服务器发起激活绑定请求

该方案需要有一台已经联网的智能设备,并且该设备保存了用户信息和路由器SSID信息,优化掉了用户手动输入SSID和密码的步骤,进一步简化了用户配网操作。

在实际使用中,用户开启WIFI设备后,只需要对天猫精灵说一句“找队友”即可完成配网,可以说用户的配网体验感很好。

手机热点配网

这种方案和设备热点配网方案比较相似,从名字能看出来,这种方案的热点是由手机提供。同样都是为了解决路由器兼容性而提出的解决方案。

这种方案在阿里IoT中被作为一键配网失败后的补救措施。当一键配网失败后,用户可以通过手机设置特定的wifi热点,设备连接到手机热点上后进行信息交互。

原理图如下:

手机热点配网

流程基本上和设备热点方案类似,区别就是提供热点的是手机端

不过在实际应用中,使用率不是很高,一方面用户操作复杂度过高,可能用户完全不知道如何开启手机热点。另一方面能想到手机热点配网方案,肯定会采用设备热点配网方案了。

所以总的来说,该方案成功率相对较高,但是用户操作复杂度也随之增大,可以作为其他方案失败后的备选方案,但并不推荐使用,毕竟用户体验是第一位

总结

总结一下上面提到的四种方案的特点:

方案 使用率 成功率 用户体验 路由器兼容性 频段兼容性 手机兼容性 使用场景
一键配网 差(不支持广播) 差(2.4G/5G) 不推荐使用
设备热点配网 WIFI配网首选方案
零配 优(免输入SSID信息) 音箱联动场景推荐
手机热点配网 差(手动开启热点) 不推荐使用

以上四种配网方案也是我目前工作中接触到的一些常用方案,为了方便理解,简化了各种方案的细节,实际通讯和交互流程会更为复杂。

当然除了这些,也有一些其他方案比如路由器热点配网方案WEB配网方案等等,这些方案都因为需要特定场景和复杂流程等因素逐渐不被经常使用。