0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

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

3天内不再提示

【EsDA应用】蓝牙服务端节点详解

ZLG致远电子 2023-05-31 09:46 次阅读

蓝牙作为一种近距离无线通信技术,被广泛使用在汽车,智能家居和医疗等领域中。本文主要介绍如何通过EsDA开发套件,快速实现蓝牙服务器的相关应用业务。

f7c8ecd0-fa92-11ed-ba01-dac502259ad0.jpg 简介

前面文章讲解了ble_client的相关节点和业务处理,有兴趣的可以跳转链接【EsDA应用】蓝牙客户端节点详解去查看。

本文主要基于MPC_ZC1开发板以及可将节点进行拖拽连接的图形化设计工具AWFlow Designer,着重对UIS8910DM平台的板载蓝牙的配套节点以及示例进行讲解。本文除了对ble_server设备端节点进行详细阐述还有以MPC_ZC1开发板做蓝牙服务器的相关应用业务介绍如:定义支持的服务,发布服务器以便远程客户端可连接,响应读取和写入请求等。

f7c8ecd0-fa92-11ed-ba01-dac502259ad0.jpg 节点介绍

因蓝牙服务端节点中的属性数量过多,所以本节只介绍几个重点属性,其他的属性内容详见AWFlow Designer上相关节点的帮助文档。

1. 配置节点1.1 ble_server创建BLE服务端设备,保存用户传入的广播配置。1.1.1 属性

  • 发现模式:值为0表示不可发现模式;值为1表示有限可发现模式;值为2表示普通可发现模式。
  • 广播类型:值为0表示可连接的非定向广播;值为1表示可连接的定向广播;值为2表示不可连接的非定向广播;值为3表示可扫描的非定向广播。
  • 广播信道:广播通道映射在37、38、39通道通信。值为0时表示通道37被使用,值为1时表示通道38被使用,值为2时表示通道39被使用。

广播的过滤策略:

值为0时表示处理所有设备的扫描和连接请求;

值为1时表示处理所有设备的连接请求和只有白名单上的设备的扫描请求;

值为2时表示处理所有设备的扫描请求和只有白名单上的设备的连接请求;

值为3时表示只处理在白名单上的设备的扫描和连接请求。

SMP配对模式的参数

smp_pair_mode

io_cap

安全等级

SECURE_CONNECTION_PASSKEY

KEYBOARD_DISP

最高

SECURE_CONNECTION_JUSTWORK

NOIN_NOOUT

次之

LEGACY_PASSKEY

KEYBOARD_DISP

第三

LEGACY_JUSTWORK

NOIN_NOOUT

最低

  • 支持的服务个数:支持提供的服务个数,需要与流图中添加的服务数量一致。* 配置节点无输入输出。

2. 服务端节点2.1 ble_server_service2.1.1 属性

  • BLE服务端配置节点:关联到的BLE服务端配置节点。
  • 服务UUID:支持提供服务的UUID。支持2个字节或16个字节,按照小端模式依次用逗号隔开。
  • 支持服务的特征相关属性:

特征值的格式

特征声明的性质

特征值的权限

短UUID

广播属性

可读

修补长度

读属性

可写

写通知

不带回复的写属性

读取认证

带回复的写属性

读取授权

冲突通知

通知属性

读取加密

追加写

指示属性

读取认证文件

签名认证的写属性

写认证

扩展属性

写授权

写加密

写认证文件

只允许经典蓝牙访问

2.1.2 输入

payload:输入数据。传入特征值数据,可以使用“fscript”节点作为前级节点,设置需要写入的数据。

payloadLength:输入数据。传入特征值数据的长度,可以使用“fscript”节点作为前级节点,设置需要写入的数据长度,最大不超过255。

2.1.3 输出本节点无实质性数据输出,其消费者节点一般是ble_server_adv节点。2.2 ble_server_adv

2.2.1 属性

BLE服务端配置节点:关联到的BLE服务端配置节点。

  • 蓝牙本地设备名称:蓝牙服务端本地设备的名称,代码里自动将此参数加入到广播数据包的类型为09的小数据包中。

广播数据包最长31个字节,而这31个字节又被拆分成很多小数据包,每个小数据包代表一类广播数据。

每个小数据包是由:length(数据长度)+type(类型)+data(数据内容)构成的。

需要广播的每个小数据包的数据长度:表示需要广播的每个小数据包的数据长度(数据内容的字节长度+1)。因为格式是csv,所以多个数据包的数据长度按顺序用逗号来隔开。

需要广播的每个小数据包的数据类型:表示需要广播的每个小数据包的数据长度(数据内容的字节长度+1)。多个数据包的数据类型按顺序用逗号来隔开。

