C ++ Tinyb ble温度读取器应用程序提供恒定的读数,不能反映实际的温度变化

时间:2019-05-15 08:48:46

标签: raspberry-pi bluetooth-lowenergy iot sensor bluez

我正在尝试从BLE温度传感器(bluemaestro节奏光盘)读取温度值

我正在使用需要bluez的intel的tinyb库在c ++中进行开发。

相关代码段:

using Iter = std::vector<std::unique_ptr<tinyb::BluetoothDevice>>::const_iterator;
while (true)
{
    for (Iter it = sensor_tag_array.begin(); it != sensor_tag_array.end(); ++it)
    {
        std::string address_ = (*it)->get_address();

        std::map<uint16_t, std::vector<uint8_t>> mfg__ = (*it)->get_manufacturer_data();
        for (auto it : mfg__)
        {
            if (it.second.empty())
                logger_->error("{}, {} :Empty mfg for : {}", __FILENAME__, __func__, bleMap[address_].sensor_name);
            else
            {
                if (it.second.front() == 23)
                {
                    battery_lvl = it.second[1];
                    first_byte = it.second[6];
                    second_byte = it.second[7];
                    temperature = convert_to_actual(first_byte, second_byte) / 10.0;
                    std::cout << "\nTemperature is for : " << bleMap[address_].sensor_name << " : " << temperature << "\n";
                }
            }
        }
}

到目前为止,这一直在正确提供正确的相对时间值。但是突然之间,每次应用程序启动时,它开始打印单个常量读数 重新启动。在应用程序启动时,无论首次读取的温度值是什么,都会在整个应用程序运行时重复进行。我使用了节奏实用程序应用程序来验证 传感器实际上正在报告正确的实时值。

我尝试重新安装操作系统(Ubuntu 18.04.1),尝试了多个版本的bluez(预安装了5.48、5.39和5.37),但是问题仍然存在。

我还更改了bluemaestro设备中的广告频率。

如何解决这个问题?

0 个答案:

没有答案