美文网首页
BT8510 编程指南

BT8510 编程指南

作者: 蓝点工坊 | 来源:发表于2018-07-31 17:04 被阅读8次

一.界面层接口

所有与底层(蓝牙文件)处理与协议类封装在 BT8510Device ( bt8510_device.h ),它是一个全局单例对象, 通过BT8510Device::Instance() 访问.

BT8510Device::Instance()->bluetoothManager(); 是蓝牙管理器的封装对象,对蓝牙操作大多使这个对象.

二.使用流程

  1. 初始化 BT8510Device::Instance()->initDevice(QWidget * splash = nullptr);
    在主程序或引导窗口显示函数执行.
    注: 如果splash 不为空,则会试着在蓝牙初始化完成后调用finish()自动关闭splash窗口

  2. 启动设备.
    在联接窗口调用
    BT8510Device::Instance()->startDevice(); 它将完成蓝牙的启动工作

  1. 检测并重联绑定设备
    BT8510Device::Instance()->bluetoothManager()->reconnectDevice();
    返回为false表示没有绑定设备.
    为true表示绑定并开始重联设备

    如果成功联接,将发送
    BT8510Device::Instance()->bluetoothManager()将发送信号 deviceConnected(HBluetoothDevice *)) .

收到这个信号进入下一个界面.

4.绑定设备
BT8510Device::Instance()->bluetoothManager()->startBindDevice(10000);
参数最大绑定时间.

如果无论绑定成功失败后,BT8510Device::Instance()->bluetoothManager()将发送信号deviceBindChanged(HBluetoothDevice*)

失败参数中设备对象为空,成功指向绑定设备,界面可以根据结果进行不同提示

5.联接设备
绑定设备并没有立刻联接,可以直接在deviceBindChanged()的slot前
BT8510Device::Instance()->bluetoothManager()->connectDevice(HBluetoothDevice*) 连接设备.

6.断开设备
在工作界面可以执行 ,会将当前设备断开
BT8510Device::Instance()->bluetoothManager()->disconnectDevice();

成功断开后BT8510Device::Instance()->bluetoothManager()将发送信号 devicedisconnected(HBluetoothDevice *)) .
收到信号后返回上一界面.


image.png

三.蓝牙协议收发

整个通讯协议有9条协议,均由设备主动发起
//查询设备信息
BT8510Device::Instance()->queryDeviceInfo();

收到数据后, 将收到信号通知,BT8510Device,deviceInfoUpdate();
其中各项数据已经解析到BT8510Device各个属性当中,界面直接取就行
如 BT8510Device::Instance()->platform(); //设备属性

其余均

Qt 蓝牙连接流程

scan

开始联接

  1. QLowEnergyController::connectToService(QBluetoothDeviceInfo );

  2. 成功后发来 QLowEnergyController::connected() 消息

  3. 在slot函数调用
    //开始扫描本设备有哪一些服务
    QLowEnergyController::discoverServices();

4.如果成功, 每扫描到一个服务,会触发一次消息
QLowEnergyController::serviceDiscovered(QBluetoothUuid)

5.在相应的slot方法里根据 QBluetoothUuid创建对的服务
QLowEnergyService *service = QLowEnergyController::createServiceObject(uuid);

// 扫描成功后,再调用去扫描该服务下有多少char
如果是 service->state() == QLowEnergyService::DiscoveryRequired
表示还需要继续扫描,则调用 QLowEnergyService::discoverDetails();

否则可以直接(这种情况比较少)
或直接从 QLowEnergyService::characteristics() 读取相应char列表

6.扫描到新的char后,会以事件QLowEnergyService::stateChanged 通知
注意这里有几种状态,其中 只有QLowEnergyService::ServiceDiscovered
表示扫描到所有属性.
此时可以对应的service 是sender

QLowEnergyService *service = qobject_cast<QLowEnergyService *>(sender());

此时扫描到属性在
const QList<QLowEnergyCharacteristic> chars = service->characteristics();

http://doc.qt.io/qt-5/qtbluetooth-overview.html

相关文章

网友评论

      本文标题:BT8510 编程指南

      本文链接:https://www.haomeiwen.com/subject/nsfamftx.html