如何使用 Preferences.h 在 ESP8266 中持久化数据

问题描述 投票:0回答:0

几个小时(几天!)后,我注意到几乎只使用了

Preferences.h
库附带的示例,但没有一个真正符合我的需求。 因为我是一个彻头彻尾的 C 菜鸟,所以我陷入了类型、演员表以及随之而来的一切可怕的事情:-(

所以:我正在为电池驱动的 ESP8266 编写代码,该代码读取传感器并将其发布到 MQTT 总线上。我想摆脱硬编码凭证。默认情况下,WiFiManager.h 库支持使用“ConfigPortal”网络界面更改 WiFi 凭据。在那里,我想为 MQTT 添加自定义字段,这些字段也可以更改并保存到持久内存中。

这是全球理念:

#include <Preferences.h>

// Declare vars 
char mqtt_server[40];
char mqtt_port[6];
char mqtt_user[20];
char mqtt_pass[20];

// Read data from persistant memory or else return default
mqtt_server = preferences.getChar("mqtt_server", "default mqtt server");
mqtt_port = preferences.getChar("mqtt_port", "default mqtt port");
mqtt_user = preferences.getChar("mqtt_user", "default mqtt user");
mqtt_pass = preferences.getChar("mqtt_pass", "default mqtt pass");

// Connect to mqtt broker using the vars as just defined

// Pushing a button starts a ConfigPortal webinterface to change these vars
// Write new data to persistant memory
// get the new data from the webform (called "Mqtt_server.
preferences.begin("mqtt_config", false);
preferences.putChar("mqtt_server", new_mqtt_server);
preferences.putChar("mqtt_port", new_mqtt_port);
preferences.putChar("mqtt_user", new_mqtt_user);
preferences.putChar("mqtt_pass", new_mqtt_pass);
preferences.end();

将此视为伪代码,它显示了我想要实现的目标。

我有这样的问题:

  • 如何将数据导入“mqtt_server”? (目前只获取第一个字符)
  • 为什么 getChar 只允许整数作为默认返回值,而我希望默认文本是可能的? (该示例显示默认文本,但仅接受例如“0”。

目前我迷路了,所以这是我最后的选择......提前感谢您的思考!

c esp8266
© www.soinside.com 2019 - 2024. All rights reserved.