目的:
看完上一篇”BlueX SDK 2.1 Eclipse 開發環境建置”相信各位看官一定很好奇BlueX BT Mesh能做出什麼樣的產品出來,因此這篇博文將為各位介紹BlueX BT Mesh SDK中simple_generic_onoff_server範例解說,並概述BlueX BT Mesh裝置接收到資訊後流程是怎麼進行如何進行LED開關功能。
建立Model:
- 首先介紹BlueX BT Mesh SDK simple_generic_onoff_server範例主要.C檔各項說明。
檔名 |
說明 |
mesh_app_hal.c |
硬體功能配置 |
mesh_user_main.c |
硬體功能程式進入點 |
node_setup.c |
BT Mesh 節點功能配置 |
simple_generic_onoff_s.c |
主程式 |
sdk_mesh_config_pro.c |
BT Mesh參數調整 |
sdk_mesh_config.c |
BT Mesh參數調整 |
- 在node_setup.c中創建一個Model名稱。DEF_GENERIC_ONOFF_SERVER_MODEL功能主要創建一個Generic on/off功能的Server結構體,後面第一項參數為使用者創建這個Server名稱,而第二項為Application key最大數目,這項參數使用者可自訂。
圖 1
- mesh_app_server_init程式碼,其中Server_0與Server_1設定一樣。
圖 2
- 在mesh_app_server_init 函式中將剛剛所創建generic_onoff_server_0結構體初始化為0,確保初始參數正確。
圖 3
- 設定Model內部基本參數。
圖 4
說明:
在mesh_app_server_init 函式中設定Model基本參數。
generic_onoff_server_0 |
Model名稱 |
APP_KEY_MAX |
Application key最大數目 |
0 |
Model對應element ID,這邊所對應到的是ID 0。 |
sub_addr_list |
Publish與subscribe所需參數 |
SUB_ADDR_MAX |
Publish與subscribe所需參數 |
user_onoff_0_evt_cb |
Model Callback 函式 ,使用者可自訂 |
- Model初始狀態。在mesh_app_server_init 函式中將剛剛創建之Model賦予一個初始值,做為系統重新啟動後LED開或關之依據。在這邊將初始值設為1,代表系統重新啟動後LED為開。
圖 5
- 開關Callback 函式配置。這邊的Callback 函式即為剛剛在步驟e中的Model Callback 函式,主要功能為執行裝置收到BT Mesh指令之函式。我們將所要執行的功能放置在ONOFF_MODEL_EVT_SET case中。
圖 6
- GPIO控制LED開關。在mesh_app_hal.c檔中hal_set_led 函式主要功能為控制GPIO腳位,達到LED開關變化。
圖 7
流程圖:
這裡講述當BlueX BT Mesh裝置收到資訊後的流程,一步一步解析最終將實現LED開關。
圖 8
說明:
- BlueX裝置接收到資訊後由access_rx_pre_process函式進行解析。
圖 9
- 進入access_rx_pre_process函式後會由access_pdu_decrypt_start函式進行解密。
圖 10
- 解密完後進入access_decrypt_done Callback函式將解密後的資料傳至deliver_to_model函式進行處理。。
圖 11
- 進入deliver_to_model函式會先執行mesh_sig_msg_handler_search函式(紅框標示),用來計算與判斷Opcode,判斷完畢後會依照解析完畢的Opcode對照msg_map,在這裡Generic onoff是 Two Opcode。
圖 12
- 透過Opcode找到對應函式generic_onoff_model_msg結構。在generic_onoff_model_msg結構中有generic_onoff_get_rx、generic_onoff_set_rx、generic_onoff_set_unacknowledged_rx三個函式,由於我們是執行LED開關,因此這邊會執行generic_onoff_set_rx函式。
圖 13
- 進入generic_onoff_set_rx函式→generic_onoff_set_handler函式→onoff_server_onoff_action函式控制LED開關。並且經由紅框部分回調前面user_onoff_0_evt_cb (圖5)函式控制LED開關。
圖 14
實例功能說明:
我們利用nRF Mesh APP上的LED On/Off來控制BlueX BT Mesh LED開關(這裡顯示藍光是因為控制的腳位為藍色LED燈腳位)。
- 首先進入nRF Mesh APP後點選Settings。
圖 15
- 點選Provisioners更改Time To Live值為30。
圖 16
- 回到首頁點選”+”。
圖 17
- 點選要加入之設備。
圖 18
- 點選IDENTIFY。
圖 19
- 點選PROVISION。
圖 20
- 入網成功。
圖 21
- 點選已加入裝置並點選第一個 Element中Generic On Off Server。
圖 22
- 點選BIND KEY。
圖 23
- 點選Application Key 1完成Bind Key並回到Generic On Off Server介面即可控制開關。
圖 24
- App按下On。
圖 25
- App按下Off。
圖 26
結語:
看完這次的實例後,相信大家已經能透過上面教學並搭配BlueX 2.1 SDK創建BlueX BT Mesh Model、了解BlueX BT Mesh接收資料後控制LED流程與使用nRF Mesh App對BlueX BT Mesh裝置連線以及發送指令。如果在開發時遇到什麼問題,歡迎在下方”評論”提出你的疑問,我們可以一起來討論唷,喜歡我的帖子,請幫我按個”收藏”,我們下回見。
評論