打印
[STM32WBA]

【STM32WBA52CG测评】Qt BLE初探

[复制链接]
431|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
BinWin|  楼主 | 2023-8-7 23:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
      因为ST的BLE工具无论是移动端还是WEB端都不可修改,即使源码也看不懂,毕竟不擅长的领域。但是Windows作为最常用的开发平台,大部分的测试调试工具都能够实现,所以就初步尝试用Qt的BLE模块来做个小工具。      基于开源版的Qt,默认安装了Mingw编译套件。毕竟也是不少人研究过的东西,借鉴一下也是很快能运行起来的。首先在工程文件中引入BLE
      
     这个时候可以先编译一下默认的空工程,不出错的话说明安装没有问题,版本也可以使用。BLE模块是有的。
     然后计划一下布局,设计师界面拖拖控件。
     
     之后加入功能代码。分为代理部分,控制部分,服务处理部分。以下摘抄部分。

void Agent::startScanDevice(uint32_t timeOut)
{
    if(m_agent)
    {
        m_agent->setLowEnergyDiscoveryTimeout(timeOut);

        m_agent->start();

        if(m_agent->isActive())
        {
            SendMessage("scanning...");
        }
    }
}
QLowEnergyService * Controller::CreateService(QBluetoothUuid serviceUUID)
{
    if(m_controller)
    {
        return m_controller->createServiceObject(serviceUUID);
    }
    else
    {
        return NULL;
    }
}
void Service::OpenNotify(QLowEnergyCharacteristic ch, bool flag)
{
    if(m_service)
    {
        if(ch.isValid())
        {
            if(ch.properties() & QLowEnergyCharacteristic::Notify)
            {
                QLowEnergyDescriptor d = ch.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration);
                if(d.isValid())
                {
                    if(true == flag)
                    {
                        m_service->writeDescriptor(d, QByteArray::fromHex("0100"));
                    }
                    else
                    {
                        m_service->writeDescriptor(d, QByteArray::fromHex("0000"));
                    }
                }
            }
        }
    }
}

void Service::ReadCharacteristic(QLowEnergyCharacteristic ch)
{
    if(m_service)
    {
        if(ch.isValid())
        {
            if(ch.properties() & QLowEnergyCharacteristic::Read)
            {
                m_service->readCharacteristic(ch);
            }
        }
    }
}

void Service::WriteCharacteristic(QLowEnergyCharacteristic ch, QByteArray arr)
{
    if(m_service)
    {
        if(ch.isValid())
        {
            if(ch.properties() & QLowEnergyCharacteristic::Write)
            {
                m_service->writeCharacteristic(ch, arr, QLowEnergyService::WriteWithResponse);
            }
            else if(ch.properties() & QLowEnergyCharacteristic::WriteNoResponse)
            {
                m_service->writeCharacteristic(ch, arr, QLowEnergyService::WriteWithoutResponse);
            }
            else if(ch.properties() & QLowEnergyCharacteristic::WriteSigned)
            {
                m_service->writeCharacteristic(ch, arr, QLowEnergyService::WriteSigned);
            }
        }

    }
}
    主要部分完成后逐步改错,然后运行搜索看看有没有结果     
     居然把蓝牙耳机也搜到了,看来Qt实现还是比较简单的,Nucleo-STM32WBA52板子运行程序,再试试搜索,,
     居然没搜到板子的蓝牙id,换了个工程还是没有,看来浮于表面是没法解决问题的。后续搞清楚这一点。还有个值得注意的地方,就是编译器的选择,有网友提到过对于BLE这个功能,mingw可能会比VC编译器遇到的问题多。后续要研究清楚。
     



使用特权

评论回复
沙发
yangxiaor520| | 2023-8-8 08:34 | 只看该作者
QT跨平台,兼容性更好。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

58

帖子

0

粉丝