Я использую приложение для 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 *}'