Как читать входящие данные на Bluetooth-устройстве с низким энергопотреблением? - PullRequest
0 голосов
/ 29 апреля 2019

Пишу прошивку для периферийного устройства в 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, &currentHeartRate, &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" Это пустая строка.Данные отправлены, но я не знаю, как их прочитать.Кто-нибудь может помочь?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...