扫描响应的每个小数据包的数据内容:表示扫描响应的每个小数据包的数据内容。多个数据包的数据内容按顺序用逗号来隔开。

扫描响应的每个小数据包的数据类型:表示扫描响应的每个小数据包的数据类型,多个数据包的数据类型按顺序用逗号来隔开。具体的广播数据包类型详细信息可在网上进行查阅。

数据类型为09表示本地设备名称即属性蓝牙本地设备名称,现已被后续代码自动处理加入到了广播数据包中。计算长度时需注意,如若广播数据包超过最长31个字节的内容,则截断。

扫描响应的每个小数据包的数据内容:表示扫描响应的每个小数据包的数据内容。多个数据包的数据内容按顺序用逗号来隔开。

如:需要广播的每个小数据包的数据长度为0x02;需要广播的每个小数据包的数据类型为:0x01;需要广播的每个小数据包的数据内容为:0x06。那么算上蓝牙本地设备名称:(BLE-ZC1)0x42,0x4c,0x45,0x2d,0x5a,0x43,0x31,

那么最终的广播数据包为0x08(数据长度),0x09(数据类型),

0x42,0x4c,0x45,0x2d,0x5a,0x43,0x31(数据内容BLE-ZC1),

0x02(数据长度),0x01(数据类型),

0x06(数据内容),

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

2.2.2 输入

ble_server_adv节点的输入并无实际意义的输入,由ble_server_service节点作为前级节点,进入当前节点的on_data虚函数中开启广播。

  • * sink类型节点无输出功能

f7c8ecd0-fa92-11ed-ba01-dac502259ad0.jpg  业务处理

定义支持的服务:由ble_server_service节点添加服务UUID和特征值UUID以及特征值数据;发布服务器,以便远程客户端可连接:由ble_server_adv节点开启广播(在一个运行程序中不能多次开启广播)后服务端蓝牙准备完成,开始等待客户端蓝牙设备连接;以及后续的响应读取和写入请求。实现框图如下所示。

f80dbc5c-fa92-11ed-ba01-dac502259ad0.png

1. 资源准备

硬件上依旧如【EsDA应用】蓝牙客户端节点详解使用MPC_ZC1开发板作为服务器去广播数据,软件上使用可拖拽连线的图形化设计工具AWFlow Designer去设计流图以及手机app(BLE调试宝)作为客户端进行蓝牙通信。f83ec0cc-fa92-11ed-ba01-dac502259ad0.png

2. 添加节点并绘制流图

添加timer,gpio,trigger,fscript,ble_server_service和ble_server_adv节点到画布中,如下图所示。

f873d938-fa92-11ed-ba01-dac502259ad0.png3. 配置节点

添加多个蓝牙服务端的服务和特征值数据,并开启蓝牙广播。需注意的是本蓝牙模块在程序运行时不能重复多次开启蓝牙广播,否则会打开蓝牙失败。

双击gpio节点的前驱timer节点,打开属性面板设置定时周期(ms),定时去读取gpio的引脚电平状态。修改完后点击右上角的完成即可保存属性配置。

f88a2f30-fa92-11ed-ba01-dac502259ad0.png

双击gpio节点,配置属性如下图所示,根据需求选择所需的gpio引脚,本章节使用的是P4.5,并设置为浮空输入,用户可根据自身需求设置该gpio引脚号。修改完后点击右上角的完成即可保存属性配置。

f8a03d8e-fa92-11ed-ba01-dac502259ad0.png

双击gpio的后继节点fscript,功能代码内容的主要目的是让后续的trigger节点只能被触发一次,因P4.5的引脚默认是低电平,且trigger节点被触发只能收到msg.trigger_stop属性消息,所以具体代码如下。

if (msg.payload == 1) { msg.trigger_stop = "reset";}

双击trigger节点,本节点主要目的是只一次触发多个后继节点,所以在此选择等待被重置模式(Wait_to_be_reset_mode)在trigger被触发前,不传递任何的消息给后继节点。修改完后点击右上角的完成即可保存属性配置。

f8d1397a-fa92-11ed-ba01-dac502259ad0.png

双击第一栏的fscript节点,本节点作为ble_server_service节点的前驱节点,所以具体内容即ble_server_service的输入组:payload(传入的特征值数据),payloadLength(传入的特征值数据的长度)。修改完后点击右上角的完成即可保存属性配置。

msg.payload = "hello";set(msg.payloadLength, u16("5"));

