1 蓝牙mesh互传及蓝牙单向穿透的功能测试-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

蓝牙mesh互传及蓝牙单向穿透的功能测试

全志在线 来源:全志在线开发者论坛 2023-12-11 11:34 次阅读

相较于WiFi技术,低功耗蓝牙BLE技术具有搜索连接速度快、超低功耗等特点,BLE搭配mesh技术所延伸的蓝牙mesh技术因其支持多点对多点连接、物理覆盖区域广阔,也被广泛用于智能家居中控、智能安防、智慧楼宇等物联网设备上。

XR806是一款支持BLE 5.0、支持完整低功耗蓝牙服务GATT、支持SIG mesh完整协议栈的无线芯片,同样适配物联网设备的使用场景需求,在通过官方文档的指引下配置好XR806的RTOS环境后,可按文章介绍步骤进行后续的蓝牙mesh互传及蓝牙单向穿透的功能测试。

蓝牙mesh互传

最新的蓝牙mesh1.1引入了定向转发路由功能,扩大射频覆盖范围,使信号一级级中继下去,手头有nRF52840开发板,不妨和全志XR806进行组网,测试兼容性和互操作性,也验证XR806 mesh协议栈的完成度。先看效果:

c86c4296-95ad-11ee-8b88-92fbcf53809c.gif

nRF52840用Segger Embedded Studio打开工程:

nrf5SDKforMeshv320srcexampleslight_switchserver

同时烧录协议栈和APP;XR806为观察到现象,将mesh例程的收到mesh opcode的回调接口加个指示信号,具体为:

static void gpio_output_init(void)
{
 GPIO_InitParam param;
 param.driving = GPIO_DRIVING_LEVEL_1;
 param.mode = GPIOx_Pn_F1_OUTPUT;
 param.pull = GPIO_PULL_NONE;
 HAL_GPIO_Init(GPIO_OUTPUT_PORT, GPIO_OUTPUT_PIN, ¶m);//PA21
}


