Всем привет. попробовал использовать SPIFFS для хранения настроек, но ребутится esp8266. делал по примерам, не через json, а сразу в структурой (бинарником), но возможно напутал с указателями, ребутится вот тут:
uint16_t bytesRead =
spconfig.read((uint8_t *)&confg, sizeof(config_t));
сама функция до этого кода:
#include <FS.h>
typedef struct
{
uint8_t current_pos = 0; // текущая позиция ограничителя
uint8_t max_pos = 0; // максимальное кол-во оборотов с датчик при максимальном открытии ограничителя (если не ноль, то прошла калибровка)
char topic_MQTT_CMD_IN[50] = "window1/inTopic"; // топик по входящим командам
char topic_MQTT_STATUS[50] = "window1/status"; // топик со статусом
char mqtt_server[20] = "
192.168.1.2"; // адрес mqtt сервера
char mqtt_user[20] = "esp"; // Логи от mqtt сервер
uint16_t mqtt_port = 1883; // порт от mqtt сервера
bool save_config = false; // статус записи в eeprom (true - сохранено, false - Брать дефолтовые)
} config_t;
uint8_t loadConfig(config_t *confg){
putLogLn("loadConfig begin");
if(!SPIFFS.begin()){
putLogLn(" SPIFFS mount failed");
return false;
}
putLogLn(" SPIFFS mount");
if (!SPIFFS.exists(settingsFilename)){
putLogLn(" Config file not exsist");
// if (!settings_save()){
// return false;
// }
}
putLogLn(" SPIFFS file found");
File spconfig =
SPIFFS.open(settingsFilename, "r");
if (!spconfig){
putLogLn(" Could'n read file");
return false;
}
putLogLn(" SPIFFS opened");
putLogLn(" SPIFFS config_t size=" +String(sizeof(config_t), DEC));
putLogLn(" SPIFFS confg size=" +String(sizeof(confg), DEC));
putLogLn(" SPIFFS file size=" +String(spconfig.size(), DEC));
putLogLn(" SPIFFS file position=" +String(spconfig.position(), DEC));
uint16_t bytesRead =
spconfig.read((uint8_t *)&confg, sizeof(config_t));
.....
}
вроде функция read у File по спеке как и использую:
size_t File::read(uint8_t* buf, size_t size) {
if (!_p)
return -1;
return _p->read(buf, size);
}
куда копать?