ESP32的SDK開發之blufi一鍵配網
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之micropython 配網程式碼Python
- ESP32的SDK開發之window系統下eclipse開發環境搭建Eclipse開發環境
- iphone 適配的sdkiPhone
- 開發美顏SDK的關鍵技術有哪些?
- ESP32 Arduino開發 MQTTUIMQQT
- ESP32開發學習
- VS Code 與 ESP32 官方SDK配置
- .Net微信網頁開發之使用微信JS-SDK呼叫微信掃一掃功能網頁JS
- SDK開發
- Android開發之螢幕適配Android
- ESP32的Linux開發環境搭建Linux開發環境
- Pycharm使用MicroPython開發ESP32PyCharmPython
- [基礎篇]ESP8266-SDK教程(一)之開發環境搭建開發環境
- 同程旅遊網開放平臺SDK開發完成
- Arduino手動安裝ESP32開發包UI
- Arduino自動安裝ESP32開發包UI
- .Net微信網頁開發之使用微信JS-SDK自定義微信分享內容網頁JS
- 對 Android SDK 開發的一些個人心得Android
- iOS開發筆記之Xcode9.2下SDK開發-生成Framework的圖解流程iOS筆記XCodeFramework圖解
- HarmonyOS NEXT應用開發之深色模式適配模式
- 老鐵,一起來開Party(一) —— 聲網Agora SDK整合Go
- Win11開發全新右鍵選單,WinRAR已完成適配
- 影片SDK開發,多平臺SDK快速接入
- 美顏sdk人臉配準技術發展現狀
- 隨想錄:開發一流Android SDKAndroid
- iOS上開發的一個安全鍵盤iOS
- 微信Java SDK開發文件Java
- 轉載-iOS SDK開發iOS
- ArcObjects SDK開發 024開發的技術和技巧Object
- Android開發之平板和橫豎屏適配-RecyclerViewAndroidView
- 一個人的網站開發網站
- 【esp32 專案】中斷讀取按鍵
- Spaces SDK:專為實時協作功能開發設計的SDK
- iOS之BLE藍芽SDK開發個人總結(進階篇)iOS藍芽
- iOS之BLE藍芽SDK開發個人總結(基礎篇)iOS藍芽
- 一套基於 .NET Core 開發的支付SDK集 - paylink
- ArcObjects SDK開發 一些可直接呼叫的對話方塊Object
- 前端監控SDK開發分享前端