.

前言

本文介绍如何使用 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.json 和 local_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是比较新的功能,国内外资料比较少,特别是在交叉编译的系统上部署!
大家觉得不错,可以点推荐给更多人~

LINKS

[1].bluez官网

[2].BLE Mesh 开发(1) - nRF52与meshctl


@beautifulzzzz
以蓝牙技术为基础的的末梢无线网络系统架构及创新型应用探索!
领域:智能硬件、物联网、自动化、前沿软硬件
博客:https://www.cnblogs.com/zjutlitao/
微信交流群|微信:园友交流群|btfzzzz

[BlueZ] 3、使用 meshctl 连接控制一个 sig mesh 灯的更多相关文章

  1. Dubbo协议与连接控制

    协议参考手册 (+) (#) 推荐使用Dubbo协议 性能测试报告各协议的性能情况,请参见:性能测试报告 (+) dubbo:// (+) (#) Dubbo缺省协议采用单一长连接和NIO异步通讯,适 ...

  2. Dubbo之负载均衡、并发控制、延迟暴露、连接控制

    1.并发控制 dubbo服务端和消费端都做了并发控制,分别在配置中有相应的对应配置: 服务端:executes服务提供者每服务每方法最大可并行执行请求数,控制并发数量:actives每服务消费者每服务 ...

  3. HttpAsyncClient 做并发长连接的一个实例

    HttpAsyncClient 做并发长连接的一个实例 import java.util.concurrent.CountDownLatch; import org.apache.http.HttpR ...

  4. 遇到delphi连接sql一个奇怪的问题:未指定的错误,加大了命令的等待时间为600即可了

    遇到delphi连接sql一个奇怪的问题:未指定的错误,加大了命令的等待时间为600即可了 找了一下午没解决.

  5. ng指令控制一个元素的影藏的与显示几种方法的使用

    在ng中我们控制一个元素的显示与隐藏的方法: (1):ng-show=true/false 解释:ng-show使用的是display="block"/"none&quo ...

  6. nginx和apache最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程

    nginx和apache的一些优缺点比较,摘自网络,加自己的一些整理. nginx相对于apache的优点: 1.轻量级,同样是web 服务,比apache 占用更少的内存及资源 2.抗并发,ngin ...

  7. 一个jdbc connection连接对应一个事务

    Spring保证在methodB方法中所有的调用都获得到一个相同的连接.在调用methodB时,没有一个存在的事务,所以获得一个新的连接,开启了一个新的事务. Spring保证在methodB方法中所 ...

  8. nginx与apache 对比 apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程

    nginx与apache详细性能对比 http://m.blog.csdn.net/lengzijian/article/details/7699444 http://www.cnblogs.com/ ...

  9. dubbo之连接控制

    连接控制 服务端连接控制 限制服务器端接受的连接不能超过 10 个 1: <dubbo:provider protocol="dubbo" accepts="10& ...

随机推荐

  1. Jmeter之压力测试总结

    一.基本概念 1.线程组N:代表一定数量的并发用户,所谓并发就是指同一时刻访问发送请求的用户.线程组就是模拟并发用户访问. 2.Ramp-Up Period(in seconds):建立所有线程的周期 ...

  2. python去除列表中重复元素的方法

    列表中元素位置的索引用的是L.index 本文实例讲述了Python去除列表中重复元素的方法.分享给大家供大家参考.具体如下: 比较容易记忆的是用内置的set 1 2 3 l1 = ['b','c', ...

  3. [LC] 142. Linked List Cycle II

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. To r ...

  4. UFT安装

    1.下载解压双击setup.exe 2.点击安装 3.点击下一步 4.检测是否需要安装插件之后一路向下 5.安装之后图标 下载: 链接:https://pan.baidu.com/s/1sa0h037 ...

  5. Java 9 新特性 – 内部类的方块操作符

    方块操作符 ( <> ) 在 Java 7 中就引入了,目的是为了使代码更可读. 但是呢,这个操作符一直不能在匿名内部类中使用 Java 9 修正了这个问题,就是可以在匿名内部类中使用方块 ...

  6. python3下scrapy爬虫(第四卷:初步抓取网页内容之抓取网页里的指定数据延展方法)

    上卷中我运用创建HtmlXPathSelector 对象进行抓取数据: 现在咱们再试一下其他的方法,先试一下我得最爱XPATH 看下结果: 直接打印出结果了 我现在就正常拼下路径 只求打印结果: 现在 ...

  7. 浅谈Java转义符\\|

    看一段程序 String t = "a||b||c||d"; String[] temp = t.split("\\|\\|"); System.out.pri ...

  8. GitHub下载

  9. SpringBoot:三十五道SpringBoot面试题及答案

    SpringBoot面试前言今天博主将为大家分享三十五道SpringBoot面试题及答案,不喜勿喷,如有异议欢迎讨论! Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一 ...

  10. 很全很全的 JavaScript 模块讲解

    模块通常是指编程语言所提供的代码组织机制,利用此机制可将程序拆解为独立且通用的代码单元.所谓模块化主要是解决代码分割.作用域隔离.模块之间的依赖管理以及发布到生产环境时的自动化打包与处理等多个方面. ...