关于此问题的一些帖子尚未宣布任何解决方案。
想要访问内部的moveenseense传感器数据(ECG,Acc…),但不使用Android或iOS平台(如moveense演示文稿https://www.movesense.com/wp-content/uploads/2018/11/2018-11-06-Using-Movesense-CustomGATTService.pdf所建议),我至少有1周未能这样做。 我可以成功创建自己的GATT特征并从moveense设备外部进行订阅。通过用几行来增加sample / custom_gattsvc_app,很容易做到这一点:
const uint16_t myCharUUID16 = 0x2A58; // this new characteristic will appear in the service as the third one in the sample
WB_RES::GattProperty myCharProp = WB_RES::GattProperty::INDICATE;
myChar.props = wb::MakeArray<WB_RES::GattProperty>( &myCharProp, 1);
myChar.uuid = wb::MakeArray<uint8_t>( reinterpret_cast<const uint8_t*>(&myCharUUID16), 2);
customGattSvc.chars = wb::MakeArray<WB_RES::GattChar>(characteristics, 3); // 3 here since there are 3 characteristics now
问题从我这里开始:
在CustomGATTSvcClient :: onGetResult()中,由于所有BT服务创建完毕后,由于CustomGATTSvcClient :: onPostResult()调用了onGetResult(),因此我尝试强制订阅ECG或Acc:
int32_t sampleRate = 10;
asyncSubscribe(WB_RES::LOCAL::MEAS_ACC_SAMPLERATE(),AsyncRequestOptions::Empty, sampleRate);
我没有实现onSubscribeResult()
在onNotify()中,您应该能够每隔1/10秒通过
用新数据拦截来自白板的呼叫switch (resourceId.getConstId()) {
case WB_RES::LOCAL::MEAS_ACC_SAMPLERATE::ID:
{
// To see a blinking LED on each new Acc data
asyncPut(WB_RES::LOCAL::COMPONENT_LED(),AsyncRequestOptions::Empty, myFlippingBool);
myFlippingBool = ! myFlippingBool;
}
我观察到的东西:
A。当我asyncSubscribe()ECG或Acc时,即使成功订阅了0x2A1C特征,也不再调用示例的WB_RES :: LOCAL :: MEAS_TEMP :: LID并且不会将更新分发到BT客户端。这意味着所有通知都会因资源冲突而被禁用?
B。订阅时(如前)或什至:
wb::Result result = getResource("Meas/Acc/10", mMyAccResourceId);
result = asyncSubscribe(mMyAccResourceId);
从不调用onNotify()方法,因为LED不会闪烁(即使在onNotify()实现之后直接执行,而无需进行开关/ case设置)
缺少有关CustomGatt的文档,似乎很多人无法将传感器集成到其他平台(Raspberry Pi或运行BT堆栈的通用处理器)上。 我曾经尝试过从基本的微控制器和BT模块通过直接AT命令访问moveenseense平台而没有成功(Movesense direct access to GATT endpoints),所以现在我转向没有成功的Raspberry解决方案+ Qt。
感谢您提供任何示例或对此问题的解答!
答案 0 :(得分:0)
不支持至少10 Hz。 Meas \ Acc \ 13会发生什么?