Ошибка при компиляции программы для esp32 с Preferences.h

Я пытаюсь написать программу для Adafruit ESP32-S2 TFT Feather. Однако я не могу заставить его скомпилировать мою программу с использованием <Preferences.h>. Я не могу заставить Arduino IDE скомпилировать даже пример программы в настройках github. Вот пример программы, которая не компилируется. Если кто-нибудь скажет мне, что здесь не так, я могу применить ее к своей личной программе.

Пример программы:

/*
 Startup counter example with Preferences library.
 This simple example demonstrates using the Preferences library to store
 how many times the device has booted.
*/

#include <Preferences.h>

Preferences preferences;

void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.println();

  // Откройте настройки с пространством имен my-app. Каждый модуль приложения, библиотека и т.д.
  // должно использовать имя пространства имен, чтобы предотвратить коллизии имен ключей. Мы откроем хранилище в
  // RW-режим (второй параметр должен быть ложным).
  // Примечание. Длина имени пространства имен ограничена 15 символами.
  preferences.begin("my-app", false);

  // Удаляем все настройки в открытом пространстве имен
  //предпочтения.очистить();

  // Или удалить только ключ счетчика
  //настройки.удалить("счетчик");

  // Получить значение счетчика, если ключ не существует, вернуть значение по умолчанию 0
  // Примечание. Имя ключа ограничено 15 символами.
  unsigned int counter = preferences.getUInt("counter", 0);

  // Увеличиваем счетчик на 1
  counter++;

  // Выводим счетчик в Serial Monitor
  Serial.printf("Current counter value: %u\n", counter);

  // Сохраняем счетчик в настройках
  preferences.putUInt("counter", counter);

  // Закрыть настройки
  preferences.end();

  Serial.println("You can restart the device now.");
}

void loop() {}

СООБЩЕНИЕ ОШИБКИ:

