[BlueZ] 3、使用 meshctl 連線控制一個 sig mesh 燈
阿新 • • 發佈:2020-03-16
[TOC]
### 前言
本文介紹如何使用 meshctl 配對、連線、控制一個 sig mesh 球泡燈
### 1、準備工作
**1)編譯安裝 meshctl:**
meshctl 和b luetoothctl 一樣都屬於 bluez(一個linux上的藍芽協議棧:Official Linux Bluetooth protocol stack[#1] )
**ps:**之前寫過bluez的安裝和使用(主要是bluetoothctl)
- [BlueZ] [1、Download install and use the BlueZ and hcitool ][l1]
- [BlueZ] [2、使用bluetoothctl搜尋、連線、配對、讀寫、使能notify藍芽低功耗裝置 ][l2]
這裡採用原始碼編譯(不安裝-綠色),大家複製一個我下面的指令碼,命名為 `run.sh`:
```shell
➜ bluez-5.52-pure cat run.sh
#!/bin/bash
wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.52.tar.xz
tar -xvf bluez-5.52.tar.xz
cd bluez-5.52
./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --enable-mesh
make -j8
```
執行該指令碼自動下載、解壓、配置、編譯,最後在 `bluez-5.52/tools/` 下生成了可執行檔案 `meshctl`
接下來就可以執行下面命令來啟動 `meshctl` :
```shell
➜ tools ./meshctl --config mesh
Waiting to connect to bluetoothd...Reading prov_db.json and local_node.json from mesh directory
[meshctl]#
```
ps:`--config mesh` 是指定 `prov_db.json` 和 `local_node.json` 所在目錄。
**2)準備一個SIG MESH兩路燈泡**
在 iot.tuya.com 上建立一個 sig mesh兩路的燈免開發方案:
![][p1]
然後預設點下去,在硬體除錯階段,可以選擇下單一個模組用於除錯(10塊錢左右,比較便宜),收到模組後按照配置在模組上連線兩個LED,供上電即可:(以下圖為例:收到模組後在GPIO2的引腳接一個高電平點亮的白光燈珠、在GPIO7的引腳接一個高電平點亮的暖光燈珠、再給模組供上3.3V的電即可)
![][p2]
當然,你也可以自己用開發板,自己開發一個標準SIG MESH支援onoff model的燈~
### 2、meshctl 連線、配置、控制 sig mesh 燈
**1)搜尋未配置裝置**
輸入 `discover-unprovisioned on` 命令會自動搜尋周圍未配置的 sig mesh 裝置,如下搜尋到一個 MAC 為 `BC:23:4C:04:CC:F7` 的裝置:
```shell
[meshctl]# discover-unprovisioned on
SetDiscoveryFilter success
Discovery started
Adapter property changed
[CHG] Controller A0:D3:7A:DB:24:B8 Discovering: yes
Mesh Provisioning Service (00001827-0000-1000-8000-00805f9b34fb)
Device UUID: bc234c04ccf75012366c63366c677062
OOB: 0000
[NEW] Device BC:23:4C:04:CC:F7 BC-23-4C-04-CC-F7
```
**2)provision 裝置**
用下列命令將配網安全等級設定為0:(從塗鴉IOT平臺上建立的燈採用的認證機制是:no oob)
```shell
[meshctl]# security 0
Provision Security Level set to 0 (low)
```
然後呼叫 `provision` 對裝置進行連線配置:(其中 Composition data 就是該節點的配置資訊)
```shell
[meshctl]# provision bc234c04ccf75012366c63366c677062
Trying to connect Device BC:23:4C:04:CC:F7 BC-23-4C-04-CC-F7
Adapter property changed
[CHG] Controller A0:D3:7A:DB:24:B8 Discovering: no
Connection successful
Service added /org/bluez/hci0/dev_BC_23_4C_04_CC_F7/service0008
...
GATT-RX: 00 f4 05 1f de 88 66 06 9f 72 f8 31 ca 0f 9f 46
GATT-RX: 55 3c 46 89 0e de e5 8e ad 29
Composition data for node 0100 {
"cid":"07d0",
"pid":"0005",
"vid":"3033",
"crpl":"0069",
"features":{
"relay":true,
"proxy":true,
...
}
GATT-TX: 00 f4 2b 62 8c 1e e2 d1 65 31 1d 78 04 28 5d 16
GATT-TX: 92 a3 db 21 5b 82 fc 75 c3
[DEL] Device DC:23:4D:0B:74:4F DC-23-4D-0B-74-4F
[DEL] Device BC:23:4C:03:88:D1 BC-23-4C-03-88-D1
[SigMesh-Node-0100]#
```
**3)繫結相關配置**
使用 `menu config` 進入子目錄,使用 `target 0100` 選擇當前要配置的節點為 0100;
用 `netkey-add 0` 給裝置配置第0個網路祕鑰,使用 `appkey-add 1` 給裝置配置第1個應用級別祕鑰 (網路祕鑰和APP祕鑰是 mesh 規範中要求的,該祕鑰可以在 meshctl 主頁選單執行 `mesh-info
` 看到);
最後用 `bind 0 1 1000` 實現將 model:1000 繫結(繫結時採用net-key 0,app-key 1)
**ps:** 訂閱與釋出是 sig mesh 實現聯動控制的機制,每一個事件和動作都抽象為 model,比如:onoff model 就是規定開關邏輯的模型,其 id 也是規定死的: 0x1000
```language
[SigMesh-Node-0100]# menu config
[SigMesh-Node-0100]# target 0100
[config: Target = 0100]# netkey-add 0
[config: Target = 0100]# appkey-add 1
[config: Target = 0100]# bind 0 1 1000
```
**4)控制燈的開關**
從 config 子選單返回,進入 onoff 子選單,然後選擇目標 0100,之後就可以用 onoff 命令來實現控制了:(之後如果再次開啟 meshctl,只需要呼叫 `connect 0 0100` 即可實現再次連線)
```language
[config: Target = 0100]# back
[config: Target = 0100]# menu onoff
[config: Target = 0100]# target 0100
[on/off: Target = 0100]# onoff 0
[on/off: Target = 0100]# onoff 1
```
### 3、最終效果:
![][p3]
: **bluez:bluez的meshctl是比較新的功能,國內外資料比較少,特別是在交叉編譯的系統上部署!**
: **大家覺得不錯,可以點推薦給更多人~**
### LINKS
[[1].bluez官網][#1]
[[2].BLE Mesh 開發(1) - nRF52與meshctl][#2]
```
@beautifulzzzz
以藍芽技術為基礎的的末梢無線網路系統架構及創新型應用探索!
領域:智慧硬體、物聯網、自動化、前沿軟硬體
部落格:https://www.cnblogs.com/zjutlitao/
微信交流群|微信:園友交流群|btfzzzz
```
[#1]:http://www.bluez.org/
[#2]:https://blog.csdn.net/leirifa/article/details/86582522
[p1]:http://tuchuang.beautifulzzzz.com:3000/?path=/34/db5656c74d59ca89dab07831d6e1cd.png
[p2]:http://tuchuang.beautifulzzzz.com:3000/?path=/94/2894208dae9eac6fb600f9195ac483.png
[p3]:http://tuchuang.beautifulzzzz.com:3000/?path=/12/cfc10136d84736a5fb63f72f3ad9f8.gif
[l1]:https://www.cnblogs.com/zjutlitao/p/9576589.html
[l2]:https://www.cnblogs.com/zjutlitao/p/95896