这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【STM32WBA55CG开发板】QT蓝牙数据通信应用与交互——1、通信架构搭建

共5条 1/1 1 跳转至

【STM32WBA55CG开发板】QT蓝牙数据通信应用与交互——1、通信架构搭建

菜鸟
2024-12-16 12:56:40     打赏

板子收到了,很开心,浅浅的使用了一下。该说不说,ST的工程师设计这个板子堆料挺足,设计的很精美,SDK开发的也不错。这个板子最亮眼的部分就是有个小屏幕,之后我会把它用上。

image.png

image.png

0、概述

那么我们要基于这个板子设计自己的APP,离不开三样东西:应用程序、SDK、驱动。

应用程序包括业务逻辑等等;

SDK这里ST已经提供了一套完备的解决方案,需要适应着使用。

驱动就是硬件的一些驱动,ST也帮我们设计的差不多了。

因此我们做的工作基本上就是配置工程,和应用程序适配,方案的具体实现等等。

综上,我想做一个自研的QT+STM32 蓝牙通信系统,系统框图如图所示:

image.png

具体就是:QT上位机生成数据,STM32计算,LCD显示结果。

当然首要任务是,先把蓝牙这部分打通再说,因此我简要的总结了一下这个STM32 WB蓝牙基本使用的过程如下:

1、搭建开发环境:

需要STM32_WPAN这个第三方组件,要么直接在sdk里复制粘贴一份application代码,要么自己在cubeMX里下载一个这个组件,然后生成代码

image.png

我是用的是p2p_server的这个模板,因为这个模板使用了最简单的蓝牙交互,易于上手,可以直接复制一份,然后再修改

路径是:

STM32WBA55G\STM32Cube_FW_WBA_V1.5.0\Projects\NUCLEO-WBA55CG\Applications\BLE\BLE_p2pServer

 

2、配置环境

因为我是用的是最基本的GATT 通信,不使用ST 自带的APP(当然他的app确实好用这个我已经使用过了,但是要保持产品的自主可控还是要脱离APP的),因此某些地方都是需要修改的。

需要三个Char 一个发送,一个接收,一个预留

image.png

3、Characteristics配置

Char 具体配置如下,注意,那个UUID allocation type 一定要是 SIG的,不然扫描不到。其它的配置如图所示。

image.png

这里我就不得不吐槽一下ST的这个sdk了,这些名字只能这么选吗,不能用户自定义吗,这也太不灵活了。(这里纠正一下,SIG是是由 Bluetooth Special Interest Group(SIG) 分配的标准化UUID。SIG负责定义蓝牙技术规范,确保设备间的兼容性。因此,SIG UUID是公开的、标准化的,并且用于通用蓝牙功能的实现。当UUID的分配类型为 SIG 时,UUID必须是由 Bluetooth Special Interest Group(SIG) 标准化和规定的。SIG定义了一些标准服务和特征的UUID,这些UUID是用于确保蓝牙设备间的兼容性和互操作性。SIG UUID是公共的,并且已经在蓝牙技术规范中被明确指定。真是涨姿势了啊!

image.png

4、修改代码:

因为我的Service名字是P2P_Server,所以生成了一个p2p_server.c .h 和p2p_server_app.c .h

image.png

然后打开p2p_server.c,需要添加代码:

在P2P_SERVER_EventHandler函数里,这些warning 的地方都是需要添加代码的,为后续的读写数据做准备

aci_gatt_allow_read(p_write_perm_req->Connection_Handle);
 
#warning user shall call aci_gatt_allow_read() function if allowed
 
 
aci_gatt_write_resp(p_write_perm_req->Connection_Handle,
                                p_write_perm_req->Attribute_Handle,
                                0x00,0x00,
                                p_write_perm_req->Data_Length,
                                p_write_perm_req->Data);
 
#warning user shall call aci_gatt_write_resp() function if allowed

其中aci_gatt_write_resp是上位机给单片机发数据的,相反是上位机读单片机数据的

之后再在p2p_server_app.c里修改P2P_SERVER_Notification这个函数,这个函数其实就是个switch case语句,由于现在我们仅仅是测试,因此我现在写的就是不同的状态都打印一下信息吧。具体代码如图所示:

image.png

5、通信测试

代码部分基本到此为止,之后我们就可以用Bluetooth LE Explorer进行调试了,这个软件是微软应用商店的,免费。

image.png

扫描连接之后,大概是这个样子,最下面的UserData就是进行交互的数据了,这里我只用了两个Characteristic

image.png

点开UserData里面的某一个char 可以读写数据,如图:

image.png

写个字符串123试试:

image.png

再读一下

image.png

读取成功。至此,基本的通信已经打通了,至于后续的具体应用,诸如点灯,控制遥控车,传输传感器数据就轻而易举了。



工程师
2024-12-16 14:16:58     打赏
2楼

666666


助工
2024-12-16 21:53:55     打赏
3楼

SIG,Bluetooth Special Interest Group(蓝牙技术联盟),选择SIG,那么下面的特征就是都是官方认证过的,不是UNKNOWN。


专家
2024-12-17 08:51:11     打赏
4楼

感谢科普


工程师
2024-12-17 09:41:34     打赏
5楼

感谢分享         


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]