20 字节的蓝牙 LE 数据 JSON
Bluetooth LE data JSON in 20 bytes
我在 Arduino 上有一个蓝牙 LE 模块,它向 Android 应用程序发送 JSON 字符串。
JSON 字符串如下所示:
{'d_stats':[{'t':'26.62','h':'59.64','p':'755.23','a':'109.02','hrm':'0.00'}]}
Android 应用程序接收 20 个字节的数据包(限制为 20 个字符),我找不到在收到最后一个数据包时将所有数据包放在一起的方法。
有没有办法知道何时收到最后一个数据包?
编辑:蓝牙以固定的时间间隔发送数据。有一个按钮连接到 Arduino 板上,按下时,将通过蓝牙发送其他数据。问题是和定时传输重叠了
我找到了解决方案,虽然不是很优雅。
BLE 不会发送整个 JSON 字符串,而是在单个数据包中发送 key/value 对。
首先在 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) = '[=10=]';
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
是来自蓝牙的原始数据。
呼...
我在 Arduino 上有一个蓝牙 LE 模块,它向 Android 应用程序发送 JSON 字符串。
JSON 字符串如下所示:
{'d_stats':[{'t':'26.62','h':'59.64','p':'755.23','a':'109.02','hrm':'0.00'}]}
Android 应用程序接收 20 个字节的数据包(限制为 20 个字符),我找不到在收到最后一个数据包时将所有数据包放在一起的方法。
有没有办法知道何时收到最后一个数据包?
编辑:蓝牙以固定的时间间隔发送数据。有一个按钮连接到 Arduino 板上,按下时,将通过蓝牙发送其他数据。问题是和定时传输重叠了
我找到了解决方案,虽然不是很优雅。 BLE 不会发送整个 JSON 字符串,而是在单个数据包中发送 key/value 对。 首先在 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) = '[=10=]';
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
是来自蓝牙的原始数据。
呼...