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

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

3天内不再提示

如何通过EsDA开发套件实现蓝牙客户端的订阅以及读写等操作?

AGk5_ZLG_zhiyua 来源:ZLG致远电子 2023-05-10 16:58 次阅读

蓝牙作为一种近距离无线通信技术,被广泛使用在汽车,智能家居和医疗等领域中。本文主要介绍如何通过EsDA开发套件,快速实现蓝牙客户端的订阅以及读写等操作。

18a4c3ae-ef10-11ed-90ce-dac502259ad0.jpg  简介

蓝牙是一种近距离无线通信技术,可以免费运行在2.4G频段,所以通常广泛使用在物联网,移动终端和智能家居等行业中。我们EsDA大家族里面自然也有对蓝牙功能的实现,且只需要很短的时间就可实现蓝牙通信,功能好用简单又便捷。

本文主要基于MPC-ZC1的开发板,以及可将节点进行拖拽连接的图形化设计工具AWFlow Designer,着重对UIS8910DM平台的板载蓝牙的配套节点以及示例进行讲解。蓝牙节点一共分为配置节点类型ble_server,ble_client2个,客户端节点类型ble_client_in,ble_client_out,ble_client_subscribe3个以及服务端节点类型ble_server_adv,ble_server_service2个;因本文篇幅的原因所以主要围绕着客户端节点的使用,以下进行详细介绍。

18a4c3ae-ef10-11ed-90ce-dac502259ad0.jpg  节点简介

1. 配置节点

1.1 ble_client节点

1.1.1 属性

18c9f11a-ef10-11ed-90ce-dac502259ad0.png

扫描类型:启动扫描时需要的扫描类型配置:

值为0表示被动扫描(仅仅接收广播,不会发送扫描请求);

值为1时表示主动扫描(发送扫描请求数据给广播的服务端,服务端收到后会返回扫描响应数据)。

扫描窗口的时间:扫描窗口时间的配置;

扫描间隔的时间:扫描间隔时间的配置;

注意:扫描窗口时间必须小于扫描间隔时间。

扫描过滤策略:扫描过滤策略的配置:

1表示只处理地址在白名单中的数据包,以及发给自己的可连接定向广播;

2表示处理所有非定向广播和可解析私有地址以及发给自己的可连接定向广播;

3表示处理地址在白名单中和可解析私有地址以及发给自己的可连接定向广播。

目标服务端设备名称:目标服务端设备本地名称;

SMP配对模式与参数:

SMP配对模式 参数 安全等级排名
SECURE_CONNECTION_PASSKEY KEYBOARD_DISP 最高
SECURE_CONNECTION_JUSTWORK NOIN_NOOUT 次之
LEGACY_PASSKEY KEYBOARD_DISP 第三
LEGACY_JUSTWORK NOIN_NOOUT 最低

扫描超时时间:表示持续扫描,直到与指定服务端建立连接。如果值不为0,则开启扫描后使能扫描定时器,超时后如果仍未与指定服务端建立连接,则扫描停止。单位ms

配置节点无输入输出

2. 客户端节点

2.1 ble_client_in节点

2.1.1 属性

18dd31a8-ef10-11ed-90ce-dac502259ad0.png

BLE客户端配置:绑定一个ble_client蓝牙客户端的配置节点;

服务UUID:需要读的服务UUID。若服务UUID为自定义的16字节如0000 ff 11 0000 1000 800000 80 5f 9b 34 fb,则传入第3、4两个字节0xff11;

特征值UUID:需要读的特征值UUID。若特征值UUID为自定义的16字节如0000 ff 01 0000 1000 800000 80 5f 9b 34 fb,则传入第3、4两个字节0xff01。

2.1.2 输入

payload:可以使用“timer”节点作为前级节点,定时读取数据。

2.1.3 输出

characteristic_uuid:将读取到的指定特征值的UUID输出;

payload:将读取到的指定特征值的数组指针输出。类型为uint8_t类型的指针;

payloadLength:将读取到的指定特征值的数据长度输出;

desc_num:将读取到的指定特征值的描述符个数输出。如果存在多个描述符,则存在多个名称为“desc_uuid_%d”、“desc_value_%d”和“desc_value_length_%d”的属性,其中%d指代当前是第几个描述符;

