[BlueZ] 3、使用 meshctl 連接控制一個 sig mesh 燈

前言

本文介紹如何使用 meshctl 配對、連接、控制一個 sig mesh 球泡燈

1、準備工作

1)編譯安裝 meshctl:

meshctl 和b luetoothctl 一樣都屬於 bluez(一個linux上的藍牙協議棧:Official Linux Bluetooth protocol stack#1

ps:之前寫過bluez的安裝和使用(主要是bluetoothctl)

這裏採用源碼編譯(不安裝-綠色),大家複製一個我下面的腳本,命名爲 run.sh

➜  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

➜  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.jsonlocal_node.json 所在目錄。


2)準備一個SIG MESH兩路燈泡

在 iot.tuya.com 上創建一個 sig mesh兩路的燈免開發方案:

然後默認點下去,在硬件調試階段,可以選擇下單一個模塊用於調試(10塊錢左右,比較便宜),收到模塊後按照配置在模塊上連接兩個LED,供上電即可:(以下圖爲例:收到模塊後在GPIO2的引腳接一個高電平點亮的白光燈珠、在GPIO7的引腳接一個高電平點亮的暖光燈珠、再給模塊供上3.3V的電即可)

當然,你也可以自己用開發板,自己開發一個標準SIG MESH支持onoff model的燈~

2、meshctl 連接、配置、控制 sig mesh 燈

1)搜索未配置設備

輸入 discover-unprovisioned on 命令會自動搜索周圍未配置的 sig mesh 設備,如下搜索到一個 MAC 爲 BC:23:4C:04:CC:F7 的設備:

[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)

[meshctl]# security 0
Provision Security Level set to 0 (low)

然後調用 provision 對設備進行連接配置:(其中 Composition data 就是該節點的配置信息)

[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

[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 即可實現再次連接)

[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、最終效果:


: bluez:bluez的meshctl是比較新的功能,國內外資料比較少,特別是在交叉編譯的系統上部署!
: 大家覺得不錯,可以點推薦給更多人~

[1].bluez官網
[2].BLE Mesh 開發(1) - nRF52與meshctl

@beautifulzzzz
以藍牙技術爲基礎的的末梢無線網絡系統架構及創新型應用探索!
領域:智能硬件、物聯網、自動化、前沿軟硬件
博客:https://www.cnblogs.com/zjutlitao/
微信交流羣|微信:園友交流羣|btfzzzz
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章