Пишу прошивку для периферийного устройства в QT.Устройство подключено к телефону или ноутбуку, и связь устанавливается через Bluetooth LowEnergy.У меня уже есть код, который отправляет данные с периферийного устройства (скажем, на часы) на ПК или телефон.Теперь я хочу отправить данные с телефона на часы.Я хочу отправить некоторые базовые данные, такие как дата, время и т. Д., Чтобы я мог настроить часы.
Here is the code for advertising/sending data from the watch to the phone
QCoreApplication app(argc, argv);
//! [Advertising Data]
QLowEnergyAdvertisingData advertisingData;
advertisingData.setDiscoverability(QLowEnergyAdvertisingData::DiscoverabilityGeneral);
advertisingData.setIncludePowerLevel(true);
advertisingData.setLocalName("HeartRateServer");
advertisingData.setServices(QList<QBluetoothUuid>() << QBluetoothUuid::HeartRate);
//! [Advertising Data]
//! [Service Data]
QLowEnergyCharacteristicData charData;
charData.setUuid(QBluetoothUuid::HeartRateMeasurement);
charData.setValue(QByteArray(2, 0));
charData.setProperties(QLowEnergyCharacteristic::Read);
const QLowEnergyDescriptorData clientConfig(QBluetoothUuid::ClientCharacteristicConfiguration,
QByteArray(2, 0));
charData.addDescriptor(clientConfig);
QLowEnergyServiceData serviceData;
serviceData.setType(QLowEnergyServiceData::ServiceTypePrimary);
serviceData.setUuid(QBluetoothUuid::HeartRate);
serviceData.addCharacteristic(charData);
//! [Service Data]
//! [Start Advertising]
const QScopedPointer<QLowEnergyController> leController(QLowEnergyController::createPeripheral());
const QScopedPointer<QLowEnergyService> service(leController->addService(serviceData));
leController->startAdvertising(QLowEnergyAdvertisingParameters(), advertisingData,
advertisingData);
//! [Start Advertising]
qDebug()<<"Sending data...";
//! [Provide Heartbeat]
QTimer heartbeatTimer;
quint8 currentHeartRate = 60;
enum ValueChange { ValueUp, ValueDown } valueChange = ValueUp;
const auto heartbeatProvider = [&service, ¤tHeartRate, &valueChange]() {
QByteArray value;
value.append(char(0)); // Flags that specify the format of the value.
value.append(char(currentHeartRate)); // Actual value.
QLowEnergyCharacteristic characteristic = service->characteristic(QBluetoothUuid::HeartRateMeasurement);
value="hello world! it works !!!!!!!";
service->writeCharacteristic(characteristic, value); // Potentially causes notification.
qDebug()<<"Data sent: "<<value;
};
QObject::connect(&heartbeatTimer, &QTimer::timeout, heartbeatProvider);
heartbeatTimer.start(100);
//! [Provide Heartbeat]
auto reconnect = [&leController, advertisingData]() {
leController->startAdvertising(QLowEnergyAdvertisingParameters(), advertisingData, advertisingData);
};
QObject::connect(leController.data(), &QLowEnergyController::disconnected, reconnect);
Я изменил эту строку, чтобы я мог читать данные.Да, характеристика должна быть НАПИСАТЬ.Это означает, что другое устройство записывает данные.
charData.setProperties(QLowEnergyCharacteristic::Write);
Я также поставил следующие строки:
service->readCharacteristic(dev.m_readCharacteristic);
qDebug()<<"Data read: "<<dev.m_readCharacteristic.value();
Так что есть приложение для Android, которое позволяет мне отправлять данные на устройство,Но единственные данные, которые я получаю, это: Данные читаются: "\ x00 \ x00" Это пустая строка.Данные отправлены, но я не знаю, как их прочитать.Кто-нибудь может помочь?
Спасибо!