概述
ESP32 是集成 2.4 GHz Wi-Fi 和蓝牙双模的单芯片方案,采用台积电 (TSMC) 超低功耗的 40 纳米工艺,拥有最 佳的功耗性能、射频性能、稳定性、通用性和可靠性,适用于各种应用和不同功耗需求。
ESP32这款模块可以说在物联网开发硬件中性价比极高的,开发应用可以说无所不能了,这里就不一一介绍了。
ESP32支持一键配网方式有3中,airkiss、smartconfig、blufi,本文主要讲讲blufi这种方式。
由于加密和检验过程较为繁琐,暂时采用无检验无加密的方式实现。
blufi是基于低功耗蓝牙BLE实现的一种配网方式,下面来详细解答一下乐鑫官方blufi的协议,官方说明文档。
传输格式
Description | Value |
---|---|
LSB - Type | 1 |
Frame Control | 1 |
Sequence Number | 1 |
Data Length | 1 |
Data | ${Data Length} |
MSB - CheckSum | 2 |
1、Type
类型域,占 1 byte。分为 Type 和 Subtype(子类型域)两部分, Type 占低 2 bit,Subtype 占高 6 bit。
Type(低 2 bit):=0,为控制命令,=1,为数据命令
Subtype (高 6 bit):根据低2位的Type命令选择相应的Subtype,具体见官方说明文档。
2、Frame Control
帧控制域,占 1 byte,每个 bit 表示不同含义,具体见官方说明文档。
3、Sequence Control
序列控制域。帧发送时,无论帧的类型是什么,序列 (Sequence) 都会自动加 1,用来防止重放攻击 (Replay Attack)。每次重现连接后,序列清零。
4、Length
Data 域的长度,不包含 CheckSum。
5、Data
不同的 Type 或 Subtype,Data 域的含义均不同。请参考官方说明文档。
6、CheckSum
此域为 2 byte 的校验,用来校验『序列 + 数据长度 + 明文数据』。
软件实现:位置:blufilibrary->java->blufi.espressif->BlufiClientlmpl.java->getPostBytes()
具体软件实现操作
1、ESP32进入blufi模式
串口打印
[0;32mI (12509942) BLUFI_EXAMPLE: BD ADDR: 30:ae:a4:f1:ee:7e
[0m
[0;32mI (12509952) BLUFI_EXAMPLE: BLUFI VERSION 0102
[0m
[0;32mI (12509952) BLUFI_EXAMPLE: BLUFI init finish
[0m
[0;32mI (12515562) BLUFI_EXAMPLE: BLUFI ble connect
[0m
2、蓝牙连接成功
串口打印
[0;32mI (12515562) BLUFI_EXAMPLE: BLUFI ble connect
[0m
3、手机发送将要连接的AP的password,具体说明请参考官方说明文档。
- Byte[0]=0x01; //加载命令,0x01为数据命令,0x00为控制命令
- Byte[0]=(0x03<<2) | Byte[0]; //加载数据帧,0x03表示发送AP的password
- Byte[1]=0x00; //加载帧控制域,无检验,无加密
- Byte[2]=sequence++; //序列控制域,没发送一次加1
- Byte[3]=8; //数据长度
- Byte[4]='p'; //data1,密码
- Byte[5]='a'; //data2,密码
- Byte[6]='s'; //data3,密码
- Byte[7]='s'; /data4,/密码
- Byte[8]='w'; //data5,密码
- Byte[9]='o'; //data6,密码
- Byte[10]='r'; //data7,密码
- Byte[11]='d'; //data8,密码
Byte[12]=checksumLSB; //data7,检验低位,无检验可以不要Byte[13]=checksumHSB; //data8,检验高位,无检验可以不要
串口打印
协议出错,error code 1表示检验出错
[0;31mE (12704272) BT_BTC: btc_blufi_recv_handler checksum error 7478, pkt 0262
[0m
[0;31mE (12704272) BLUFI_EXAMPLE: BLUFI report error, error code 1
[0m
发送成功
[0;32mI (12978592) BLUFI_EXAMPLE: Recv STA PASSWORD password
[0m
4、手机发送将要连接的AP的SSID,具体说明请参考官方说明文档。
- Byte[0]=0x01; //加载命令,0x01为数据命令,0x00为控制命令
- Byte[0]=(0x02<<2) | Byte[0]; //加载数据帧,0x02表示发送AP的SSID
- Byte[1]=0x00; //加载帧控制域,无检验,无加密
- Byte[2]=sequence++; //序列控制域,没发送一次加1
- Byte[3]=4; //数据长度
- Byte[4]='m'; //data1,密码
- Byte[5]='y'; //data2,密码
- Byte[6]='A'; //data3,密码
- Byte[7]='P'; /data4,/密码
Byte[8]=checksumLSB; //data7,检验低位,无检验可以不要Byte[9]=checksumHSB; //data8,检验高位,无检验可以不要
串口打印
协议出错,error code 1表示检验出错
[0;31mE (12704272) BT_BTC: btc_blufi_recv_handler checksum error 7478, pkt 0262
[0m
[0;31mE (12704272) BLUFI_EXAMPLE: BLUFI report error, error code 1
[0m
发送成功
[0;32mI (13109342) BLUFI_EXAMPLE: Recv STA SSID myAP
[0m
5、ESP32模组开始连接AP,具体说明请参考官方说明文档。
- Byte[0]=0x00; //加载命令,0x01为数据命令,0x00为控制命令
- Byte[0]=(0x03<<2) | Byte[0]; //加载控制帧,0x03表示连接AP
- Byte[1]=0x00; //加载帧控制域,无检验,无加密
- Byte[2]=sequence++; //序列控制域,每发送一次加1
Byte[3]=7; //数据长度,控制帧无需dataByte[4]='m'; //data1,密码,控制帧无需dataByte[5]='y'; //data2,密码,控制帧无需dataByte[6]='A'; //data3,密码,控制帧无需dataByte[7]='P'; /data4,/密码,控制帧无需dataByte[8]=checksumLSB; //data7,检验低位,无检验可以不要Byte[9]=checksumHSB; //data8,检验高位,无检验可以不要
串口打印
协议出错,error code 1表示检验出错
[0;31mE (12704272) BT_BTC: btc_blufi_recv_handler checksum error 7478, pkt 0262
[0m
[0;31mE (12704272) BLUFI_EXAMPLE: BLUFI report error, error code 1
[0m
发送成功,如果wifi名称和密码正确,服务器没问题,后续就会有下面的串口打印,同时模组会把模组的mac地址和连接的AP名称反馈回来,如下图是安卓客户端的界面
[0;32mI (13528252) BLUFI_EXAMPLE: BLUFI requset wifi connect to AP
[0m
I (13528382) wifi: n:1 1, o:1 0, ap:255 255, sta:1 1, prof:1
I (13529382) wifi: state: init -> auth (b0)
I (13529382) wifi: state: auth -> assoc (0)
I (13529392) wifi: state: assoc -> run (10)
I (13529632) wifi: connected with guichuankeji, channel 1
I (13529632) wifi: pm start, type: 1
[0;32mI (13530432) event: sta ip: 192.168.1.100, mask: 255.255.255.0, gw: 192.168.1.1[0m
[0;31mE (13530432) MQTT_EXAMPLE: Start MQTT_TCP……[0m
[0;32mI (13530432) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE[0m
[0;32mI (13532642) MQTT_CLIENT: Sending MQTT CONNECT message, type: 1, id: 0000[0m
[0;32mI (13532942) MQTT_EXAMPLE: MQTT_EVENT_CONNECTED[0m
[0;32mI (13532952) MQTT_EXAMPLE: sent subscribe successful, msg_id=35098[0m
[0;32mI (13533122) MQTT_EXAMPLE: MQTT_EVENT_SUBSCRIBED, msg_id=35098[0m
到这里表示配网成功……
最后
以上就是彪壮夏天为你收集整理的ESP32的SDK开发之blufi一键配网的全部内容,希望文章能够帮你解决ESP32的SDK开发之blufi一键配网所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复