2015-11-11 2 views
1

У меня есть модуль Bluetooth LE на Arduino, который отправляет строку JSON в приложение для Android.Данные Bluetooth LE JSON в 20 байтах

JSON строка выглядеть следующим образом:

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

Андроид приложение получает пакеты 20 байт (20 знаков ограничения), и я не могу найти способ, чтобы поместить все пакеты вместе, когда последний пакет был принят ,

Есть ли способ узнать, когда получен последний пакет?

Редактировать: bluetooth отправляет данные с постоянным интервалом времени. Существует кнопка, подключенная к плате Arduino, которая при нажатии будет отправлять другие данные через Bluetooth. Проблема в том, что она перекрывается с синхронизированной передачей.

+0

Отправить контрольный байт в конце. Соедините что-то с этой строкой, обычно «\ 0» - это конец строки Read, пока вы ее не получите. – jabujavi

+0

У меня было что-то в этом роде, но иногда я посылаю еще одну строку, но короче, которая смешивается с той, которая передается. –

ответ

1

Я нашел решение, хотя и не очень элегантным. Вместо отправки всей строки JSON BLE отправит пару ключ/значение в одном пакете. В С первой:

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 это необработанные данные Bluetooth.

Phew ...

Смежные вопросы