双击第一栏的ble_server_service节点中的属性:BLE服务端配置节点旁的铅笔图标,属性:BLE服务端配置节点在本流图中只需要配置一遍即可,后续不再阐述。需注意的是支持的服务个数的属性值必须与本流图中所添加的服务个数数量一致,其他属性参数可用demo流图默认值。修改完后点击右上角的完成即可保存属性配置。f8fb0296-fa92-11ed-ba01-dac502259ad0.png

双击第一栏的ble_server_service节点,只需要确定需要添加的服务UUID和特征值UUID,其他参数视具体情况而定,也可使用默认的参数值。修改完后点击右上角的完成即可保存属性配置。

f92a4c36-fa92-11ed-ba01-dac502259ad0.png

双击第二栏的fscript节点,其内容与第一栏的fscript节点大体一致,都是作为ble_server_service节点的前驱节点,所以具体内容即ble_server_service的输入组:payload(传入的特征值数据),payloadLength(传入的特征值数据的长度)。修改完后点击右上角的完成即可保存属性配置。

msg.payload = "server";set(msg.payloadLength, u16("6"));

双击第二栏的ble_server_service节点,其属性与第一栏的ble_server_service节点大体一致,需要添加的服务UUID和特征值UUID不同,其他参数视具体情况而定,也可使用默认的参数值。

服务UUID:

0xf5,0x89,0x9b,0x5f,0x80,0x00,0x00,0x80,0x00,0x10,0x00,0x00,0xfe,0x18,0x00,0x00

特征值UUID:

0xf5,0x89,0x9b,0x5f,0x80,0x00,0x00,0x80,0x00,0x10,0x00,0x00,0xfe,0xff,0x11,0x11

最后双击ble_server_adv节点,自行设置蓝牙本地设备名称,以及需要广播的每个小数据包的数据长度,类型,内容和扫描的每个小数据包的数据长度,类型,内容。修改完后点击右上角的完成即可保存属性配置。

f9512306-fa92-11ed-ba01-dac502259ad0.png

4. 下载验证

下载流图后可在BLE调试宝点击蓝牙服务选项对流图提供的service进行访问,点击每个service的左侧箭头,展开对各个service提供的特征进行查看,还可对支持操作的特性进行读写。

f96a88aa-fa92-11ed-ba01-dac502259ad0.png

每次操作都会有相应的日志信息,注意各服务UUID的联系,实时日志如下所示。

f992ea66-fa92-11ed-ba01-dac502259ad0.png

BLE调试宝向特征值UUID为0x1111fffe写入12 34 56,作为服务端板子的串口打印可显示收到的相应数据如下。

f9dacff2-fa92-11ed-ba01-dac502259ad0.png

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

    关注

    112

    文章

    5428

    浏览量

    165642
  • 节点
    +关注

    关注

    0

    文章

    208

    浏览量

    24078
  • 终端节点
    +关注

    关注

    0

    文章

    5

    浏览量

    1851
