目录
以下是基于 nRF Connect SDK 的 蓝牙Mesh示例,涵盖 照明控制(Lighting Model) 和 传感器数据发布 两种典型场景,结合代码实现和配置步骤,帮助开发者快速上手蓝牙Mesh开发:
1. 环境准备
(1) 开发环境
-
工具链:
-
安装 nRF Connect SDK(版本建议 v2.0.0+)。
-
配置 Zephyr SDK 和 West工具。
-
-
硬件:
-
Nordic开发板(如 nRF52840 DK 或 nRF5340 DK)。
-
(2) 示例代码位置
在nRF Connect SDK中,蓝牙Mesh示例位于:
samples/bluetooth/mesh/
常用示例包括:
-
light
:照明控制(Lighting Model)。 -
sensor
:传感器数据发布(Sensor Model)。
2. 照明控制示例(Lighting Model)
(1) 代码结构
以 samples/bluetooth/mesh/light
为例,关键文件包括:
-
prj.conf
:配置蓝牙Mesh参数。 -
main.c
:初始化Mesh网络和Lighting模型。 -
light_states.c
:定义亮度、色温等状态。
(2) 关键代码实现
/* main.c */
#include <zephyr/bluetooth/services/light.h>
// 定义Lightness状态
static struct light_lightness lightness = {
.lightness = 0x0000, // 当前亮度(0-0xFFFF)
.linear = 0x0000, // 线性亮度值
.last_lightness = 0x0000,
};
// 初始化Lightness Server模型
static const struct light_lightness_srv_init_params lightness_init = {
.pub_cfg = {
.publish = BT_MESH_LIGHTNESS_PUB_LIGHTNESS,
.update = BT_MESH_LIGHTNESS_UPDATE_DELAY,
},
.init_state = &lightness,
};
void main(void) {
int err;
// 初始化蓝牙Mesh
err = bt_enable(NULL);
if (err) {
printk("Bluetooth init failed: %d\n", err);
return;
}
// 初始化Lightness Server模型
err = light_lightness_server_init(&lightness_init);
if (err) {
printk("Light Lightness Server init failed: %d\n", err);
return;
}
// 初始化其他模型(如传感器、健康状态等)
// ...
printk("Bluetooth Mesh Light sample started\n");
}
(3) 配置步骤
1)启用蓝牙Mesh:在 prj.conf
中设置:
CONFIG_BT=y
CONFIG_BT_MESH=y
CONFIG_BT_MESH_LIGHTING=y # 启用照明模型
2)配置Provisioning:在代码中添加Provisioner初始化(如使用 bt_mesh_provision()
)。