举例:该特征存在2个描述符,则存在以下名称的属性:desc_uuid_0,desc_value_0,desc_value_length_0和desc_uuid_1,desc_value_1,desc_value_length_1,desc_uuid_0;

desc_uuid_0:第一个描述符的UUID,若为第二个描述符的UUID也可表示为desc_uuid_1。以此类推;

desc_value_0:第一个描述符的值指针,若为第二个描述符的值也可表示为desc_value_1。以此类推;

desc_value_length_0:第一个描述符的值的数据长度,若为第二个描述符的值的数据长度也可表示为desc_value_length_1。以此类推。

2.2 ble_client_out节点

2.2.1 属性

18f7d1a2-ef10-11ed-90ce-dac502259ad0.png

BLE客户端配置:绑定一个ble_client蓝牙客户端的配置节点;

服务UUID:需要读的服务UUID。若服务UUID为自定义的16字节如0000 ff 11 0000 1000 800000 80 5f 9b 34 fb,则传入第3、4两个字节0xff11;

特征值UUID:需要读的特征值UUID。若特征值UUID为自定义的16字节如0000 ff 01 0000 1000 800000 80 5f 9b 34 fb,则传入第3、4两个字节0xff01。

2.2.2 输入

payload:需要写入的数据,字符串类型。可以使用fscript节点对payload进行设置

payloadLength:需要写入的数据长度。

sink类型节点没有输出功能

2.3 ble_client_subscribe节点

2.3.1 属性

1908699a-ef10-11ed-90ce-dac502259ad0.png

BLE客户端配置:绑定一个ble_client蓝牙客户端的配置节点;

服务UUID:需要读的服务UUID。若服务UUID为自定义的16字节如0000 ff 11 0000 1000 800000 80 5f 9b 34 fb,则传入第3、4两个字节0xff11;

特征值UUID:需要读的特征值UUID。若特征值UUID为自定义的16字节如0000 ff 01 0000 1000 800000 80 5f 9b 34 fb,则传入第3、4两个字节0xff01;

订阅模式:值为0表示禁能通知和指示,值为1表示使能通知,值为2表示使能指示。

pump类型节点无输入数据

2.3.2 输出

payload:订阅的特征值的数据内容;

payloadLength:订阅的特征值的数据长度;

characteristic_uuid:订阅的特征值的UUID。

18a4c3ae-ef10-11ed-90ce-dac502259ad0.jpg  示例讲解

1. 硬件准备

准备一块MPC-ZC1开发板,并按照下图所示连接好硬件。用于下载流图的USB Type-C口另外一端接到PC机上。

2. 软件准备

目前MPC-ZC1开发板作为客户端,对BLE调试宝(手机app)服务端(外围模式)提供的服务进行订阅、读写等操作,依下图所示可根据用户需求随意设置服务UUID、特征值UUID、特征数据以及通知数据,最后点击开启广播,服务端BLE调试宝的配置就设置完成了。

194ebdaa-ef10-11ed-90ce-dac502259ad0.png

随之修改手机本地蓝牙(服务端设备)名称,后期此名称用来配置ble_client节点的属性参数目标服务端设备名称。

1967bd3c-ef10-11ed-90ce-dac502259ad0.png

3. EsDA业务开发

本示例主要是将MPC-ZC1开发板作为蓝牙客户端,对BLE调试宝(蓝牙服务端)指定服务下指定的特征值数据进行读写以及订阅的操作,具体实现如下图。本例程只对服务端提供的一个服务的特征值进行了订阅和读写操作,根据实际需求,可支持对多个指定服务下的指定特征值进行读写和订阅的操作。

1981c2ae-ef10-11ed-90ce-dac502259ad0.png

3.1 添加节点并绘制流图

添加timer,ble_client_in,ble_client_out,ble_client_subscribe,fscript节点如下图所示。

199cc36a-ef10-11ed-90ce-dac502259ad0.png

3.2 配置节点

周期性的去读取蓝牙服务端指定服务下指定的特征值的特征数据。

