1.开发芯片:低功耗蓝牙芯片PHY6212

2.软件开发套件:低功耗蓝牙芯片PHY6212提供的

3.开发套件特点:以YOC平台为基础,对蓝牙MESH协议栈做了深度优化和整合,为开发者提供了通用的MESH组件,涵盖了SIG MESH Model和私有Model以及丰富的芯片外设驱动。

一、SDK架构介绍

  1. Kernel:内核层,包含标准的BLE(5.0)/MESH(1.0)协议栈,Ali OS 操作系统,芯片驱动。
  2. Service:蓝牙服务层。
  • Mesh Model组件,其中支持的Sig Models有Generic Level Model,Generic Onoff Model,Light Level Model,Light CTL Model等,此外还有一个Vendor Model 支持数据透传。
  • Mesh Node组件, 提供Mesh节点入网和配置功能,开发者可以基于该组件开发Mesh节点应用。
  • Mesh Provisioner组件,支持MESH节点管理,包括新增Mesh节点,删除Mesh节点,获取节点信息等功能。
  • Gennie APP 组件,天猫精灵Mesh组件,支持天猫精灵网络协议。

二、Mesh组件

  • Mesh Node组件
  • Mesh Models组件
  • Gennie APP组件

1.Mesh Node 支持Mesh节点配置和Model消息的接收功能。

组件的API列表
ble_mesh_node_init((*node_config_t)g_node_param )        //Mesh Node 组件的初始接口
ble_mesh_node_OOB_input_num()    //配网过程中,要求输入数字的接口
ble_mesh_node_OOB_input_string()  //配网过程中,要求数据字符串的接口

其中ble_mesh_node_init()函数的使用:(初始化Node节点,主要配置节点的设备名称,UUID,事件的回调)

