这是设置:
一位同事创建了一个小型固件,该固件大约每秒一次更改定制服务(非标准唯一的128位UUID)中的定制特征的值。用于传输的设备使用 BLE(蓝牙低功耗)实现。
我需要实现一个小应用程序(仅作为工作示例)来监控所述值。但是我遇到了一个小问题。我已按照此处的说明进行操作:http : //doc.qt.io/qt-5/qtbluetooth-le-overview.html 并且我设法发现了该服务并“阅读它”(我得到了 UUID)使用此代码:
void BLETest::on_stateChanged(QLowEnergyService::ServiceState state){
#ifdef DBUG
logger->out("Service Monitor State: " + lowEnergyServiceStateToString(state),Logger::LC_ORANGE);
#endif
if (state == QLowEnergyService::ServiceDiscovered){
QString chars = "";
QList<QLowEnergyCharacteristic> clist = monitoredService->characteristics();
for (int i = 0; i < clist.size(); i++){
chars = clist.at(i).uuid().toString() + " - " + clist.at(i).name() + ": " + QString(clist.at(i).value());
chars = chars + ". Value size: " + QString::number(clist.at(i).value().size()) + "<br>";
}
if (chars.isEmpty()){
chars = "No characteristics found";
}
logger->out(chars);
}
}
现在这将打印服务的 UUID,但值字节数组的大小为零。使用另一个(私人应用程序),我们实际上可以看到该服务中特征的值字段发生变化。此外,即使与服务的对象特性更改信号建立了连接,也永远不会触发该信号,我想这是因为无法读取特性值。
我的问题是:你想不到的代码有什么问题吗?或者只是无法使用 Qt 蓝牙的当前 BLE 实现来监控自定义服务和特性?
PD:我使用的是 Qt 5.7.1
您必须通过将 0x01 写入客户端特征配置描述符 (CCCD) 来启用特征通知。
foreach(QLowEnergyCharacteristic c, srv->characteristics()){
QLowEnergyDescriptor d = c.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration);
if(!c.isValid()){
continue;
}
if(c.properties() & QLowEnergyCharacteristic::Notify){ // enable notification
srv->writeDescriptor(d, QByteArray::fromHex("0100"));
}
if(c.properties() & QLowEnergyCharacteristic::Indicate){ // enable indication
srv->writeDescriptor(d, QByteArray::fromHex("0200"));
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句