BlueX BT Mesh SDK simple_generic_onoff_server範例解說

關鍵字 :BlueXBT Mesh SDK

目的:

看完上一篇”BlueX SDK 2.1 Eclipse 開發環境建置”相信各位看官一定很好奇BlueX BT Mesh能做出什麼樣的產品出來,因此這篇博文將為各位介紹BlueX BT Mesh SDK中simple_generic_onoff_server範例解說,並概述BlueX BT Mesh裝置接收到資訊後流程是怎麼進行如何進行LED開關功能。

建立Model:

  1. 首先介紹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參數調整

 

 

  1. 在node_setup.c中創建一個Model名稱。DEF_GENERIC_ONOFF_SERVER_MODEL功能主要創建一個Generic on/off功能的Server結構體,後面第一項參數為使用者創建這個Server名稱,而第二項為Application key最大數目,這項參數使用者可自訂。

 

圖 1

 

 

  1. mesh_app_server_init程式碼,其中Server_0與Server_1設定一樣。

圖 2

  1. 在mesh_app_server_init 函式中將剛剛所創建generic_onoff_server_0結構體初始化為0,確保初始參數正確。

 

圖 3

 

 

  1. 設定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 函式 ,使用者可自訂

 

 

 

  1. Model初始狀態。在mesh_app_server_init 函式中將剛剛創建之Model賦予一個初始值,做為系統重新啟動後LED開或關之依據。在這邊將初始值設為1,代表系統重新啟動後LED為開。

 

圖 5

 

  1. 開關Callback 函式配置。這邊的Callback 函式即為剛剛在步驟e中的Model Callback 函式,主要功能為執行裝置收到BT Mesh指令之函式。我們將所要執行的功能放置在ONOFF_MODEL_EVT_SET case中。

 

圖 6

 

 

  1. GPIO控制LED開關。在mesh_app_hal.c檔中hal_set_led 函式主要功能為控制GPIO腳位,達到LED開關變化。

 

圖 7

 

 

流程圖:

這裡講述當BlueX BT Mesh裝置收到資訊後的流程,一步一步解析最終將實現LED開關

 

圖 8

說明:

  1. BlueX裝置接收到資訊後由access_rx_pre_process函式進行解析。

 

圖 9

  1. 進入access_rx_pre_process函式後會由access_pdu_decrypt_start函式進行解密。

 

圖 10

 

 

  1. 解密完後進入access_decrypt_done Callback函式將解密後的資料傳至deliver_to_model函式進行處理。。

 

圖 11

 

 

  1. 進入deliver_to_model函式會先執行mesh_sig_msg_handler_search函式(紅框標示),用來計算與判斷Opcode,判斷完畢後會依照解析完畢的Opcode對照msg_map,在這裡Generic onoff是 Two Opcode。

 

圖 12

  1. 透過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

  1. 進入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燈腳位)。

 

  1. 首先進入nRF Mesh APP後點選Settings。

 

圖 15

 

 

  1. 點選Provisioners更改Time To Live值為30。

 

圖 16

 

 

  1. 回到首頁點選”+”。

 

圖 17

 

 

  1. 點選要加入之設備。

 

圖 18

 

 

  1. 點選IDENTIFY。

 

圖 19

 

 

  1. 點選PROVISION。

 

圖 20

 

 

  1. 入網成功。

 

圖 21

 

 

  1. 點選已加入裝置並點選第一個 Element中Generic On Off Server。

 

圖 22

 

 

  1. 點選BIND KEY。

 

圖 23

 

 

  1. 點選Application Key 1完成Bind Key並回到Generic On Off Server介面即可控制開關。

 

圖 24

 

 

  1. App按下On。

 

圖 25

 

 

  1. App按下Off。

 

圖 26

結語:

看完這次的實例後,相信大家已經能透過上面教學並搭配BlueX 2.1 SDK創建BlueX BT Mesh Model、了解BlueX BT Mesh接收資料後控制LED流程與使用nRF Mesh App對BlueX BT Mesh裝置連線以及發送指令。如果在開發時遇到什麼問題,歡迎在下方”評論”提出你的疑問,我們可以一起來討論唷,喜歡我的帖子,請幫我按個”收藏”,我們下回見。

 

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論