问题描述
在我目前的观点中,我正在尝试对接这 3 个不兼容的东西。我有一个大草图,信息显示在四个 16x16 的 LED 矩阵显示器上。有一个 RTC、一个 ESP8266 和两个传感器 bme280 和 DS18B20(室内外温度、压力、湿度)。这一切都可以无缝运行。我决定尝试维护一个包含放映的数据库,比如半年。我连接了sqlite库。但不知何故它最终不起作用!输入 24 个条目后,我的内存不足。然后我简化了一切,只使用了一个带有 1 个表的数据库文件。调度程序库每 10 秒填满一次。所以现在112记录了同样的故事。数据库文件的大小只有 6656 字节。我附上草图。所以我不明白为什么在指定大小的肉体内存4兆的情况下,6千字节的内存会耗尽?看,也许我做错了什么?也许我必须以某种方式完成?不知何故可能是清晰的记忆? 所以我用的是ESP8266 NodeMCU V1。
#include <TickerScheduler.h>
#include <sqlite3.h>
#include <vfs.h>
#include <FS.h>
File fsuploadFile;
TickerScheduler ts(1);
void setup() {
Serial.begin(115200);
FS_init();
sqlite_init();
}
void loop() {
ts.update();
if (Serial.available() > 0) {
String str = Serial.readString();
if (str != "") {
char query[str.length() + 1];
strcpy(query,str.c_str());
str = "";
db_exec(query);
}
}
}
void FS_init(void) {
system_update_cpu_freq(SYS_cpu_160MHZ);
if (!SPIFFS.begin()) {
Serial.println("Failed to mount SPIFFS");
return;
}
Dir dir = SPIFFS.openDir("/");
while (dir.next()) {
String fileName = dir.fileName();
size_t fileSize = dir.fileSize();
Serial.print(fileName); Serial.println(fileSize);
}
}
void sqlite_init() {
sqlite3_initialize();
int cmin = 0;
int chour = 0;
int csec = 0;
ts.add(0,10000,[&](void*) {
String tIn = "27.5";//(String)GettIn();
String tOut = "-4.3";//(String)GettOut();
String humidity = "21";//(String)Gethumidity();
String pressure = "745";//(String)Getpressure();
String str = "INSERT INTO day_p (cyear,cmonth,cday,chour,cmin,tin,tout,vlag,davl) ";
str += "VALUES (2021,2,28," + String(chour) + "," + String(cmin);
str += "," + tIn + "," + tOut + "," + humidity + "," + pressure + ");";
str += "Select count(cyear) from day_p group by cyear;";
char query[str.length() + 1];
strcpy(query,str.c_str());
str = "";
db_exec(query);
csec = csec + 10;
if (csec == 60) {
csec = 0;
cmin++;
}
if (cmin == 60) {
cmin = 0;
chour++;
}
},nullptr,true);
}
void db_exec(const char *sql) {
sqlite3 *db;
int rc;
const char *dbf = "/FLASH/weather.sql3";
char *ErrMsg = 0;
const char* data = 0;
Serial.println(sql);
File db_file_obj;
vfs_set_spiffs_file_obj(&db_file_obj);
if (sqlite3_open(dbf,&db)) {
Serial.print(F("Can't open database: "));
Serial.println(sqlite3_errmsg(db));
return;
}
else Serial.println("DB opened");
rc = sqlite3_exec(db,sql,callback,(void*)data,&ErrMsg);
if (rc != sqlITE_OK) {
Serial.print(F("sql error: "));
Serial.println(ErrMsg);
sqlite3_free(ErrMsg);
}
Serial.println(rc);
sqlite3_close(db);
}
static int callback(void *data,int argc,char **argv,char **azColName) {
for (int i = 0; i < argc; i++){
if (i > 0) {
Serial.print(" | ");
}
Serial.print(argv[i]);
}
Serial.println();
return 0;
}```
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)