WARNING: library Preferences claims to run on esp8266, particle-argon, particle-boron, particle-xenon architecture(s) and may be incompatible with your current board which runs on esp32 architecture(s).
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:18:4: error: #error "For ESP32 devices, please use native Preferences library"
   #error "For ESP32 devices, please use native Preferences library"
    ^~~~~
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp: In member function 'bool Preferences::begin(const char*, bool)':
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:289:10: error: '_fs_init' was not declared in this scope
     if (!_fs_init()) {
          ^~~~~~~~
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:289:10: note: suggested alternative: '__sinit'
     if (!_fs_init()) {
          ^~~~~~~~
          __sinit
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:293:9: error: '_fs_mkdir' was not declared in this scope
     if (_fs_mkdir(NVS_PATH)) {
         ^~~~~~~~~
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:293:9: note: suggested alternative: 'mkdir'
     if (_fs_mkdir(NVS_PATH)) {
         ^~~~~~~~~
         mkdir
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp: In member function 'bool Preferences::clear()':
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:321:12: error: '_fs_clean_dir' was not declared in this scope
     return _fs_clean_dir(_path.c_str());
            ^~~~~~~~~~~~~
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:321:12: note: suggested alternative: '_fscanf_r'
     return _fs_clean_dir(_path.c_str());
            ^~~~~~~~~~~~~
            _fscanf_r
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp: In member function 'bool Preferences::remove(const char*)':
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:333:12: error: '_fs_unlink' was not declared in this scope
     return _fs_unlink(path.c_str());
            ^~~~~~~~~~
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:333:12: note: suggested alternative: 'unlink'
     return _fs_unlink(path.c_str());
            ^~~~~~~~~~
            unlink
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp: In member function 'size_t Preferences::putBytes(const char*, const void*, size_t)':
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:407:9: error: '_fs_exists' was not declared in this scope
     if (_fs_exists(path.c_str())) {
         ^~~~~~~~~~
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:407:9: note: suggested alternative: 'on_exit'
     if (_fs_exists(path.c_str())) {
         ^~~~~~~~~~
         on_exit
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:411:13: error: '_fs_verify' was not declared in this scope
         if (_fs_verify(path.c_str(), buf, len)) {
             ^~~~~~~~~~
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:418:23: error: '_fs_create' was not declared in this scope
         int written = _fs_create(next.c_str(), buf, len);
                       ^~~~~~~~~~
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:418:23: note: suggested alternative: 'creat'
         int written = _fs_create(next.c_str(), buf, len);
                       ^~~~~~~~~~
                       creat
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:420:13: error: '_fs_rename' was not declared in this scope
         if (_fs_rename(next.c_str(), path.c_str())) {
             ^~~~~~~~~~
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:420:13: note: suggested alternative: 'basename'
         if (_fs_rename(next.c_str(), path.c_str())) {
             ^~~~~~~~~~
             basename
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:427:16: error: '_fs_create' was not declared in this scope
         return _fs_create(path.c_str(), buf, len);
                ^~~~~~~~~~
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:427:16: note: suggested alternative: 'creat'
         return _fs_create(path.c_str(), buf, len);
                ^~~~~~~~~~
                creat
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp: In member function 'bool Preferences::isKey(const char*)':
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:441:12: error: '_fs_exists' was not declared in this scope
     return _fs_exists(path.c_str());
            ^~~~~~~~~~
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:441:12: note: suggested alternative: 'on_exit'
     return _fs_exists(path.c_str());
            ^~~~~~~~~~
            on_exit
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp: In member function 'String Preferences::getString(const char*, String)':
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:536:15: error: '_fs_get_size' was not declared in this scope
     int len = _fs_get_size(path.c_str());
               ^~~~~~~~~~~~
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:536:15: note: suggested alternative: '__getline'
     int len = _fs_get_size(path.c_str());
               ^~~~~~~~~~~~
               __getline
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp: In member function 'size_t Preferences::getBytesLength(const char*)':
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:555:15: error: '_fs_get_size' was not declared in this scope
     int len = _fs_get_size(path.c_str());
               ^~~~~~~~~~~~
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:555:15: note: suggested alternative: '__getline'
     int len = _fs_get_size(path.c_str());
               ^~~~~~~~~~~~
               __getline
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp: In member function 'size_t Preferences::getBytes(const char*, void*, size_t)':
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:565:15: error: '_fs_get_size' was not declared in this scope
     int len = _fs_get_size(path.c_str());
               ^~~~~~~~~~~~
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:565:15: note: suggested alternative: '__getline'
     int len = _fs_get_size(path.c_str());
               ^~~~~~~~~~~~
               __getline
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:579:12: error: '_fs_read' was not declared in this scope
     return _fs_read(path.c_str(), buf, len);
            ^~~~~~~~
C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:579:12: note: suggested alternative: 'fread'
     return _fs_read(path.c_str(), buf, len);
            ^~~~~~~~
            fread
exit status 1
Error compiling for board Adafruit Feather ESP32-S2 TFT.

, 👍-3

Обсуждение

Вы нашли время, чтобы прочитать сообщение об ошибке?, @Majenko

IDE должна автоматически использовать библиотеку Preferences с платформы esp32. год назад была версия IDE, в которой были неправильные приоритеты при выборе библиотеки., @Juraj


2 ответа


-1

Похоже:

  1. вы не установили ядро arduino-ESP32 или
  2. в Менеджере плат в среде IDE выбрана неправильная целевая плата.

Предположительно, это последнее, поскольку кажется, что это сторонняя библиотека настроек ESP8266, которую система извлекает.

,

-1

Кажется, первая ошибка подсказывает мне, в чем проблема:

ВНИМАНИЕ: в настройках библиотеки заявлено, что она работает на архитектуре (архитектурах) esp8266, частицы-аргона, частицы-бора, частицы-ксенона и может быть несовместима с вашей текущей платой, которая работает на архитектуре (архитектурах) esp32. C:\Users\xunde\Documents\Arduino\libraries\Preferences\src\Preferences.cpp:18:4: error: #error "Для устройств ESP32 используйте собственную библиотеку настроек" #error "Для устройств ESP32 используйте собственную библиотеку настроек"

Похоже, вы используете TFT Adafruit Feather ESP32-S2.

Я думаю, скорее всего, Arduino IDE настроена на использование ESP8266.

Проверьте Tools->Board->xxx, чтобы убедиться, что вы загрузили правильные библиотеки для вашего ESP32. Возможно, вам потребуется выбрать "менеджер плат" и найдите подходящие библиотеки для вашего микроконтроллера.

При правильно настроенном микроконтроллере вы должны увидеть, что эта проблема исчезнет, но нет никаких гарантий, что никаких последующих проблем не будет!

,

почему IDE выдает предупреждение о том, что библиотека не для esp32, когда в меню Tools выбран esp8266?, @Juraj

Хороший вопрос - посмотрите на ошибки - это был намек, который я получил. Может быть, начать с новой установки / чистой рабочей области, чтобы удалить все, что висит вокруг, чего там не должно быть., @Insecurity

а может, просто может быть, мой комментарий под вопросом был прав, @Juraj

@juraj, да, устаревшие IDE/метаданные, несинхронизированные библиотеки и т. д. вполне возможны, отсюда и мое предостережение внизу моего комментария. про отсутствие гарантий Мы, наверное, никогда не узнаем наверняка!, @Insecurity