IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> ESP32学习笔记 -- (3)使用蓝牙BluFi进行设备配网 -> 正文阅读

[网络协议]ESP32学习笔记 -- (3)使用蓝牙BluFi进行设备配网

嵌入式软件工程师使用ESP32进行物联网开发,有些内容是必须要学习的,比如网络通信TCP/IP、UDP,应用层协议HTTP,MQTT,设备升级操作OTA,设备配网操作BluFi和SmartConfig,还有一系列物联网相关的知识点,如下图前几天在微信群里面讨论的:

?今天来分享一下,如何通过蓝牙BluFi进行ESP32设备配网。

首先回答一下,为什么要进行配网?这是因为,现在很多联网设备都是没有屏幕和键盘的,比如天猫精灵、小爱同学这些智能音箱,还有一些可联网的灯具,等等。要让这些设备知道家里路由器的账号和密码,就不能像带屏设备一样直接输入,而是要通过一些特定的方法,把路由器的账号和密码告知这些待联网的设备。

现在很多WiFi SOC,基本上都支持SmartConfig这种配网方式,这种方式是基于UDP来传递路由器的WiFi配置信息的。而玩过ESP32的工程师都知道,ESP32支持WIFI和蓝牙双模,所以,ESP32支持使用蓝牙(BluFi)来传输WiFi配置信息,而且这种方式更加安全稳定可靠。

关于ESP32的蓝牙配网BluFi使用文档,官方已经有比较详细的描述,在官方的ESP32-IDF框架里面,也提供了参考的例程。参考例程的路径如下:esp-idf/examples/bluetooth/blufi

官方参考文档链接:

https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-guides/blufi.html

文档对新手初学者来说不太友好,因为里面涉及了很多基本的概念,比如数据分片,对称/非对称加密,校验和验证,BLE蓝牙广播,蓝牙连接与数据传输过程,BLE GATT客户端和服务器。

官方文档提供了一个BluFi配网流程图,整个流程大致可以分为4个阶段,这四个阶段如下图所示:

?第①阶段:ESP32发出特定的数据广播,手机搜索出这个特定广播并与ESP32建立蓝牙连接,蓝牙连接建立后手机获取GATT服务,此时,BLE通信链路已建立。

第②阶段:基于①阶段建立的蓝牙链路,进行通信密钥协商,这个协商过程是基于非对称加密的DH算法,得出一对密钥,这对密钥是提供给第③阶段使用的。

第③阶段:第②阶段协商过程结束后得出的密钥,可以用于第③阶段WiFi配置信息的传输加密,这些配置信息包括ESP32的工作模式,安全模式,WiFi账号和密码,其他信息,等等。

第④阶段:第③阶段结束后,ESP32已经完成了基本的信息配置,最后向手机报告自身的连接状态,此时配网完成,配网过程结束,ESP32与手机的蓝牙连接依旧保持。

ESP32使用BluFi进行配网,由于BLE蓝牙的数据载荷限制,一个数据帧传输的数据量比较有限,因此,BluFi在传输配网信息过程中,需要遵循一定的数据格式,这些数据格式,在官方文档里面有很详细的描述,如下图所示。

?以上这些数据格式的分包和组包,在ESP32提供的BluFi Demo里面已经有参考代码,开发者可以适当参考一下整个分包和组包的过程,而对于应用开发来说,这些过程是封装好的,应用层不需要过于关心,大概了解即可。

ESP32对数据传输的安全性和稳定性是比较重视的,为了保证数据安全,在密钥协商的时候,用了非对称加密DH算法,在WiFi配置数据传输的时候,用了对称加密AES-128。为了保证数据完整,使用了CRC校验和算法。还有一系列保证身份安全和防止重放攻击的算法。

开发者可以根据自身的实际需要,在BluFi代码里面使用不同的加解密算法,如下图所示。

?分析一下BluFi的源代码,app_main是源码入口函数,在这个函数里面,主要进行了前期的一些必要初始化工作,包括NVS初始化,WIFI使用默认参数初始化,BLE使用默认参数初始化,获取BluFi的版本,以及注册相关的回调函数,具体如下图所示。

?WiFi事件和IP事件处理,这两个处理函数在用到WiFi联网的时候,几乎是必须的,因为应用层需要时刻关注WiFi的连接和断连情况,以及IP的获取情况,以便判断网络是否出现异常,在进行WiFi初始化的时候,需要注册这两个事件回调函数,如下图所示。

?WiFi事件处理函数wifi_event_handler和IP事件处理函数ip_event_handler,由于代码篇幅太长,具体实现请查看源码工程。

BluFi工程里面还有一个重要的事件回调函数,是用来处理BluFi事件的,包括BluFi初始化完成事件,蓝牙连接成功和断开连接事件,配置WiFi工作模式事件,获取WiFi账号密码事件,使用BLE传输用户数据事件,等等,具体实现如下图所示。

?开发者还可以使用BLE链路来传输收发一些用户数据,在示例工程里面,我们把ESP32接收到的手机端收据,完整地回传到手机端,代码函数接口如下图所示。

?整个工程源码已经上传到Gitee,可以使用以下命令进行下载:

git clone https://gitee.com/embediot/esp32_test_demo.git

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:45:12  更:2021-09-02 11:46:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:37:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码