【问题标题】:Bluetooth LE data JSON in 20 bytes20 字节的蓝牙 LE 数据 JSON
【发布时间】:2015-11-11 13:38:28
【问题描述】:

我在 Arduino 上有一个蓝牙 LE 模块,它将 JSON 字符串发送到 Android 应用程序。

JSON 字符串如下所示:

{'d_stats':[{'t':'26.62','h':'59.64','p':'755.23','a':'109.02','hrm':'0.00'}]}

Android 应用接收 20 个字节的数据包(限制 20 个字符),我找不到在收到最后一个数据包时将所有数据包放在一起的方法。

有没有办法知道收到最后一个数据包的时间?

编辑:蓝牙以固定的时间间隔发送数据。有一个按钮连接到 Arduino 板,按下该按钮将通过蓝牙发送其他数据。问题是它与定时传输重叠。

【问题讨论】:

  • 最后发送一个控制字节。将某些内容连接到此字符串,通常 '\0' 是字符串的结尾 Read,直到您收到为止。
  • 我有类似的东西,但有时我会发送另一个字符串,但更短,它与正在传输的字符串混合在一起。

标签: java android c arduino bluetooth-lowenergy


【解决方案1】:

我找到了解决方案,虽然不是很优雅。 BLE 将在单个数据包中发送一个键/值对,而不是发送整个 JSON 字符串。 首先在 C 中:

char passMsg(String akey, char* origMsg){
  // akey = object key must be 4 characters long
  // origMsg + akey must be shorter than 20 characters
  char* newmsg = origMsg;
  size_t prevlen = strlen(newmsg);  
  memset(newmsg + prevlen, ' ', 15 - prevlen);
  *(newmsg + 15) = '\0'; 
  String bleMsg = akey + ":"+newmsg;
  ble.print("AT+BLEUARTTX=");            
  ble.println(bleMsg);  
}

这样我传递一个这样的字符串:temp:20.45

然后在 Android/Java 中:

String[] rawString = data.replace(" ", "").split(":");
if(rawString.length>1){
  String apiCallKey = rawString[0];
  String apiCallVal = rawString[1];
  callAPI(apiCallKey,apiCallVal);
}

data 是来自蓝牙的原始数据。

呼……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多