#define DEVICE_NAME "YOC Light NODE"
#define LIGHT_DEV_UUID {0xC0,0xC1,0xC0,0xC2,0xC3,0xC9,0xC0,0xC1,0xC0,0xC2,0xC3,0xC9,0xC0,0xC1,0xC0,0xC2,0xC3,0xC9}
node_config_t g_node_param={
//设置当前为设备节点
.role =NODE,    //设置当前为设备节点
.dev_uuid=LIGHT_DEV_UUID,    //设置节点的UUID
.dev_name=DEVICE_NAME,    //设置节点的名称
.dev_model_cb=app_event_cb,    //注册Model的事件回调函数
.dev_prov_cb=app_prov_event_cb,    //注册Provision的事件处理回调函数
.rssi_report_enable=0    //RSSI上报功能使能标识,默认关闭
}
//MESH的Node初始化
ret=ble_mesh_node_init(&g_node_param);//回调处理函数
void app_prov_event_cb(mesh_prov_event_en event,void *p_arg)
{switch(event){//配网成功,亮绿灯case BT_MESH_EVENT_NODE_PROV_COMP:{if(p_arg){mesh_node_local *node =(mesh_node_local_t *)p_arg;LOGI(TAG,"prov complete %04x",node->prim_unicast);prov_succeed_flag=1;led_control(led_dev,COLOR_GREEN,-1,-1);}    }break;//节点复位,绿灯闪烁case BT_MESH_EVENT_NODE_REST:{LOGI(TAG,"node reset");led_control(led_dev,COLOR_GREEN,200,200);   }break;//配网要求输入数字,通过其他方式比如按键,获取数字后,调用//ble_mesh_OOB_input_num接口输入case BT_MESH_EVENT_NODE_OOB_INPUT_NUM:{if(p_arg){LOGI(TAG,"oob input num size :%d",*(uint8_t)p_arg);}}break;//配网要求输入字符串,通过其他方式,比如其他方式,例如按键,获取字符串后,调用ble_mesh_node_OOB_input_string接口输入case BT_MESH_NODE_OOB_INPUT_STRING:{LOGI(TAG,"oob input string size :%d",*(uint8_t)p_arg);}break;default:break;}
}

2.Mesh Models:

该组件提供了Generic Onoff,Generic Level ,Light Lightness,Light CTL的Sever/Client Models,Vendor Model.

ble_mesh_model_init()//model模块的初始化函数
ble_mesh_model_get_comp_data()//获取Mesh Model组件的Models结构
ble_mesh_model_set_cb()//设置Mesh Model组件的回调函数
ble_mesh_model_find()//查找指定的Mesh Model
ble_mesh_model_status_get()//获取指定model的状态

PS:初始化Mesh Model组件代码:

static struct bt_mesh_model elem0_root_models[]={//configuration Sever Model 必选ModelBT_MESH_MODEL_CFG_SRV_NULL(),//Health Server Model ,可选ModelBT_MESH_MODEL_HEALTH_SRV_NULL(),//Generic Onoff Server ModelBT_MESH_MODEL_GEN_ONOFF_SRV_NULL(),
}
//定义composition data
static const struct bt_mesh_comp mesh_comp={
.cid=0x01A8,
.elem=elements,
.elem_count=ARRAY_SIZE(elements),
}
//组件初始化
ret=ble_mesh_model_init(&mesh_comp);
//Mesh Model 回调函数注册,需要注意如果使用Mesh Node 组件,不需要注册回调,通过Node 组件的中的user_model_cb回调获取Model信息
ble_mesh_model_set_cb(app_event_cb);void app_event_cb(mesh_model_event_en event,void *p_arg)
{switch(event){case BT_MESH_MODEL_ONOFF_SET:{if(p_arg){model_message message=*(model_message *)p_arg;S_ELEM_STATE *elem_state =(S_ELEM_STATE)message.user_data;//解析数据,并控制等的开关if(elem_state->state.onoff[T_TAR]){//开灯led_set_status(led2,true);}else{led_set_status(led2,false);}}}break;default:break;}
}

3.Genie APP

天猫精灵组件,支持天猫MESH Models,天猫精灵的接入,三要素写入/存储/获取功能。

gennie_init();

三要素是:

//设置三要素

set_tt <product id> <key> <mac address>

//获取三要素

get_tt

三、蓝牙Mesh灯控开发实例

1.应用初始化:应用入口函数app_main()

  • 板子初始化
  • MESH灯Model定义
  • Mesh节点初始化,注册Model事件回调处理函数

2.设备模型定义

  • Configuration Server Model :用于存储节点的MESH网络配置

  • Health Server Model:用于MESH网络诊断

  • Generic OnOff Server Model:用于获取、控制设备的开关属性

  • Generic Level Server Model:用于获取、控制设备的挡位属性

  • Generic Lightness Server Model:用于获取、控制设备的亮度属性】

  • Generic CTL Server Model/Generic CTL Setup Server Model/Generic CTL Temperature Server Model : 用于调节设备的色温属性。

3.MESH Models 事件回调处理

1.应用初始化代码:

/*定义设备名称,使用手机APP扫描时可以看到该名称*/
#define DEVICE NAME "YoC Light"
/*定义设备UUID */
#define LIGHT DEV_ UUID {0xcf, 0xa0, 0xe3, 0x7e, 0x17, 0xd9, 0x11, 0xe8, 0x86,
0xd1, 0x5f, 0x1c, 0xe2, 0xBa, 0xde, 0x02 }
node_ config_ t g_ node_ param ={
/* 设置当前为设备节点 */
.role = NODE,
/* 设置节点的UUID */
dev uuid = LIGHT DEV UUID,
/* 设置节点的 Device Name */
dev name = DEVICE NAME ,
/*注册Model的事件处理回调函数*/
.user_ model_ cb = app_ event_ cb,
/*注册Provision的事件处理回调函数*/
.user_ prov_ cb = NULL,
/* RSSI上报功能使能标识,默认关闭*/
.rssi_ report enable = 0,
};
int app_ main(int argc, char *argv[])/*板级初始化,各业务模块初始化*/board yoc_ init() ;/* MESH灯Model定义,根据灯实际功能定义,如开关、亮度、色温控制等*/ret = app_ mesh_ composition init();/* MESH节点初始化,设置节点UUID、Device Name并注册Model事件回调函数*/ret = ble_ mesh_ node_ init (&g_ node_ param) ;/*信号量初始化*/aos_ sem new(&sync sem, 0) ;while (1) {/*等待信号量*/aos_ sem wait (&sync_ sem, AOS_ WAIT_ FOREVER) ;return 0;}
}

2.设备模型定义代码:

static struct bt_ mesh_ model elem0_ root_ models[] ={
/*本设备节点的Configuration Server 模型定义*/
BT_ MESH MODEL CFG_ SRV_ NULL() ,
/*本设备节点的Health Server模型定义*/
BT_ MESH MODEL HEALTH SRV_ NUL(),
/*本设备节点的Generic OnOff Server模型定义*/
BT_ MESH MODEL_ GEN _ONOFF SRV_ NULL(),
/*本设备节点的Generic Level Server模型定义*/
BT_ MESH MODEL_ GEN LEVEL SRV_ NULL() ,
/*本设备节点的Generic Lightness Server模型定义*/
BT MESH MODEL LIGHTNESS_ SRV_ NULL() ,
/*本设备节点的Generic CTL Server模型定义*/
AT MRSH monrt._ CTT. SRV_ NITT.T.L,
/*本设备节点的Generic CTL Setup Server模型定义*/
BT_ MESH MODEL CTL SETUP SRV NULL() ,
/*本设备节点的Generic CTL Temperature Server模型定义*/
BT_ MESH MODEL CTL TEMP SRV_ NULL(),
};
/*本设备节点的Vendor Models模型定义*/
static struct bt_ mesh. model elem0_ vnd_ models[] ={
BT MESH MODEL VENDOR SRV_ NULL,
};/*本设备节点的Elements定义*/
static struct bt_ mesh_ elem elements[] = {
BT_ MESH_ ELEM(O, elem0 root models, elem0_ vnd models, 0),
};
/*本设备节点的Composition Datas定义,定义CompanyID、 Elements */
static const struct bt_ mesh_ comp mesh_ comp = {
/*设置设备节点的CompanyID */
.cid = 0x01A8 ,
/* 设置设备节 点的Elements */
.elem = elements,
/*设置设备节点Elements的个数*/
.elem count = ARRAY_ SIZE (elements),
};int app_ mesh_ composition init()
{int ret;/* Models 初始化*/ret = ble_ mesh_ model_ init (&mesh. comp) ;return ret;
}

3.MESH Models 事件回调处理

void app_ event_ cb (uint16_七event, void *p_ arg)switch (event) {/*控制OnOff属性★/case BT MESH MODEL ON0FF SET:{if (p_ arg){model_ message message =* (model_ message *)p_ arg;S_ ELEM STATE *elem_ state = (S_ ELEM STATE *)message.user data;/*根据数据包中OnOff值,控制OnOff属性*/if (elem_ state->state. onoff [T_ TAR]) {/*控制LED灯亮*/led_ set_ status (1ed2,true) ;} else{/*控制LED灯灭*/led_ set_ status(led2, false) ;}}break;/*通过Vendor Model,发送私有数据*/case BT MESH MODEL VENDOR MESSAGES:{if (p_ arg) {model_ message message =*(model_message *)p_ arg;char data _out[80] = {0};}}break;default:break;
}

PS:网络中需要存在多个节点时,需要更改代码中设备UUID后编译烧录该镜像,并烧录
镜像时设置不同的MAC地址,避免组网出现问题。

蓝牙Mesh 灯控案例相关推荐

  1. 蓝牙MESH网关_智能蓝牙Mesh灯控,让你一机掌控亮与暗

    随着物联网在人们日常生活中的广泛应用和日益成熟,智能家居已然呈星星之火之势,智能照明作为智能家居的重要组成部分,现在市场上的智能照明产品也随处可见,如智能LED灯.而对于智能LED灯来说,一套好的智能 ...

  2. 蓝牙Mesh灯控方案简介

    目前,蓝牙技术已被广泛应用于包括消费电子.汽车电子.医疗设备.智能家居甚至是工业领域在内的所有物联网智能产品中.蓝牙Mesh智能灯,只是智能家居设备的开始,采用蓝牙Mesh方案的智能家居设备,能够自动 ...

  3. 智能蓝牙Mesh灯控,让你一机掌控亮与暗

    随着物联网在人们日常生活中的广泛应用和日益成熟,智能家居已然呈星星之火之势,智能照明作为智能家居的重要组成部分,现在市场上的智能照明产品也随处可见,如智能LED灯.而对于智能LED灯来说,一套好的智能 ...

  4. 开放下载!《无需从0开发 平头哥教你1天上手蓝牙Mesh应用解决方案》

    当你疲惫了一天,回到家里,点点手机灯就亮了,再唤醒天猫精灵放首歌,这样智能的家,恐怕这是很多人梦寐以求的吧.而蓝牙 MESH 智能灯,是智能家居系统中最基础的设施.蓝牙 MESH 智能灯是如何实现轻松 ...

  5. 【平头哥蓝牙Mesh网关开发套件试用体验】测试网关+PHY6220蓝牙mess 智能灯

    作者:云霄一天 平头哥蓝牙 Mesh SDK 是基于低功耗蓝牙芯片 PHY6212 /PHY6220提供的软件开发套件.该开发套件以 YoC 平台为基础,对蓝牙 MESH 协议栈做了深度优化和整合,为 ...

  6. android ble mesh,Android 蓝牙Mesh组网代码详解

    文章目录前言Mesh组网基本理解扫描设备组网meshAddress添加与重连UUID连接登录修改信息控制与接收设备数据总结 前言 上面的几篇文章都是在说Android网络编程方面的内容,我本来就有打算 ...

  7. Android 蓝牙Mesh组网代码详解

    文章目录 前言 Mesh组网基本理解 扫描设备 组网 meshAddress 添加与重连 UUID 连接 登录 修改信息 控制与接收设备数据 总结 2020年2月23日补充 前言   上面的几篇文章都 ...

  8. 智能家居——蓝牙mesh智能室内灯控网络

    "在不远的未来,没有智能家居系统的住宅,会像今天不能上网的住宅那样不合潮流" --<未来之路> 智能家居,即Smart Home,是将灯光.家电.燃气预警.远程控制.安 ...

  9. 伦茨科技蓝牙BLE5.2灯控方案

    随着物联网在人们日常生活中的广泛应用和日益成熟,智能家居已然呈星星之火之势,智能照明作为智能家居的重要组成部分,现在市场上的智能照明产品也随处可见,如蓝牙LED灯.接下来就讲讲伦茨科技的蓝牙BLE5. ...

最新文章

  1. error LNK2005: “找到一个或多个多重定义的符号” 已经在 xxxx.obj 中定义 的解决方法
  2. python sharedctypes 多进程性能测试
  3. 团队项目-个人博客-4.20
  4. Spring学习8-Spring事务管理(AOP/声明式式事务管理)
  5. 在线压缩png图像工具
  6. python笔记之序列(tuple的基本使用和常用操作)
  7. shell 创建表 连接db2_大数据技术之SparkSQL(七)连接Hive数据库
  8. 先知模型 facebook_Facebook先知
  9. 微信小程序—day01
  10. Eclipse中 Project facet jst.web.jstl has not been defined.解决方案
  11. Kafka应用实践与生态集成
  12. 275页PDF:《编写高质量代码:改善Python程序的91个建议》
  13. Ubuntu 20.04 双系统安装过程(新手)
  14. 终级免杀之PcShare Vs KV2006
  15. mac安装指定版本的ruby_Mac 下安装Ruby环境
  16. python网易云_Python数据可视化:网易云音乐歌单
  17. 小麦苗健康检查脚本说明(Oracle巡检脚本)
  18. OR1200处理器的计时器模块TT介绍
  19. 数据管理能力成熟度模型(DMM)
  20. 计算机ping不通dns,电脑不能上网但是可以Ping通和DNS解析解决办法是什么

热门文章

  1. 解决CUDA程序的黑屏恢复问题
  2. 安卓大作业:使用Android Studio开发天气预报APP(使用sqlite数据库)
  3. 烽火HG680KA-Hi3798MV310-当贝纯净桌面-卡刷固件包
  4. ubuntu使用nomachine远程桌面
  5. 挑战阿里社招:从底层开始带你了解并发编程
  6. 执行Java时目录名称无效,如何修复目录名称无效
  7. 【Leetcode】748. Shortest Completing Word
  8. stack expects each tensor to be equal size, but got [3, 40, 160] at entry 0 and [4, 40, 160] at entr
  9. mysql 欧拉_欧拉路径和欧拉回路
  10. 清除Android Studio所有设置,恢复到初始