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

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

    关注

    114

    文章

    5767

    浏览量

    169819
  • 节点
    +关注

    关注

    0

    文章

    217

    浏览量

    24386
  • 终端节点
    +关注

    关注

    0

    文章

    6

    浏览量

    1866
收藏 人收藏

    评论

    相关推荐

    EsDA,一站式嵌入式软件

    EsDA是一套面向工业智能物联领域的嵌入式系统设计自动化工具集,包含实时操作系统AWorksLP、低代码开发平台AWStudio、资源管理平台AXPI、跨平台GUI引擎AWTK和云服务平台ZWS
    的头像 发表于 09-15 08:10 229次阅读
    <b class='flag-5'>EsDA</b>,一站式嵌入式软件

    mesh-lite组网后,根节点掉线怎么解决?

    now! 2. 也有部分设备,IP正常但是TCP通讯不了。即使TCP服务端关闭,ESP32仍能TCP发送成功。
    发表于 06-28 10:30

    请问ESP32作为蓝牙服务端如何修改MTU?

    我们的工程把esp32当作蓝牙服务端让电脑去连,由于一些老电脑上没有蓝牙,要用外置蓝牙驱动,默认MTU只有23,但是说明上驱动是支持最大mtu的,所以有什么办法可以通过
    发表于 06-27 07:47

    请问esp_local_ctrl中服务端如何主动发消息?

    请问,在wifi本地控制例程esp_local_ctrl中,设备作为服务端在客户端没有请求的情况下,如何主动发送消息给客户端呢?
    发表于 06-06 06:11

    服务端测试包括什么类型

    服务端测试是确保软件系统在服务器端正常运行和满足性能要求的重要环节。本文将详细介绍服务端测试的类型、方法和最佳实践。 1. 服务端测试的定义 服务端
    的头像 发表于 05-30 16:03 639次阅读

    服务端测试是web测试吗为什么

    服务端测试和Web测试是两个不同的概念,但它们在软件开发和测试过程中是相互关联的。本文将详细解释这两个概念以及它们之间的关系。 服务端测试 服务端测试主要关注服务器端的软件组件,这些组
    的头像 发表于 05-30 15:30 559次阅读

    服务端测试和客户端测试区别在哪

    服务端测试和客户端测试是软件开发过程中的两个重要环节,它们分别针对服务器端和客户端的软件进行测试。本文将详细介绍服务端测试和客户端测试的区别,以及它们在软件开发中的作用。 一、服务端
    的头像 发表于 05-30 15:27 2710次阅读

    服务端的测试主要是测什么内容

    服务端测试是软件开发过程中的一个重要环节,主要目的是确保服务端程序的稳定性、性能、安全性和可靠性。 功能测试 功能测试是服务端测试的基础,主要验证服务端程序是否按照需求实现了所有功能。
    的头像 发表于 05-30 15:24 3665次阅读

    TWS 蓝牙耳机 ESD EOS保护方案

    TWS 蓝牙耳机 ESD EOS保护方案
    的头像 发表于 05-17 08:02 643次阅读
    TWS <b class='flag-5'>蓝牙</b>耳机 <b class='flag-5'>ESD</b> EOS保护方案

    ESD管 AZ5825-01F型号ESDA05CPX参数对比

    ESD管 AZ5825-01F型号ESDA05CPX参数对比
    的头像 发表于 05-11 08:03 806次阅读
    <b class='flag-5'>ESD</b>管 AZ5825-01F型号<b class='flag-5'>ESDA</b>05CPX参数对比

    lwip stm407作为服务端 pc连接不上怎么解决?

    lwip stm407作为服务端 pc连接不上
    发表于 03-20 06:32

    静电ESD整改:原因、影响与解决方案详解

    静电ESD整改:原因、影响与解决方案详解?|深圳比创达电子
    的头像 发表于 03-13 10:26 835次阅读
    静电<b class='flag-5'>ESD</b>整改:原因、影响与解决方案<b class='flag-5'>详解</b>?

    PLC从HTTP服务端获取JSON文件,解析数据到寄存器

    智能网关IGT-DSER集成了多种PLC协议,方便实现各种PLC与HTTP服务端之间通讯。通过网关的参数配置软件绑定JSON文件的字段与PLC寄存器地址,配置URL,即可采用POST命令,将JSON
    发表于 01-24 09:47

    如何基于EsDA开发套件快速使用射频读卡器模块

    无线射频读写卡技术在门禁系统,电子支付领域和物联网等领域中具有越来越广泛的应用。本文将基于EsDA开发套件讲解如何快速上手并开发射频读卡器模块的相关业务,为开发者大大缩短了学习和开发时间成本。项目
    的头像 发表于 01-11 08:24 676次阅读
    如何基于<b class='flag-5'>EsDA</b>开发套件快速使用射频读卡器模块

    PLC通过智能网关,与OPCUA服务端通讯,实现标签数据读写

    是采用西门子S7-200 SMART通过IGT-DSER智能网关跟OPCUA的服务端之间通讯,以下是相关操作步骤。首先通过参数设置软(在附件中)选择功能与驱动类型,如下图左边功能选第三项,右边的驱动选择
    发表于 01-02 16:41