Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить

ESP 32 - BLE

Ср фев 08, 2023 19:47:41

Здравствуйте. :)
Плата ESP 32
Никак не получается решить проблему по передаче и приему данных по BLE.
Есть несколько разных датчиков от которых требуется передавать данные плюс требуется предавать значения некоторых переменных.
Эти данные помещаются в массив и в цикле передаются от сервера клиенту.
Ниже для примера вместо данных передаем значения в 0x виде и для идентификации на приемной стороне начала массива обозначаем находящиеся там данные как 0xAA;

BLE_KGR_buf[0] = 0xAA;
BLE_KGR_buf[1] = 0xA;
BLE_KGR_buf[2] = 0xB;
BLE_KGR_buf[3] = 0xC;
BLE_KGR_buf[4] = 0xD;
BLE_KGR_buf[5] = 0xE;
BLE_KGR_buf[6] = 0xF;
BLE_KGR_buf[7] = 0xFF;
for (uint8_t i = 0; i < 8; i++)
{
float BLE_KGR = BLE_KGR_buf[i];
static char BLE_buf[7];
dtostrf(BLE_KGR, 6, 2, BLE_buf);
filter_Characteristics.setValue(BLE_buf);
filter_Characteristics.notify();
delay(20);
}


Код клиента запускается когда от сервера начинают приходить данные:

static void filterNotifyCallback(BLERemoteCharacteristic* pBLERemoteCharacteristic,
uint8_t* pData, size_t length, bool isNotify) {
String tstr = (char*)pData;
filter = tstr.toInt();
}


Данные приходят, но при попытке упорядочивания в цикле их обратно в массив после определения первой ячейки 0xAA для идентификации кто есть кто получается путаница, например:
BLE_KGR_buf[0] = 0xAA;
BLE_KGR_buf[1] = 0xA;
BLE_KGR_buf[2] = 0xB;
BLE_KGR_buf[3] = 0xC;
BLE_KGR_buf[4] = 0xD;
BLE_KGR_buf[5] = 0xD;
BLE_KGR_buf[6] = 0xD;
BLE_KGR_buf[7] = 0xFF;
Код для распределения данных по порядку в массив находится в основном цикле.
Если в одной характеристике передавать одно значение от одного датчика то все работает хорошо.
Есть ли какой то флаг по которому можно судить, что данные по определенной характеристике пришли?
Как правильно организовать передачу и прием данных по BLE для массива, поделитесь информацией, кодом, идеей ссылкой))
Ответить