涂鸦WIFI模组方案(MCU SDK)
摘自涂鴉官方視頻教程:https://www.bilibili.com/video/BV1pb41117LD?spm_id_from=333.999.0.0等
摘自:涂鴉IoT開發平臺MCU開發接入(Wi-Fi)-App面板
地址:https://www.bilibili.com/video/BV1cK4y1x7Up?spm_id_from=333.999.0.0
摘自:關于初始化與串口數據處理函數
地址:https://www.bilibili.com/video/BV1Hb41117YW?spm_id_from=333.999.0.0
目錄
- 名詞解釋(DeviceID、UUID、PID == KEY)
- 產品創建(DP功能點)
- 協議解析
- 協議格式
- 模組工作流程圖
- 基礎協議(模組工作必須指令,與產品功能無關)
- 基礎協議-心跳檢測(命令字0x00)
- 基礎協議-查詢產品信息(命令字0x01)
- 基礎協議-查詢設定模塊工作模式- -配合、自處理(命令字0x02)
- 基礎協議-報告設備聯網狀態-(命令字0x03,模塊自處理模式沒有此命令字)
- 基礎協議-狀態查詢與上報--模塊首次上電/MCU重啟(命令字0x08、0x07)
- 基礎協議-配網操作方便和APP連接(命令字0x04、0x05,模塊自處理模式沒有此命令字)
- 基礎協議-產測功能
- 功能協議(數據下發0x06和上報0x07DP點數據)
- 串口助手使用方法
- 涂鴉云串口調試助手
- MCU仿真調試助手
- 移植SDK
- 移植步驟六步走
- 步驟一:編寫MCU基礎程序,移植SDK文件
- 步驟二:確認protocol.h宏定義
- 步驟三:移植protocol.c文件及函數在main中調用
- 步驟四:DP點數據上報和下發函數處理
- 步驟五:配網功能及閃燈函數完善
- 步驟六:產測功能完善
- MCU在線升級
- SDK程序結構解析(初始化與串口數據處理)
- wifi_protocol_init初始化函數
- wifi_uart_service串口數據處理函數
- data_handle
- uart_receive_input串口接收函數
- MCU開發接入(Wi-Fi)-APP面板
- MCU開發接入(Wi-Fi)-OTA功能
- 升級過程流程圖
- 升級請求(命令字0xEA)
- 升級文件信息-MCU對比決定是否升級(命令字0xEB)
- 升級文件偏移請求(命令字0xEC)
- 升級數據(命令字0xED)
- 升級結束(命令字0xEE)
- SDK相關完善
- 軟件版本號更新
- 涂鴉平臺相關操作
- OTA升級實操
- WIFI 產測功能
- 掃描指定路由
- 連接指定路由
- 紅外產測
名詞解釋(DeviceID、UUID、PID == KEY)
什么是設備ID?
英文名DeviceID:設備每次激活配網的時候,云端配網激活分配給到的id,關聯配網后與賬號、App等相關的實際用戶設備數據。
什么是 UUID? (AES 的MESHID?)
涂鴉主聯網模塊的固件內寫入的唯一性設備標示,用于接入涂鴉云時校驗合法身份的依據之一,出廠攜帶,不隨反復激活配網而更改。
詳細介紹:UUID介紹與生成方法
UUID 和設備ID 的區別是什么? 設備ID 和 UUID 是平級的概念,描述的是設備的唯一性。
-
UUID著重表示設備硬件的唯一性,IoT設備在生產流程上,涂鴉的廠測工具會為每個涂鴉方案的設備頒發一個在涂鴉全球唯一的UUID和authkey,用于初次的認證授權;
-
設備ID著重表示設備在云端的實例化對象,設備向涂鴉云發起激活請求并激活成功后,涂鴉會為該設備頒發一個device_ID。
什么是產品 ID/PID?
Product ID,在涂鴉 IoT 開發平臺創建的每一個產品都會產生一個唯一的產品編號,關聯了產品具體的功能點、App 控制面板等、所有跟這個產品相關的信息。
Product ID,縮寫:PID,涂鴉開發平臺為每一個獨立的產品分配的唯一性標示,當前關聯了涂鴉開發體系內幾乎所有的產品數字化信息,包括:
產品軟硬件模型信息,如產品品類、通訊能力、功能、面板、模塊型號、固件key、開發狀態、開發方式、配網限制、固件JSON文件、支持第三方服務、支持第三方云等一系列產品屬性;
產品生產資料信息,如模塊型號、固件key、固件版本、產品熱點名稱、是否運營商標記、發貨標簽字段等;
產品在前后臺的權限,包含前臺客戶OTA權限、是否可更改模塊、是否可更改固件等;
產品與其他系統的關聯信息。
PRODUCT_KEY
開發平臺創建產品后生成的16位字符產品唯一標識,就是上面PID的值。在代碼protocol.h文件里可以看到,如下圖所示:
產品創建(DP功能點)
支持多故障類型上報(一個字節就支持8種故障,置1代表故障),比如0X09就是故障1和故障4同時發生;
字符串型顯示一些地址之類的;
透傳型不建議使用,取暖器周定時會使用(有空去涂鴉平臺標準功能生成一下看看)。。
視頻中DP點創建實例:
協議解析
產品Id
產品功能(DP點)
-
通訊協議格式
-
- 串口通訊約定(波特率等)
-
- 幀格式
- 幀格式
-
- 基礎協議(模組必須的協議,與功能無關)
-
- 功能協議(和創立的DP點功能有關,平臺自動創建的收發數據的值)
協議格式
現在協議最新的版本是03,多了一些功能而已,不過兼容以前的00、01版本,以前的版本可以繼續使用。為了以后的升級拓展
模組工作流程圖
- 0x08狀態查詢:模塊首次上電、重啟
- 0x07狀態上報:MCU上報所有DP點數據,作為APP開機面板顯示初值
基礎協議(模組工作必須指令,與產品功能無關)
基礎協議-心跳檢測(命令字0x00)
- MCU上電第一次回復00,模組知道MCU是剛剛上電,接下來發送01、02命令字
- MCU后面回復01,表示模組知道第一次的信息已經同步完了,接下來就是正常的心跳,心跳間隔15s
- 心跳包間隔15s作用:假如一直沒收到心跳回復,接下來APP會顯示設備離線
基礎協議-查詢產品信息(命令字0x01)
模組心跳包收到正確回復后,模組發送01命令字。
基礎協議-查詢設定模塊工作模式- -配合、自處理(命令字0x02)
一般使用MCU和模塊配合的方式
注意:觸發方式不一定是按鍵方式,是由MCU自己決定的,閃爍也不一定是LED燈,可能是WIFI的圖標。
b.模塊自處理:MCU不用去進行配網的操作以及指示燈的指示
WIFI模塊的工作狀態通過WIFI的GPIO引腳驅動LED狀態顯示;
WIFI重置通過檢測GPIO輸入需求處理。
模塊自處理WIFI重置方法為:WIFI檢測GPIO入口低電平持續5s以上觸發WIFI重置。指示燈與按鈕所使用的GPIO管腳由命令配置。
基礎協議-報告設備聯網狀態-(命令字0x03,模塊自處理模式沒有此命令字)
LED亮燈的模式是MCU去引導的,MCU根據03命令字獲得的聯網狀態進行控制LED閃燈
一旦WIFI狀態發生變化,模組主動發送WIFI狀態值
基礎協議-狀態查詢與上報–模塊首次上電/MCU重啟(命令字0x08、0x07)
以上,初始化部分就完成了。
基礎協議-配網操作方便和APP連接(命令字0x04、0x05,模塊自處理模式沒有此命令字)
- smart模式:選擇家里WIFI,輸入密碼即可。配網簡單
- AP模式:輸入家庭WIFI密碼后,需要連接WIFI模組本身產生的AP熱點,再跳回APP連接。配網穩定可靠
- 0x04命令字多次調用,兩個模式來回切換;
- 0x05命令字進入指定的模式;
- 工作狀態下,調用0x04會先切換到Smart模式,繼續調用兩個模式來回切換
基礎協議-產測功能
把產測路由改成tuya_mdea_test這個熱點名稱,模組收到產測命令去掃描這個熱點,從而測試模組的射頻性能。
功能協議(數據下發0x06和上報0x07DP點數據)
功能長度就是后面功能指令的長度,比如第二個溫度: 功能長度0x04,功能指令值為50,數據位長度不夠前面補零,就是0000 0050
模組下發開關指令,狀態改變了要上報給APP,因此第一行開關屬于可下發可上報,下同。
串口助手使用方法
涂鴉云串口調試助手
這個調試助手只能調試MCU與模組的通信,檢驗SDK的移植以及串口通信是否調通,不能和手機APP端進行調試
命令字0X08要求MCU上報所有DP功能點初值作為面板顯示初值(APP),這個應該是涂鴉自己的SDK
MCU仿真調試助手
安裝包在官網下載
移植SDK
有一些51內核的對函數嵌套層級有要求,資源不足的用戶可自行對接協議,但是SDK里面的內容和一些運算函數是可以借鑒的。
移植步驟六步走
步驟一:編寫MCU基礎程序,移植SDK文件
把SDK文件都添加到工程里面,方法參照STM32方法,STM32 的話記得還要添加頭文件路徑。
步驟二:確認protocol.h宏定義
RAM不夠用,數據接收隊列大小可適當縮小,只要能及時取出即可
后面的一些功能選擇看自己的需求,也就是對宏定義的操作
步驟三:移植protocol.c文件及函數在main中調用
1
2
3、串口單字節發送函數,發送的參數為value
由于這個.c文件引用了串口發送這個函數,所以這個.c文件要引用一下main.h
4、串口接收函數
5、main函數while循環調用串口處理函數
main函數循環調用這個串口處理函數(所有的數據處理都是在接收中斷接收完以后,放到接收緩存區進行幀頭幀尾的各種判斷)
步驟四:DP點數據上報和下發函數處理
1、
初值建議全部設為0;
不建議用戶隨意調用all_data_update()函數,數據量比較龐大,一直占MCU資源,而且一直對服務器有一定的壓力;
如果某一個DP狀態變了,比如開關狀態變了,上報開關變量的方法就是調用單獨的DP點函數。
RAW透傳型后面有兩個變量
2、
3、
可下發可上傳
其他DP功能類比實現。
到這個步驟完成,就可以使用串口調試助手去模擬跑一遍,看對接協議是否正確,保證調試好。
步驟五:配網功能及閃燈函數完善
模組自處理模式不需要這個步驟,因為按鍵和燈都接在模組端了。
1、
進入配網模式以后,模組會重啟,發送WIFI狀態、同步狀態命令字等。
2、
注:新版函數名稱有改動
步驟六:產測功能完善
這六個步驟完成,程序就可以跑起來了!
MCU在線升級
這部分作者沒講。
SDK程序結構解析(初始化與串口數據處理)
wifi_protocol_init初始化函數
在system.h里定義了一段指定大小的隊列buf,即bt_queue_buf
queue_in和queue_out分別為隊列的入和出,指向bt_queue_buf的首地址,隊列的入和出是在串口中斷接收函數uart_receive_input內使用的
進入uart_receive_input函數
614行queue_in - queue_out大于開辟的隊列緩沖區大小,說明隊列滿了
618行代表出現一些異常錯誤
625行queue_in到達隊列最底部,此時要讓queue_in重新指向起始地址
隊列先進先出
wifi_uart_service串口數據處理函數
while內盡量不要有大延時函數,否則接收隊列容易滿,進而需要加大接收隊列緩沖區大小。
647行:
649行:取出數據
652行:判斷接收數據的長度
判斷幀頭是否是55 AA 00 …
data_handle
ifdefine …#else… #endif代表條件編譯
上圖宏定義:
心跳包回復
209行上報回復的函數(進行拼接):
上圖中186行:
上圖中141行:
產品信息上傳回復
轉成字符串發送出去,記得前面講的是通過ASCII發送?
命令下發:
升級:
獲取本地時間、WIFI功能測試:
狀態查詢,所有數據上報(08命令字):
uart_receive_input串口接收函數
MCU開發接入(Wi-Fi)-APP面板
參考:https://www.bilibili.com/video/BV1cK4y1x7Up?spm_id_from=333.999.0.0
MCU開發接入(Wi-Fi)-OTA功能
摘自:涂鴉IoT開發平臺MCU開發接入(Wi-Fi)-OTA功能
地址:https://www.bilibili.com/video/BV1TV411U7fs?spm_id_from=333.999.0.0
說明:視頻里講的是WIFI模組串口協議,就兩個命令字0x0a和0x0b,具體參見涂鴉文檔,和藍牙的方式有區別。
藍牙通用串口協議支持 MCU OTA 功能,通過涂鴉 IoT 平臺,先將需要更新的固件文件上傳至涂鴉,然后通過藍牙網關或手機 App(如涂鴉智能)等載體下載固件并透傳給藍牙模組。藍牙模組再通過涂鴉協議對文件進行分包傳輸,最后 MCU 接收升級包并寫入本地閃存,最終實現固件的升級。
升級過程流程圖
升級請求(命令字0xEA)
升級開始的時候由模組向 MCU 發送請求,告知有OTA來了,獲取 MCU 串口能傳輸的最大單包長度。
模組發送:
MCU 回復:
升級文件信息-MCU對比決定是否升級(命令字0xEB)
描述了 MCU-OTA 升級文件信息,MCU 可比較升級信息決定是否升級。
模組發布:
MCU回復:
斷點續傳:
-
為了支持斷點續傳,這里會返回設備端已經儲存的文件信息。 App 收到信息后,根據設備返回的已儲存文件長度,計算新文件對應長度的 CRC32,然后和設備返回的 CRC32 對比。如果兩者都吻合,那么在下面的文件起始傳輸請求中將起始傳輸偏移量改為該長度值,否則文件起始傳輸偏移量改為 0,表示從頭開始傳輸。
-
每次斷點續傳都會完全按照 MCU OTA 流程的順序,從 OTA 升級請求開始,所以 MCU 端如果有維護升級狀態的話,需要在收到模組工作狀態為非綁定已連接的其他狀態時重置升級狀態,以確保可以開始下一個升級流程。
升級文件偏移請求(命令字0xEC)
模組發送:
MCU 回復:
升級數據(命令字0xED)
模組發送:
MCU回復:
升級結束(命令字0xEE)
模組發送:
MCU回復:
SDK相關完善
軟件版本號更新
注意:宏定義大小要大于最大包長度
這里工作量主要在MCU的bootloader和flash的讀寫操作上。
涂鴉平臺相關操作
OTA升級實操
此部分摘自:https://www.bilibili.com/video/av971203572/
這是WIFI的OTA升級傳輸串口協議,和藍牙的不太一樣。
WIFI 產測功能
摘自:涂鴉IoT開發平臺MCU開發接入(Wi-Fi)-產測功能
地址:https://www.bilibili.com/video/BV1Ki4y1g7NM?spm_id_from=333.999.0.0
掃描指定路由
可自定義按鍵按下去調用產測函數。
連接指定路由
產測成功重復進入產測可以重新發送測試命令;
沒有收到連上路由的包(賬號密碼輸錯了,再次輸入它是不會被覆蓋掉的)表示模組正在產測中需要重置模組或者重新上電后發送測試命令才有效。
紅外產測
總結
以上是生活随笔為你收集整理的涂鸦WIFI模组方案(MCU SDK)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 右值引用与左值引用
- 下一篇: git仓库maven项目,添加到myec