双击ble_client_in节点的前驱timer节点,打开属性面板设置定时周期(ms),MPC-ZC1开发板周期性的去读取BLE调试宝指定服务下指定的特征值数据。修改完后点击右上角的完成即可保存属性配置。

19b23c04-ef10-11ed-90ce-dac502259ad0.png

双击ble_client_in节点中的BLE客户端配置,本属性配置在一份流图上只需要配置一次即可,后面ble_client_out以及ble_client_subscribe节点的属性BLE客户端配置都会链接到同一个ble_server,不需再次重复配置所以后面不再赘述。这里可以只修改属性值:目标服务端设备名称,需注意的是此处的参数与服务端提供的信息需一致。修改完后点击右上角的更新即可保存属性配置。

19c1a9f0-ef10-11ed-90ce-dac502259ad0.png

双击ble_client_in节点,修改需要读取指定的服务UUID和特征值UUID。修改完后点击右上角的完成即可保存属性配置。

19d8420a-ef10-11ed-90ce-dac502259ad0.png

双击ble_client_in节点的后继fscript节点,主要内容是对读取的特征值UUID进行输出以及将服务端指定的服务UUID及特征值UUID下的特征内容进行输出。

print("payloadLength is"+msg.payloadLength)
print("characteristic_uuid is" + msg.characteristic_uuid);


rb = rbuffer_create(msg.payload, msg.payloadLength)
print("length: "+ msg.payloadLength)