/***************Onoff Configuration Declaration*******************/
static void app_onoff_srv_set_cb(const struct bt_mesh_model *model, uint8_t onoff, uint8_t target_onoff, const struct bt_mesh_transition_status *opt)
{
 g_onoff_value = onoff;
 HAL_GPIO_WritePin(GPIO_OUTPUT_PORT, GPIO_OUTPUT_PIN, onoff ? GPIO_PIN_HIGH : GPIO_PIN_LOW);
 printf("[app] onoff set(%d)", onoff);
 if (opt) {
  printf("target onoff(%d), total_steps(%d), steps(%d)",
      target_onoff, opt->total_steps, opt->present_steps);
 }
 printf("
");
}

编译完后将mesh_demo烧录进XR806中,将XR806的GenericOnOff Server订阅到publisher的发布地址,就能实现同一网络(具备同一网络密钥可以正确解析出mesh消息)内的消息传递。


此时用nRF Mesh去给nRF52840和XR806分别入网和设置订阅地址,本次将他们订阅到0xC000。

c8a38c24-95ad-11ee-8b88-92fbcf53809c.jpg

由于入网过程没有录制下来,且XR806无法退网,且入网信息暂时没找到擦除方法,这样重新烧录还是保持入网状态而无法回到unprovisioned状态。

nRF52840接到JlinkRTT Viewer,XR806接到putty,可以看到XR806的Controller/host协议栈的版本信息,手机发布一条开关(由GernericOnOff元素统属)消息,泛洪给两台射频设备,可以在各自控制台看到都有收到set opcode网络消息。

c8b6b538-95ad-11ee-8b88-92fbcf53809c.png

蓝牙穿透(单向)

有时无线透传在无法布线时有很方便的效用,不妨试试蓝牙透传,效果如下:

c9209958-95ad-11ee-8b88-92fbcf53809c.gif

具体是无线数据->串口数据,串口数据->无线数据,目前前者实现了,后者还有些问题未解决,

c8b6b538-95ad-11ee-8b88-92fbcf53809c.png

实现过程如下,基于工程:

demo/Bluetooth/peripheral_demo改成peripheral_uart_demo

同时目录下文件里工程名也进行修改:

peripheral_uart_demo/gcc/defconfig改成peripheral_uart_demo

然后引入串口读写独立接口即把demo/at_demo下的serial.c、serial.h、serial_debug.h复制到刚才peripheral_uart_demo工程下,由于要无线写以及串口写转无线,所以profile涉及到write_without_rsp和notify,具体配置为:

static struct bt_gatt_attr vnd_attrs[] = {
 /* Vendor Primary Service Declaration */
 BT_GATT_PRIMARY_SERVICE(&vnd_uuid),
 BT_GATT_CHARACTERISTIC(&vnd_enc_uuid.uuid,
         BT_GATT_CHRC_WRITE_WITHOUT_RESP | BT_GATT_CHRC_NOTIFY,
         BT_GATT_PERM_WRITE,
         NULL, write_without_rsp_vnd, &vnd_value),
 BT_GATT_CCC(vnd_ccc_notify_changed, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE),
};

写回调接口为:

/**********************vnd_write_cmd_uuid*****************************/
static ssize_t write_without_rsp_vnd(struct bt_conn *conn,
        const struct bt_gatt_attr *attr,
        const void *buf, uint16_t len, uint16_t offset,
        uint8_t flags)
{
 uint8_t *value = attr->user_data;


 /* Write request received. Reject it since this char only accepts
  * Write Commands.
  */
 if (!(flags & BT_GATT_WRITE_FLAG_CMD)) {
  return BT_GATT_ERR(BT_ATT_ERR_WRITE_REQ_REJECTED);
 }


 if (offset + len > sizeof(vnd_value)) {
  return BT_GATT_ERR(BT_ATT_ERR_INVALID_OFFSET);
 }


 memset(value, 0, sizeof(vnd_value));
 memcpy(value + offset, buf, len);
 serial_write(value + offset, len);
 *(value + offset + len) = '�';
 printf("
write_without_rsp_vnd");
 return len;
}

串口转无线回调(有问题):

static void vnd_notify(void)
{
 static uint8_t vnd[MAX_LONG_DATA];
 uint16_t len=0;
 if (!vnd_notif_enabled)
  return;
 printf("
notify
");
 serial_read(vnd_notify_value,len);
 if(len>MAX_LONG_DATA || len==0)
  return;
 memcpy(vnd, vnd_notify_value, len);
  printf("
vnd_notify
");
 bt_gatt_notify(NULL, &vnd_svc.attrs[1], vnd, sizeof(vnd));
}

然后在bt_app_init函数里加入透传口UART1的初始化代码即可:

 serial_init(SERIAL_UART_ID, 115200, UART_DATA_BITS_8, UART_PARITY_NONE,
  UART_STOP_BITS_1, 0);
 serial_start();

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 蓝牙
    +关注

    关注

    114

    文章

    5807

    浏览量

    170181
  • 物联网
    +关注

    关注

    2909

    文章

    44556

    浏览量

    372736
  • WIFI
    +关注

    关注

    81

    文章

    5295

    浏览量

    203561
  • Mesh
    +关注

    关注

    5

    文章

    203

    浏览量

    29812
  • 无线芯片
    +关注

    关注

    1

    文章

    78

    浏览量

    23905

原文标题:物联网设备人柱力,XR806蓝牙mesh互传及单向穿透功能测试

文章出处:【微信号:gh_79acfa3aa3e3,微信公众号:全志在线】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    蓝牙Mesh网络是什么?手机如何接入到蓝牙Mesh网络?

    蓝牙Mesh网络是什么?蓝牙Mesh网络有哪些特性?手机如何接入到蓝牙Mesh网络?
    发表于 06-26 07:18

    什么是蓝牙mesh蓝牙mesh有哪些功能

    请问下什么是蓝牙mesh蓝牙mesh有哪些功能
    发表于 06-30 07:08

    【平头哥蓝牙Mesh网关开发套件试用体验】mesh开关控制mesh灯 + 测试视频

    本帖最后由 jf_11671167 于 2021-10-9 16:20 编辑 本文对 PHY6220 蓝牙mesh 开关、蓝牙mesh灯配置,并用
    发表于 09-26 23:16

    【平头哥蓝牙Mesh网关开发套件试用体验】手机控制蓝牙mesh灯 + 测试视频

    ; mesh_light_node_demo ,官方 demo 工程创建完成后编译下载到 PHY6220 开发板,详细步骤参考笔者往期文章:【平头哥蓝牙Mesh网关开发套件试用体验】PHY6220
    发表于 09-26 23:23

    全志XR806蓝牙mesh互传功能测试

    评测二 蓝牙mesh互传 最新的蓝牙mesh1.1引入了定向转发路由功能,扩大射频覆盖范围,使信
    发表于 12-07 15:49

    蓝牙模块低功耗蓝牙4.2蓝牙Mesh组网方案

    蓝牙模块低功耗蓝牙4.2蓝牙Mesh组网方案,本文介绍了能进行Mesh组网的蓝牙模块的一些基本参
    发表于 09-28 16:41 39次下载

    解密:Ble低功耗蓝牙蓝牙mesh网络之间的关系

    能够接收和利用其广播的其他设备数量没有明确的限制。蓝牙Beacon就是蓝牙广播功能的一个绝佳案例。 二、蓝牙mesh基于ble低功耗
    的头像 发表于 06-12 11:12 9678次阅读

    如何选择合适的蓝牙mesh开发套件?

    2017年7月,蓝牙技术联盟(Bluetooth SIG)正式宣布推出蓝牙mesh规格,在蓝牙技术点对点和广播功能的基础上添加了
    的头像 发表于 08-10 10:54 4423次阅读

    蓝牙网关与蓝牙Mesh之间的区别

    1、蓝牙网关的定义 蓝牙网关是一个集成蓝牙 BLE、WiFi 和以太网的网关设备,蓝牙 BLE 与 WiFi之间通过串口实现通信,可灵活应用于各种物联网场景。 2、
    的头像 发表于 07-10 14:32 3.9w次阅读

    如何用蓝牙mesh开关控制蓝牙mesh

    本文对 PHY6220 蓝牙mesh 开关、蓝牙mesh灯配置,并用蓝牙mesh开关控制
    的头像 发表于 10-09 09:22 7736次阅读

    快速了解最新蓝牙Mesh规范的新增功能特性

    联盟( Bluetooth SIG )最近发布新的蓝牙 Mesh 规范, Silicon Labs (亦称“芯科科技”)亦已借此机会提供全系列支持新标准的蓝牙 SoC 和模块产品阵容。本文将概略介绍
    的头像 发表于 10-09 15:45 457次阅读
    快速了解最新<b class='flag-5'>蓝牙</b><b class='flag-5'>Mesh</b>规范的新增<b class='flag-5'>功能</b>特性

    MesoonRF:蓝牙mesh灯控方案

    目前,蓝牙技术已经被广泛应用于包括消费电子、汽车电子、医疗设备、智能家居甚至是工业领域在内的所有物联网智能产品中。蓝牙Mesh智能灯,只是智能家居设备的开始,采用蓝牙
    的头像 发表于 12-21 11:24 761次阅读

    低功耗蓝牙蓝牙Mesh模块的区别与关系

    低功耗蓝牙模块和蓝牙Mesh模块的区别与关系 蓝牙Mesh并非无线通信技术,而是一种网络技术。蓝牙
    的头像 发表于 05-30 11:13 774次阅读

    蓝牙MESH是什么?

    蓝牙Mesh是一种基于蓝牙技术的无线通信网络协议,专门设计用于创建大规模设备网络,特别适用于物联网(IoT)应用。以下是蓝牙Mesh的一些关
    的头像 发表于 09-14 08:03 1466次阅读
    <b class='flag-5'>蓝牙</b><b class='flag-5'>MESH</b>是什么?

    蓝牙网关和蓝牙mesh网关区别

    蓝牙网关和蓝牙Mesh网关是两种不同的技术,它们在物联网(IoT)领域中扮演着重要的角色。 蓝牙网关和蓝牙
    的头像 发表于 10-18 10:33 1898次阅读