收藏 人收藏

    评论

    相关推荐

    EsDA 应用】快速实现串口转HTTP请求

    ,由客户端发送请求消息,服务端针对客户端的请求进行响应回复。本文将基于EsDA开发平台,使用EPC6450-AWI开发板,以及图形化设计工具AWFlowDesign
    的头像 发表于 11-09 08:25 480次阅读
    【<b class='flag-5'>EsDA</b> 应用】快速实现串口转HTTP请求

    常用IO设备节点详解

    本文介绍如何通过EsDA开发套件,快速熟悉常用IO设备节点及其使用方法,大大缩短了用户对EsDA的学习开发周期。本文选用EPC6450-AWI开发板,以及图形化设计工具AWFlowDesigner
    的头像 发表于 09-14 08:27 565次阅读
    常用IO设备<b class='flag-5'>节点</b><b class='flag-5'>详解</b>

    modbus入门教程 Modbus协议节点讲解之【EsDA应用】Modbus应用详解

    Modbus作为一种公开、免费的现场总线,被广泛应用于工业电子领域。本文基于EsDA开发平台,为您详细介绍Modbus主机功能节点的使用方式,以及如何快速实现读取Modbus从机数据
    的头像 发表于 07-18 11:55 2101次阅读
    modbus入门教程 Modbus协议<b class='flag-5'>节点</b>讲解之【<b class='flag-5'>EsDA</b>应用】Modbus应用<b class='flag-5'>详解</b>

    应用业务开发利器 —【EsDA】AWFlow

    EsDAAWFlow基于“数据流动”的理念,化繁为简,将嵌入式应用开发带入到图形化编程的世界。为嵌入式产品开发提供了一个低成本、高效率的新方案。AWFlow是什么?AWFlow是EsDA家族中的一员
    的头像 发表于 06-09 10:27 239次阅读
    应用业务开发利器 —【<b class='flag-5'>EsDA</b>】AWFlow

    EsDA — 嵌入式系统设计自动化工具

    EsDA — 嵌入式系统设计自动化工具
    的头像 发表于 06-09 10:26 359次阅读
    <b class='flag-5'>EsDA</b> — 嵌入式系统设计自动化工具

    致远电子2023年文章月度回顾 | 2023.05期

    平台 EsDA ꔷ  【EsDA应用】蓝牙客户端节点详解 ꔷ  【EsDA应用】
    的头像 发表于 06-08 17:00 247次阅读

    EsDA应用】10分钟快速实现人脸识别

    人脸识别是一种高安全性的生物识别技术,在安防、身份验证等领域被广泛应用。本文主要介绍如何基于EsDA设计的人脸特征值提取节点和特征值比对节点,快速实现人脸识别功能。简介人脸识别是一种高安
    的头像 发表于 06-08 15:01 307次阅读
    【<b class='flag-5'>EsDA</b>应用】10分钟快速实现人脸识别

    应用业务开发利器 —【EsDA】AWFlow

    EsDA 家族 中的一员,解决嵌入式应用业务开发的难题,帮助用户快速设计和开发出产品的应用业务。 属于一种低代码的编程工具,以拖拽节点、绘制数据流图的方式,将硬件设备、软件模块、网络服务等连接在一起,最终完成整个应用业务的
    的头像 发表于 06-04 16:15 265次阅读
    应用业务开发利器 —【<b class='flag-5'>EsDA</b>】AWFlow

    EsDA应用】10分钟快速实现人脸识别

    人脸识别是一种高安全性的生物识别技术,在安防、身份验证等领域被广泛应用。本文主要介绍如何基于EsDA设计的人脸特征值提取节点和特征值比对节点,快速实现人脸识别功能。    简介 人脸识别是一种高安
    的头像 发表于 06-03 01:30 532次阅读
    【<b class='flag-5'>EsDA</b>应用】10分钟快速实现人脸识别

    EsDA应用】蓝牙服务端节点详解

    的相关节点和业务处理,有兴趣的可以跳转链接 【EsDA应用】蓝牙客户端节点详解 去查看。 本文主要基于MPC_ZC1开发板以及可将
    的头像 发表于 05-25 00:10 388次阅读
    【<b class='flag-5'>EsDA</b>应用】<b class='flag-5'>蓝牙</b><b class='flag-5'>服务端节点</b><b class='flag-5'>详解</b>

    EsDA应用】5分钟快速实现图像人脸检测

    人脸识别是一种高安全性的生物识别技术,广泛应用在安防、身份验证等领域。而人脸检测是进行人脸识别的重要前提,本文主要介绍如何基于EsDA设计的人脸检测节点,快速实现人脸检测功能。简介人脸识别是一种高安
    的头像 发表于 05-18 10:48 399次阅读
    【<b class='flag-5'>EsDA</b>应用】5分钟快速实现图像人脸检测

    EsDA应用】5分钟快速实现图像人脸检测

    人脸识别是一种高安全性的生物识别技术,广泛应用在安防、身份验证等领域。而人脸检测是进行人脸识别的重要前提,本文主要介绍如何基于EsDA设计的人脸检测节点,快速实现人脸检测功能。    简介 人脸识别
    的头像 发表于 05-17 12:20 376次阅读
    【<b class='flag-5'>EsDA</b>应用】5分钟快速实现图像人脸检测

    EsDA应用】蓝牙客户端节点详解

    蓝牙作为一种近距离无线通信技术,被广泛使用在汽车,智能家居和医疗等领域中。本文主要介绍如何通过EsDA开发套件,快速实现蓝牙客户端的订阅以及读写等操作。简介蓝牙是一种近距离无线通信技术
    的头像 发表于 05-12 10:18 476次阅读
    【<b class='flag-5'>EsDA</b>应用】<b class='flag-5'>蓝牙</b>客户<b class='flag-5'>端节点</b><b class='flag-5'>详解</b>

    Zigbee终端节点的设计和协调器的区别

      Zigbee终端节点是指Zigbee网络中的最末端节点,通常用于采集数据和执行控制。它具有收集和发送数据的能力,但不能帮助中继数据,必须依靠其他节点进行消息转发。在Zigbee网络中,终
    发表于 05-05 16:38 1789次阅读

    Zigbee终端节点的作用、类型和上报数据步骤

      Zigbee终端节点是指Zigbee网络中的最末端节点,通常用于采集数据和执行控制。它具有收集和发送数据的能力,但不能帮助中继数据,必须依靠其他节点进行消息转发。在Zigbee网络中,终
    发表于 05-05 16:13 2931次阅读