智能硬件开发系列

  1. Google Protobuf 实践使用开发
  2. 智能硬件蓝牙配网方案概要
  3. JNI开发必学C++基础
  4. JNI开发必学C++使用实践
  5. Android Studio 4.0.+NDK项目开发详细教学
  6. Android NDK与JNI的区别有何不同?
  7. Android Studio 4.0.+NDK .so库生成打包
  8. Android JNI的深度进阶学习
  9. Android Studio 4.0.+NDK开发 This files is not part of the project


博客创建时间:2023.03.19
博客更新时间:2023.03.24

以Android studio build=7.0.0,SDKVersion 31来分析讲解。如图文和网上其他资料不一致,可能是别的资料版本较低而已。


前言

设备配网: 设备接入互联网并与用户的账户进行绑定,如果没有云端后台配网只完成了一半。 只有将设备归属到用户的账户下,用户才能控制、获取信息,此即绑定。

配网与绑定应该是一起谈论的。因为硬件设备没有操作交互界面且无强大的操作系统,配网的重点是如何让硬件难道接入网络的参数信息。

配网目的
1)配网是让设备接入互联网
2)脱离了服务端,缺少设备和用户的绑定关系,单纯的手机与蓝牙模块连接通信的过程并不是配网。

关键字
配网ssid、pwd:设备需要连接的路由器或热点的网络名称和密码

设备配网流程

智能设备的配网流程基本是一致的,不管是蓝牙配网还是AP或其他配网方式,大体步骤一样。

  1. 首先设备需要进入可配网状态,智能硬件一般需要经过某些步骤能恢复到可配网状态
  2. 智能硬件和手机APP之间建立连,连接方式可以是wifi或者蓝牙等多方式
  3. 连接建立成功后,将网络的ssid、pwd、证书、配网token等配网信息传输给智能硬件
  4. 智能硬件拿到信息参数后,通过WiFi模块或者4G、5G模块等方式连接互联网,然后在服务端中进行注册与用户进行关系绑定,配网完成
    在这里插入图片描述

蓝牙配网流程

个人总结蓝牙配网的操作步骤分为如下几步:

  1. 开始配网,App功能页面中点击功能按钮,开始蓝牙配网流程
  2. App进行蓝牙权限检查,蓝牙权限授予成功进入下一步,授予不成功则进行弹框提示
  3. 蓝牙开关检查,蓝牙不可用则提示用户打开蓝牙,蓝牙未打开则通过代码打开蓝牙
  4. 手机蓝牙状态判断,如果手机已与目标设备建立连接则算蓝牙配对成功,否则手机需要进行蓝牙的扫描用户手动配对连接
  5. 蓝牙扫描配对,当前面各种逻辑走过需要蓝牙扫描配对时,需要用户主动点击按钮发起蓝牙扫描和配对。
    蓝牙扫描配对后,可能出现未扫描到设备、配对失败、配对成功等多种情况,App针对各情况进行对应处理
  6. 设备接入互联网,设备与APP建立通信连接后,app将配网信息(网络连接信息和配网token)传递给设备,设备会先连接互联网
  7. 配网注册,设备连接到互联后,然后在服务后台中进行注册(如涂鸦或自研服务器),注册成功后通知到APP,那么配网流程就走完了
    在这里插入图片描述

1. 蓝牙权限检查

蓝牙的配对连接能成功对Android 6.0及以上有一个前提条件:要有蓝牙权限和位置定位开启。
蓝牙权限检查不通过,不能进行蓝牙的其他操作。检查不通过的原因应该弹出提示给用户
在这里插入图片描述

位置权限
在Android 高版本中,蓝牙扫描需要打开位置定位开关,打开后蓝牙才能进行扫描设备。 定位开关Android中需要跳转到系统页面进行打开

权限申请顺序
蓝牙权限授予后,才继续进行定位开关的打开,如果蓝牙权限未授权,后续操作无意义。

2. 蓝牙开关检查

蓝牙使用中,蓝牙必须是开启状态,才能进行后续操作,否则其他操作无意义。检测蓝牙是否开启前需要进行蓝牙权限授权,通过方可进行后续。
在这里插入图片描述
蓝牙硬件可用判断
用户的手机各种各样,有可能使用中蓝牙模块已经损坏,在使用时可以进行判断并进行必要的提示。


