日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ESP-TOUCH编码规则及解码

發布時間:2025/4/5 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ESP-TOUCH编码规则及解码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://blog.csdn.net/flyingcys/article/details/54670688

1.?概述

ESP-TOUCH是Espressif公司自主研究的一鍵智能配網工具,幫助用戶將使用ESP8266的硬件產品連接Wi-Fi網絡。用戶只需在手機上配合硬件產品進行簡單的操作即可實現智能配網連接Wi-Fi路由。

目前app是開源的,Android和ios代碼均可在github上下載到,設備端RTOS版本SDK和NON_OS版本SDK使用同樣的ESP-TOUCH。下載地址如下:

安卓版

https://github.com/EspressifApp/ESP-TOUCHForAndroid

最新版本:0.3.4.5

ios版

https://github.com/EspressifApp/ESP-TOUCHForIOS

最新版本:0.3.5.1

正式版app也可以各大應用市場下載到。同時ESP-TOUCH用戶指南手冊可在Espressif官網下載到,目前最新版本為30b-esp-touch_user_guide_cn_v1.1_20160412.pdf。目前官方對ESP-TOUCH持續優化中,應用時請使用最新版本的代碼。

ESP-TOUCH的設備端解碼Espressif沒有開源,提供的是一個smartconfig.a文件,但提供了sniffer接口供需要自己開發的鍵配網協議的用戶使用。sniffer接口使用指南也可在Espressif官網下載到,詳見esp8266-technical_reference_cn.pdf的第14章《sniffer應用設計說明》以及20a-esp8266_rtos_sdk_programming_guide_cn.pdf的第4部分《sniffer結構體說明》。

2.?ESP-TOUCH編碼原理

由于設備一開始并未連接Wi-Fi網絡,ESP-TOUCH無法直接向設備發送數據,ESP-TOUCH只能通過向手機當前接入的AP發送一系列UDP包,其中每一包的長度(Length字段)都按照ESP-TOUCH的通訊協議編碼,SSID和密碼就包含在Length字段中

?

受MTU長度限制,一個udp數據包Length最大只能傳輸10bit數據(最大1500byte),而udp數據包長度和丟包率/亂序率成正比,即數據包長度越長,丟包率/亂序率越高,所有一般將最大數據包長度限制在9bit以內

此時設備應工作在在混雜模式下,才能接收到ESP-TOUCH發送的數據包.在混雜模式下,設備將收到當前環境下所有環境下所有Wi-Fi設備(AP/STATION)數據,需要通過一定的算法,才能正確的識別到ESP-TOUCH的數據包.

3.?ESP-TOUCH編碼

ESP-TOUCH編碼由”GuideCode”+”DatumData”+”Data”3部分組成

1)?GuideCode:

GuideCode由515/514/513/512組成,4包為一組,需要連續發送10組以上;通過Wireshark抓包發現ESP-TOUCH官方APP不同版本,發送的前導碼數量并不完全一致

App版本

循環發送數量

前導碼重復規律

Android版ESP-TOUCH

10組

25組數據后重復發送10組

IOS版ESP-TOUCH

39組

98組數據后重復發送39組

Android版IOT Espressif

11組

25組數據后重復發送10組/9組

IOS版IOT Espressif

39組

98組數據后重復發送39組

?

Android版ESP-TOUCH

IOS版ESP-TOUCH

?

Android版IOT Espressif

IOS版IOT Espressif

?

2)?DatumData:

DatumData由5部分組成,分別為”totaldata_len”?+ ”password_len”?+ ”ssid_crc8”?+ “bssid_crc8”?+ “total_data xor”;

① totaldata_len:總數據長度1字節;

????固定5字節DatumData + ip地址長度+ password_len + [ssid_len];其中:ssid_len需要根據當前網絡是否隱藏判斷是否需要加入;如app上選擇為隱藏才需要加入

② password_len:密碼長度1字節

③?ssid_crc8:ssid的crc8結果1字節

④?bssid_crc8:bssid的crc8結果1字節

⑤?total_data xor:全部數據異或結果1字節

⑥?如當前ssid是隱藏網絡,totaldata_len須加ssid_len;同時Data區也須加ssid;否則不加此2項內容;但total_data xor必須加入ssid計算xor;

crc8采用標準多項式x8+x5+x4+1,依次對byte和seq做crc8校驗

DatumData發送完后發送Data

?

3)?Data:

Data由5部分組成,分別為:

?ip_address(4 byte) + ap_password + [ap_ssid]

其中ap_ssid需要根據當前網絡是否隱藏判斷是否需要加入;如app上選擇為隱藏才需要加入

?

4)?DatumData和Data發送規則:

一組由3包組成,每組傳送1字節有效數據,每包Length為9bit,每一組由如下格式數據組成:

?

control byte

high 4 bits

low 4 bits

1st 9bits

0x0

crc(high)

data(high)

2nd 9bits

0x1

sequence header

3rd 9bits

0x0

crc(low)

data(low)