f = "recv ble server data is"
for(var i=0; i

周期性的去写入蓝牙服务端指定服务下指定的特征值的特征数据。

双击ble_client_out节点的前驱*2的timer节点,打开属性面板设置定时周期(ms),MPC-ZC1开发板周期性的去写入BLE调试宝指定服务下指定的特征值数据。修改完后点击右上角的完成即可保存属性配置。

19ef25a6-ef10-11ed-90ce-dac502259ad0.png

因ble_client_out节点作为sink类型节点,所以fscript节点即为他的前驱节点。双击fscript,主要功能实现是设置ble_client_out节点的输入数据:payload(要写入的数据),payloadLength(需要写入的数据长度)。

msg.payload = "123456789"
set(msg.payloadLength, u8("9"))
双击ble_client_out节点,配置需要写入数据的服务UUID和特征值UUID。修改完后点击右上角的完成即可保存属性配置。

1a046a4c-ef10-11ed-90ce-dac502259ad0.png

对蓝牙服务端指定服务下指定的特征值的订阅数据进行订阅操作。

双击ble_client_subscribe节点,配置需要订阅的服务UUID,特征值UUID以及订阅模式。修改完后点击右上角的完成即可保存属性配置。

1a17fc92-ef10-11ed-90ce-dac502259ad0.png

双击ble_client_subscribe的后继节点fscript,主要功能是将接收到的订阅数据进行输出打印。

rb = rbuffer_create(msg.payload, msg.payloadLength)
print("length: "+ msg.payloadLength)


f = "recv subscribe data is"
for(var i=0; i
3.3 下载验证

MPC-ZC1开发板调试口打印信息如下:

1a2ad1f0-ef10-11ed-90ce-dac502259ad0.png

BLE调试宝操作日志显示如下:

1a3a934c-ef10-11ed-90ce-dac502259ad0.png

由操作日志可以看到,MPC-ZC1和手机蓝牙建立连接成功、MPC-ZC1读取特征值,开启通知、接收MPC-ZC1写入新的特征值数据、接收通知。至此示例实验已完成。





审核编辑:刘清

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

    关注

    0

    文章

    68

    浏览量

    19450
  • 无线通信技术

    关注

    4

    文章

    117

    浏览量

    25563
  • ESDA
    +关注

    关注

    0

    文章

    27

    浏览量

    7445
  • BLE技术
    +关注

    关注

    0

    文章

    24

    浏览量

    5795

原文标题:【EsDA应用】蓝牙客户端节点详解

文章出处:【微信号:ZLG_zhiyuan,微信公众号:ZLG致远电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何使用Socket实现UDP客户端

    本教程介绍了如何利用socket 编程来实现一个 UDP 客户端,与服务器进行通信。与开发 TCP 客户端一样,我们先将 socket 编程的流程列出来,然后给出具体的实例。
    发表于 03-30 07:39

    android客户端通过蓝牙协议控制继电器

    一直没怎么写博客,贴一个比较简单小例子(以前做的 android 通过wifi实现万能遥控器 中拆分出来的小案例):android客户端通过蓝牙
    发表于 12-02 06:03

    【平头哥蓝牙Mesh网关开发套件免费试用】+nRF Mesh与灯实验

    【平头哥蓝牙Mesh网关开发套件免费试用】+nRF Mesh与灯 实验设备和节点(Devices and Nodes)一个设备成为了蓝牙mesh网络的一部分,我们就把它叫做节点(node)。 反之它
    发表于 03-09 07:38

    基于Eclipse paho-mqtt源码包的MQTT客户端设计(下)

    的配置项,对客户端进行必要的配置,在这一步需要进行如下操作:设置服务器地址,以及服务器账号密码信息,示例代码如下:/* 配置连接参数 */memcpy(&client.con
    发表于 08-04 16:33

    如何用蓝牙物联网开发套件开发节点到云的应用

    通过提供硬件到云功能和多种感知和执行器选项,易于使用的蓝牙物联网开发套件(B-IDK)是开发和快速原型蓝牙低功耗IoT应用的理想选择。
    的头像 发表于 01-22 16:57 3305次阅读

    在不同阶段如何选择正确的蓝牙开发套件

    选择蓝牙开发套件就像一个10岁的孩子在糖果店里,有无数的选择,从表面上看都很好,但很难做出正确的选择,因为每个项目对套件的要求都是非常不同的。本文解释了在工程师开发过程中的不同阶段应该
    的头像 发表于 05-10 15:10 1697次阅读

    EsDA应用】5分钟快速实现摄像头图像采集

    摄像头在安防监控和图像识别等领域被广泛应用。本文介绍如何通过EsDA开发套件,快速实现摄像头图像采集。    简介 近些年,随着生物识别技术的日益成熟,
    的头像 发表于 04-12 11:50 504次阅读

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

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

    EsDA应用】5分钟快速实现摄像头图像采集

    摄像头在安防监控和图像识别等领域被广泛应用。本文介绍如何通过EsDA开发套件,快速实现摄像头图像采集。简介近些年,随着生物识别技术的日益成熟,以及
    的头像 发表于 04-19 10:00 544次阅读
    【<b class='flag-5'>EsDA</b>应用】5分钟快速<b class='flag-5'>实现</b>摄像头图像采集

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

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

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

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

    基于EsDA MPC-ZC1 快速实现I2C 监控报警

    本文介绍如何通过EsDA开发套件,快速完成一个I2C采集数据的监控报警系统,通过该系统可以减少I2C设备的故障损失和维修成本。简介本文基于前文的一篇I2C博客文章继续拓展I2C实时采集
    的头像 发表于 08-23 15:16 408次阅读
    基于<b class='flag-5'>EsDA</b> MPC-ZC1 快速<b class='flag-5'>实现</b>I2C 监控报警

    虹科WiFi蓝牙无线开发套件和模块

    虹科WiFi蓝牙开发套件和模块可以更换MCU,能够满足不同的嵌入式开发需求,支持一系列无线模块,用于WIFI、蓝牙蓝牙LE应用
    发表于 12-21 15:30 5次下载

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

    本文将基于EsDA开发套件快速实现将串口数据转换为HTTP请求的应用开发实现串口设备与网络服务的互联互通,提供便捷和高效的串口数据转换功能
    的头像 发表于 11-09 08:25 486次阅读
    【<b class='flag-5'>EsDA</b> 应用】快速<b class='flag-5'>实现</b>串口转HTTP请求

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

    简介无线射频读写卡技术是一种基于无线通信的身份识别技术,由读写器和卡片组成,读写器可以通过无线射频信号,实现与卡片之间的数据传输与
    的头像 发表于 01-11 08:24 399次阅读
    如何基于<b class='flag-5'>EsDA</b><b class='flag-5'>开发套件</b>快速使用射频读卡器模块