我正在尝试从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设备中的广告频率。
如何解决这个问题?