3. 蓝牙状态判断

当进行手机蓝牙配对连接时,当前面的流程已经走过后,可能需要先判断一下蓝牙是否已经连接成功且是与目标设备建立的连接,如果是则可以直接判定蓝牙配对连接成功,否则需要进行扫描重新配对连接。
在这里插入图片描述

4. 蓝牙扫描配对

当蓝牙已检查开启可用且获得权限后,可以进行蓝牙的扫描,并计划进行配对连接。蓝牙配对成功是执行后续智能硬件配网的前提。
在这里插入图片描述
蓝牙搜索
蓝牙搜索会在一定时间内进行结果反馈,搜索结束后会出现两种情况:
1)搜索到设备:设备可能有一个或多个被扫描到
2)未搜索到设备:此时搜索页面会提示未搜索到设备,用户可以排查后重新搜索。

5. 连接互联网

当设备和APP建立连接后,接下来就可以进行设备接入网络的操作了。
1)App通过蓝牙连接向设备发送获取wifi列表指令
3)当设备得到WiFi扫描指令后,会自动进行Wifi扫描并将结果反馈给App,App获取Wifi列表
4)App获得wifi列表后选择一条可访问互联网WiFi热点,将热点的ssid和密码、配网token等信息传输给设备
5)设备在获取到可用准确的配网信息后,会先连接如路由器热点接入互联网
在这里插入图片描述
发送获取wifi列表指令
App发送指令给设备,获取设备的可用wifi列表信息。此流程中需要注意如下几点
1)过程中需要进行蓝牙连接状态的判断,此时蓝牙是连接状态设备才能收到指令
2)该指令设备可能由于某些原因未收到,需要采取机制进行判定,然后提示用户重新发送指令

6. 配网注册

设备连接互联网成功后,就可以进行将设备信息注册到服务平台,同时通知注册结果到APP。设备进行服务端注册是为了让设备和APP用户间形成绑定关系,方便绑定的用户控制设备,排除其他指令干扰
在这里插入图片描述


配网异常处理

1. 配网失败

常见的配网失败原因可能有如下:

【注1】蓝牙配对不成功
蓝牙配对过程中,可能会失败,配对失败后进行最多3次的重连,如重连3次后还没成功,则提示用户可能的失败原因,让用户排查后,重新发起 蓝牙扫描配对 流程,
1)设备或手机 蓝牙已关闭
2)设备蓝牙可能已与其他设备连接
3) 手机或设备的蓝牙硬件已损坏

【注2】 ** 无法获取wifi列表**
手机软件未接收到蓝牙可用wifi列表,可能是wifi信号太弱、设备硬件故障。 此无可用Wifi列表返回的情景,通信中硬件应给软件反馈一个异常resultCode

【注3】 扫描不到wifi的特定原因
根据【注1】中的resultCode判定,如果是类似wifi信号太弱,硬件偶发性故障造成的 设备扫描可用wifi列表失败,此时是应该允许设备重新扫描wifi,并将信息再次传递给手机软件

【注4】 wifi连接不上原因
1)配网信息包括wifi的ssid、pwd、后台域名、uid及配网code等基础信息错误
2)wifi模块是否损坏
3)连接时,wifi热点是否已关闭

2. 通信异常处理

在设备与App进行蓝牙通信过程中,很多操作指令及操作回调都需要在蓝牙通信连接成功且可正常通信的前提下,否则可能出现指令操作一直无响应,用户傻等的情况。对于解决方案一般有如下解决方案

  1. 指令进行响应超时处理,发送某些指令后如果在指定时间内无响应反馈,则判定操作失败,需要先检测通信链路是否正常,然后根据需要进行处理
  2. 当通信链路正常,但是反馈操作失败时,可以采取重试操作,当然要限制重试次数,超过如3次,操作依然失败则结束操作

蓝牙数据分包

因为蓝牙BLE数据传输比较小,如果硬件不支持扩大,一般支持20byte大小的数据。如果指令数据数据在APP<—>BLE BT过程中数据超过20byte,则发送前需要进行数据的切割分包。

在蓝牙数据传输过程中,如突然断开链接等特殊情况,可能会有蓝牙数据的丢包,所以蓝牙数据分包时应该有一定的规则和校验机制 。如:

1byte1byte1byte1byte1 - 15byte1 byte
0xC4Total packagCurrent package numTotal data lengthapp_codecheck
  • Total package: 数据总包数
  • Current package num:当前包index,从0x00开始编号;
  • Total data length:数据总长度
  • data:改包有效数据
  • check_sum:CRC校验

其他配网方式

1. AP配网(softAP模式)

优点:稳定、快速,成功率高,成功率接近100%
缺点:流程相对较长,耗时

主要流程:

  1. 设备进入 AP 模式(开机自动建立或按键操作)并且建立一个 AP 热点(设备说明书或者机身标签贴上会写明人点的 SSID 和 Password)
  2. 用户手动在手机 Wi-Fi 设置中输入设备热点的 SSID 和 Password 与设备建立局域网连接
  3. 用户在 App 中输入要连接的路由器 SSID 和 Password 并发送给设备,设备切换到 station 模式(即终端模式)并连接路由器
  4. 用户手动将手机 Wi-Fi 网络切回到当前的路由网络中等待设备入网。

2. 二维码配网

优点: 配网方便新颖,流程简单
缺点: 需要摄像头,加大成本
二维码配网的方式,是将硬件获取网络ssid、pwd等信息的方式由扫二维码获取得到。
无法复制加载中的内容

3. 声波配网

使用声波通信来实现wifi配网其实很简单,其核心就是把wifi热点的名字和密码通过声波传输给智能硬件,然后智能硬件通过wifi热点的名字和密码连接wifi热点从而完成wifi配网

流程:

  1. 在手机中安装智能硬件的app。
  2. 打开app,输入wifi热点名字和密码,点击自动配网按钮。这时app会通过声波库把wifi热点名和密码编码成声音播放出去,循环播放。
  3. 开启智能硬件,按下配网键,这时智能硬件开始录制声音,并把录制到的声音交给声波库去解码,解码成功后得到wifi热点名和密码,然后停止录音。
  4. 智能硬件使用wifi热点名和密码连接wifi热点,进行平台注册配网

优点:

  1. 操作简单。成本低。仅需智能硬件端支持录音模块就可以了
  2. 兼容性好。市面上绝大多数智能硬件都可以使用声波配网。
  3. 成功率高。声波的识别率比较高,一般在98%以上。
  4. 趣味性强。可以使用定制的声波,比如狗叫,猫叫,窍门声等作为传输用户名和密码的媒介,进一步增加智能硬件的附加值。
    缺点:
  5. 声波通信的有效距离一般小于10米,所以范围比较有限。

4. 一键配网

  1. APP直接连接到路由,将将ssid和pwd及自定义的一些信息编码,以UDP报文格式通过广播包或组播包发送
  2. 智能设备进入Sniffer模式抓取空气中的广播或者组播包。
  3. 抓包成功后,解析得到正确的ssid和pwd及自定义信息,然后连接路由。
  4. APP广播发现设备,配网完成。
    在这里插入图片描述

优点:
5. 速度快、操作简单

缺点:
6. 成功率低,主要不同厂商WiFi兼容性很差,比如有的路由器能够发广播包、有的WiFi Soc芯片不能抓到广播包,适合定制系统的toB产品,不适合toC产品


总结

智能硬件配网不管是蓝牙、AP还是其他方式,配网的核心目的和手法是不变的,都是将可用网络的ssid 和 密码告诉智能硬件,使固件能在服务端进行注册实现固件和用户之间的一一绑定关系


相关链接

  1. Google Protobuf 实践使用开发
  2. 智能硬件蓝牙配网方案概要
  3. JNI开发必学C++基础
  4. JNI开发必学C++使用实践
  5. Android Studio 4.0.+NDK项目开发详细教学
  6. Android NDK与JNI的区别有何不同?
  7. Android Studio 4.0.+NDK .so库生成打包
  8. Android JNI的深度进阶学习
  9. Android Studio 4.0.+NDK开发 This files is not part of the project

扩展链接:

  1. Lottie动画 轻松使用
  2. PNG、JPG等普通图片高保真转SVG图
  3. Android 完美的蒙层方案
  4. Android MMKV框架引入使用
  5. 强大无匹的自定义下拉列表

博客书写不易,您的点赞收藏是我前进的动力,千万别忘记点赞、 收藏 ^ _ ^ !

更多推荐