当前位置:   article > 正文

蓝牙Mesh 灯控案例_5.8g雷达感应蓝牙mesh灯管开发文档

5.8g雷达感应蓝牙mesh灯管开发文档

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消息的接收功能。

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

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

  1. #define DEVICE_NAME "YOC Light NODE"
  2. #define LIGHT_DEV_UUID {0xC0,0xC1,0xC0,0xC2,0xC3,0xC9,0xC0,0xC1,0xC0,0xC2,0xC3,0xC9,0xC0,0xC1,0xC0,0xC2,0xC3,0xC9}
  3. node_config_t g_node_param={
  4. //设置当前为设备节点
  5. .role =NODE, //设置当前为设备节点
  6. .dev_uuid=LIGHT_DEV_UUID, //设置节点的UUID
  7. .dev_name=DEVICE_NAME, //设置节点的名称
  8. .dev_model_cb=app_event_cb, //注册Model的事件回调函数
  9. .dev_prov_cb=app_prov_event_cb, //注册Provision的事件处理回调函数
  10. .rssi_report_enable=0 //RSSI上报功能使能标识,默认关闭
  11. }
  12. //MESH的Node初始化
  13. ret=ble_mesh_node_init(&g_node_param);
  14. //回调处理函数
  15. void app_prov_event_cb(mesh_prov_event_en event,void *p_arg)
  16. {
  17. switch(event){
  18. //配网成功,亮绿灯
  19. case BT_MESH_EVENT_NODE_PROV_COMP:{
  20. if(p_arg){
  21. mesh_node_local *node =(mesh_node_local_t *)p_arg;
  22. LOGI(TAG,"prov complete %04x",node->prim_unicast);
  23. prov_succeed_flag=1;
  24. led_control(led_dev,COLOR_GREEN,-1,-1);
  25. }
  26. }
  27. break;
  28. //节点复位,绿灯闪烁
  29. case BT_MESH_EVENT_NODE_REST:{
  30. LOGI(TAG,"node reset");
  31. led_control(led_dev,COLOR_GREEN,200,200);
  32. }
  33. break;
  34. //配网要求输入数字,通过其他方式比如按键,获取数字后,调用//ble_mesh_OOB_input_num接口输入
  35. case BT_MESH_EVENT_NODE_OOB_INPUT_NUM:
  36. {
  37. if(p_arg)
  38. {
  39. LOGI(TAG,"oob input num size :%d",*(uint8_t)p_arg);
  40. }
  41. }
  42. break;
  43. //配网要求输入字符串,通过其他方式,比如其他方式,例如按键,获取字符串后,调用ble_mesh_node_OOB_input_string接口输入
  44. case BT_MESH_NODE_OOB_INPUT_STRING:{
  45. LOGI(TAG,"oob input string size :%d",*(uint8_t)p_arg);
  46. }
  47. break;
  48. default:
  49. break;
  50. }
  51. }

2.Mesh Models:

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

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

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

  1. static struct bt_mesh_model elem0_root_models[]={
  2. //configuration Sever Model 必选Model
  3. BT_MESH_MODEL_CFG_SRV_NULL(),
  4. //Health Server Model ,可选Model
  5. BT_MESH_MODEL_HEALTH_SRV_NULL(),
  6. //Generic Onoff Server Model
  7. BT_MESH_MODEL_GEN_ONOFF_SRV_NULL(),
  8. }
  9. //定义composition data
  10. static const struct bt_mesh_comp mesh_comp={
  11. .cid=0x01A8,
  12. .elem=elements,
  13. .elem_count=ARRAY_SIZE(elements),
  14. }
  15. //组件初始化
  16. ret=ble_mesh_model_init(&mesh_comp);
  17. //Mesh Model 回调函数注册,需要注意如果使用Mesh Node 组件,不需要注册回调,通过Node 组件的中的user_model_cb回调获取Model信息
  18. ble_mesh_model_set_cb(app_event_cb);
  19. void app_event_cb(mesh_model_event_en event,void *p_arg)
  20. {
  21. switch(event){
  22. case BT_MESH_MODEL_ONOFF_SET:{
  23. if(p_arg){
  24. model_message message=*(model_message *)p_arg;
  25. S_ELEM_STATE *elem_state =(S_ELEM_STATE)message.user_data;
  26. //解析数据,并控制等的开关
  27. if(elem_state->state.onoff[T_TAR])
  28. {
  29. //开灯
  30. led_set_status(led2,true);
  31. }else{
  32. led_set_status(led2,false);
  33. }
  34. }
  35. }
  36. break;
  37. default:
  38. break;
  39. }
  40. }

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.应用初始化代码:

  1. /*定义设备名称,使用手机APP扫描时可以看到该名称*/
  2. #define DEVICE NAME "YoC Light"
  3. /*定义设备UUID */
  4. #define LIGHT DEV_ UUID {0xcf, 0xa00xe30x7e, 0x170xd90x110xe80x86
  5. 0xd1, 0x5f, 0x1c, 0xe20xBa, 0xde, 0x02 }
  6. node_ config_ t g_ node_ param ={
  7. /* 设置当前为设备节点 */
  8. .role = NODE,
  9. /* 设置节点的UUID */
  10. dev uuid = LIGHT DEV UUID,
  11. /* 设置节点的 Device Name */
  12. dev name = DEVICE NAME ,
  13. /*注册Model的事件处理回调函数*/
  14. .user_ model_ cb = app_ event_ cb,
  15. /*注册Provision的事件处理回调函数*/
  16. .user_ prov_ cb = NULL,
  17. /* RSSI上报功能使能标识,默认关闭*/
  18. .rssi_ report enable = 0,
  19. };
  20. int app_ main(int argc, char *argv[])
  21. /*板级初始化,各业务模块初始化*/
  22. board yoc_ init() ;
  23. /* MESH灯Model定义,根据灯实际功能定义,如开关、亮度、色温控制等*/
  24. ret = app_ mesh_ composition init();
  25. /* MESH节点初始化,设置节点UUID、Device Name并注册Model事件回调函数*/
  26. ret = ble_ mesh_ node_ init (&g_ node_ param) ;
  27. /*信号量初始化*/
  28. aos_ sem new(&sync sem, 0) ;
  29. while (1) {
  30. /*等待信号量*/
  31. aos_ sem wait (&sync_ sem, AOS_ WAIT_ FOREVER) ;
  32. return 0;
  33. }
  34. }

