Ошибка компиляции при попытке прочитать данные Firebase с помощью esp32 в Arduino IDE

Я пытаюсь прочитать данные firebase с помощью esp32, когда я пытаюсь прочитать данные firebase статически (строковый литерал), ошибка не возникает.

String board=Firebase.getString(fbdo, F("Device/board")) ? String(fbdo.to()).c_str() : fbdo.errorReason().c_str(); // успешное получение данных

Но когда я пытаюсь прочитать данные динамически, используя объект String, я получаю ошибку компиляции для данного кода

String string2 = "Device/board"; 
String board1=Firebase.get(fbdo, F(string2)) ? String(fbdo.to()).c_str() : 
    fbdo.errorReason().c_str();

ERROR : #define F(string_literal) (FPSTR(PSTR(string_literal)))

Как решить эту проблему?

, 👍-1

Обсуждение

добавьте к вопросу точное сообщение об ошибке, которое вы получаете, @Juraj

не используйте макрос F на esp32, @Juraj


1 ответ


0

Макрос F() можно использовать только со строковыми литералами, но не с переменными.

Простым решением должно быть (я не могу протестировать) предоставление string2 напрямую. (Я надеюсь, что Firebase.get() перегружен.) Попробуйте следующее:

String board1 = Firebase.get(fbdo, string2) ? String(fbdo.to()).c_str() : fbdo.errorReason().c_str();

Чтобы сэкономить драгоценную оперативную память, вы можете использовать другой тип данных для string2. Чтобы получить аналогичный результат, вы можете попробовать:

const __FlashStringHelper *string2 = F("Device/board");
String board1 = Firebase.get(fbdo, string2) ? String(fbdo.to()).c_str() : fbdo.errorReason().c_str();

Чтобы получить больше информации, вы можете прочитать это руководство по PROGMEM.

,

Спасибо бро, проверю и сообщу результат, @Ramesh Kumar