如何使用DBus和Bluez 5.41将值赋给GATT特征?

时间:2016-08-07 19:53:54

标签: ruby bluetooth-lowenergy dbus bluez gatt

我正在尝试通过DBus接口使用蓝牙低功耗传感器。基本程序(连接后)是将1写入特性以打开温度传感器,等待一秒钟,从另一个特性读取,然后将0写回原始特性再次将其关闭。我能够在交互模式下使用gatttool在shell中写入这些,但每次我尝试使用DBus使用WriteValue写一个值时,我的Ruby代码中都会得到Error.NotSupported(DBus :: Error)。使用d-feet DBus调试器,我也得到了相同的错误。我可以ReadValue并在GattCharacteristic1接口中读取内容就好了。

我已经尝试了各种格式来编写字节,写了一个零和其他东西的DBus.variant偏移量,错误似乎没有消失。我能够从d-feet和我自己的代码中读取。我正在使用Ruby和dbus-ruby gem,但我不相信这是Ruby代码特有的。

c = get_obj_iface("#{device}/service0022/char0023", 'org.bluez.GattCharacteristic1')

puts c.ReadValue({}).inspect #works and outputs [[0, 0, 0, 0]]

bytes = [0, 0, 0, 0].pack('C*') #byte array w/ 4 bytes since that is what I get when I read

c.WriteValue(bytes, {} ) #also tried with {'offset' => DBus.variant('q', 0) }

这些是d-feet DBus调试器中类似问题的一些屏幕截图。

The WriteValue fails

The ReadValue and other properties work fine

正如你在d-feet中看到的那样,写作也失败了,阅读效果很好。我在这里做错了什么,或者这可能是bluez的问题还是设置传感器的方式?

0 个答案:

没有答案