①?sequence header:?從0開始,每一組數據加1

②?ssid是否發送,需要根據當前網絡是否為隱藏網絡,如是隱藏網絡則須發送ssid;否則不發送

③?每一包數據內的3個數據在組包完成后都須+40

4.?ESP-TOUCH解碼

我們將手機連接上路由,在手機上通過安卓版Esp_touoch發包,并在PC上通過Wireshark抓包。其中路由器名稱為“360wifi”,密碼為“1234567890”。我們可以看到在Wireshark上抓到有規律的數據包:

1)?GuideCode:

在設備上,我們接收到的實際數據包長度為557/556/555/554,按照編碼規則對應515/514/513/512。所以,我們就可以獲取到數據包基準值為554-512=42,這個基準值將用在后續解碼中,非常重要,故必須先快速、準確的獲取基準值。該基準值會應該路由器加密方式不同或者手機設備不同而不同。

l?基準值:42

2)?DatumData與Data

正確獲取到GuideCode的基準值后,我們在接收到余下的數據包后,將數據包長度減去基準值,并按照上訴編碼規則反推。?

?

?

?

我們將數據依次記錄并整理成表格,如下所示:

減基準值前

(十進制格式顯示)

減基準值后

(十進制格式顯示)

減去序號40

(16進制格式顯示)

解碼結果

CRC8

序號

value

83/338/268

41/296/226

0x01/0x100/0xba

0x0b

0x00

0x1a

258/339/236

216/297/194

0xb0/0x101/0x9a

0xb9

0x01

0x0a

250/340/214

208/298/172

0xa8/0x102/0x84

0xa8

0x02

0x84

330/341/96

258/299/54

0xda/0x103/0x0e

0xd0

0x03

0xae

192/342/122

150/300/80

0x6e/0x104/0x28

0x62

0x04

0xe8

236/343/286

194/301/244

0x9a/0x105/0xcc

0x9c

0x05

0xac

227/344/264

185/302/222

0x91/0x106/0xb6

0x9b

0x06

0x16

86/345/97

44/303/55

0x04/0x107/0x0f

0x00

0x07

0x4f

162/346/132

120/304/90

0x50/0x108/0x32

0x53

0x08

0x02

197/347/163

155/305/121

0x73/0x109/0x51

0x75

0x09

0x31

277/348/116

235/306/74

0xc3/0x10a/0x22

0xc2

0x0a

0x32

165/349/213

123/307/171

0x53/0x10b/0x83

0x58

0x0b

0x33

261/350/166

219/308/124

0xb3/0x10c/0x84

0xb8

0x0c

0x34

117/351/327

75/309/285

0x23/0x10d/0xF5

0x2f

0x0d

0x35

229/352/216

187/310/174

0x93/0x10e/0x86

0x98

0x0e

0x36

85/353/121

43/311/79

0x03/0x10f/0x27

0x03

0x0f

0x37

277/354/186

235/312/144

0xc3/0x110/0x68

0xc6

0x10

0x38

165/355/283

123/313/241

0x53/0x111/0xc9

0x5c

0x11

0x39

85/356/274

43/314/232

0x03/0x112/0xc0

0x0c

0x12

0x30

5.?ESP-TOUCH解碼結果驗證

從上面的表格,我們正確的獲取到Esp_Touch配置app發送的數據:

① totaldata_len:0x1a((5+4+10)+7)

② password_len:0x0a

③ ssid_crc8:0x84

④ bssid_crc8:0xae

⑤ total_data xor:0xe8

⑥ ip_address:”172.22.79.2”

⑦ ap_password:”1234567890”

? ? ? ?

手機ip_address

EspTouch配置界面

?

由上可見,EspTouch解碼結果與EspTouch發送app結果一致

版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/flyingcys/article/details/54670688

文章標簽:?esp-touchsmartconfig物聯網

個人分類:?Esp8266

上一篇IoT-Camera學習筆記之初識IoT-Camera(二)

下一篇TP-LINK_841N_V8路由器硬改升級OpenWRT記

ESP8266學習筆記4:ESP8266的SmartConfig

今天花了將近一天的時間來研究ESP8266的SmartConfig功能,這個應該算是wifi云產品的標配。這篇文章先把SmartConfig操作一遍,我還寫了另一篇文章梳理了物理層的具體協議,http...

  • 小豬快跑了的啦2018-06-07 12:32:46#4樓

    樓主的密碼數據那里有錯誤,CRC的校驗應該是0x02,嘻嘻,發現了。感謝樓主的共享,本來的疑惑都在你的文章解開了

  • huangshengnp2017-07-11 14:22:48#3樓

    請問如果需要通過此apk想設備發送命令并實現接收設備返回的一些信息,要如何實現?

  • 夢幻貝殼2017-06-20 12:41:07#2樓

    分析得很好!!!

  • C維2017-02-06 16:58:54#1樓

    感謝,找了好久才找到規則說明。

總結

以上是生活随笔為你收集整理的ESP-TOUCH编码规则及解码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。