2.设备模型定义代码:

  1. static struct bt_ mesh_ model elem0_ root_ models[] ={
  2. /*本设备节点的Configuration Server 模型定义*/
  3. BT_ MESH MODEL CFG_ SRV_ NULL() ,
  4. /*本设备节点的Health Server模型定义*/
  5. BT_ MESH MODEL HEALTH SRV_ NUL(),
  6. /*本设备节点的Generic OnOff Server模型定义*/
  7. BT_ MESH MODEL_ GEN _ONOFF SRV_ NULL(),
  8. /*本设备节点的Generic Level Server模型定义*/
  9. BT_ MESH MODEL_ GEN LEVEL SRV_ NULL() ,
  10. /*本设备节点的Generic Lightness Server模型定义*/
  11. BT MESH MODEL LIGHTNESS_ SRV_ NULL() ,
  12. /*本设备节点的Generic CTL Server模型定义*/
  13. AT MRSH monrt._ CTT. SRV_ NITT.T.L,
  14. /*本设备节点的Generic CTL Setup Server模型定义*/
  15. BT_ MESH MODEL CTL SETUP SRV NULL() ,
  16. /*本设备节点的Generic CTL Temperature Server模型定义*/
  17. BT_ MESH MODEL CTL TEMP SRV_ NULL(),
  18. };
  19. /*本设备节点的Vendor Models模型定义*/
  20. static struct bt_ mesh. model elem0_ vnd_ models[] ={
  21. BT MESH MODEL VENDOR SRV_ NULL,
  22. };
  23. /*本设备节点的Elements定义*/
  24. static struct bt_ mesh_ elem elements[] = {
  25. BT_ MESH_ ELEM(O, elem0 root models, elem0_ vnd models, 0),
  26. };
  27. /*本设备节点的Composition Datas定义,定义CompanyID、 Elements */
  28. static const struct bt_ mesh_ comp mesh_ comp = {
  29. /*设置设备节点的CompanyID */
  30. .cid = 0x01A8 ,
  31. /* 设置设备节 点的Elements */
  32. .elem = elements,
  33. /*设置设备节点Elements的个数*/
  34. .elem count = ARRAY_ SIZE (elements),
  35. };
  36. int app_ mesh_ composition init()
  37. {
  38. int ret;
  39. /* Models 初始化*/
  40. ret = ble_ mesh_ model_ init (&mesh. comp) ;
  41. return ret;
  42. }

 3.MESH Models 事件回调处理

  1. void app_ event_ cb (uint16_七event, void *p_ arg)
  2. switch (event) {
  3. /*控制OnOff属性★/
  4. case BT MESH MODEL ON0FF SET:{
  5. if (p_ arg){
  6. model_ message message =* (model_ message *)p_ arg;
  7. S_ ELEM STATE *elem_ state = (S_ ELEM STATE *)message.user data;
  8. /*根据数据包中OnOff值,控制OnOff属性*/
  9. if (elem_ state->state. onoff [T_ TAR]) {
  10. /*控制LED灯亮*/
  11. led_ set_ status (1ed2true) ;
  12. } else{
  13. /*控制LED灯灭*/
  14. led_ set_ status(led2, false) ;
  15. }
  16. }
  17. break;
  18. /*通过Vendor Model,发送私有数据*/
  19. case BT MESH MODEL VENDOR MESSAGES:{
  20. if (p_ arg) {
  21. model_ message message =*(model_message *)p_ arg;
  22. char data _out[80] = {0};
  23. }
  24. }
  25. break;
  26. default:
  27. break;
  28. }

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/368277
推荐阅读
  

闽ICP备14008679号