Я использую приложение для Android (мобильный телефон) и ESP32, подключенные друг к другу через BLE. Я пытаюсь отправить строку с мобильного телефона на ESP32. Приложение для Android отправляет строку в виде массива байтов, а esp получает ее. Но у меня возникли проблемы с получением значения в прошивке ESP.
Ниже приведен код метода, который я пробовал. Весь смысл этого кода в том, чтобы строка, отправленная из приложения Android, была сохранена в этой переменной: INCOMING_STRING1
. Я попытался настроить принимающую переменную как массив символов (я думаю, для чего предназначена эта переменная), а затем использовал strcpy
, предполагая, что содержимое входящих данных (переданных через символьный параметр) будет скопировано в INCOMING_STRING1
, однако, это не работает.
//Variables
const uint8_t *character;
char INCOMING_STRING1[64];
//Elsewhere in code...
//event comes from the ESP BLE module when a BLE event happens
switch(event)
{
case ESP_GATTS_WRITE_EVT:
writeHandle(param->write.handle);
break;
...
}
//Elsewhere in code...
static void writeHandle(uint16_t handle)
{
get_attr_ret = esp_ble_gatts_get_attr_value(handle, &length, &character);
//There's different handles for different "channels"
if(handle == 45)
{
//supposed to take string that was received
strcpy(INCOMING_STRING1, character);
//then print it to make sure
printf("%s", INCOMING_STRING1);
}
}
Я знаю, что это, вероятно, совпадение с ошибкой типа, поскольку входящие данные относятся к типу uint8_t
, а переменная для хранения строки - к типу char
. Я всегда боролся с приведением типов и манипуляциями с типами в целом, любая помощь приветствуется!
Вот сообщения об ошибках, которые я получаю сейчас:
ошибка: цели указателя при передаче аргумента 2 'strcpy' отличаются подписью [-Werror = указатель-знак] strcpy (INCOMING_STRING1, символ); ^ примечание: ожидается 'const char * restrict', но аргумент имеет тип 'const uint8_t * {aka const unsigned char *}'