🌟
M5StackCore2 + ENV2センサユニット + Sqlite3でセンサーデータをデータベースに蓄積してみる
それでは、続けてSqlite3データーベースを導入する。
Sqlite3Esp32のインストール
ArduinoIDEでSqlite3Esp32をインストールする。
テーブル
必要なのは気温、湿度、気圧。
気温テーブルはこれで良いだろう。
CREATE TABLE IF NOT EXISTS temperature (id INTEGER PRIMARY KEY AUTOINCREMENT,sensor_id INTEGER NOT NULL,location TEXT,at INTEGER NOT NULL,milli_degc INTEGER NOT NULL);
(相対)湿度テーブルはこれで。
CREATE TABLE IF NOT EXISTS relative_humidity (id INTEGER PRIMARY KEY AUTOINCREMENT,sensor_id INTEGER NOT NULL,location TEXT,at INTEGER NOT NULL,ppm_rh INTEGER NOT NULL);
気圧テーブルはこれで。
CREATE TABLE IF NOT EXISTS pressure (id INTEGER PRIMARY KEY AUTOINCREMENT,sensor_id INTEGER NOT NULL,location TEXT,at INTEGER NOT NULL,pascal INTEGER NOT NULL);
Arduinoスケッチ
前回のスケッチを改造してこうする。
このスケッチは長いのでたたんでおく
このスケッチをM5Core2に書込んで、測定値をSqlite3データーベースファイルをSDカードに保存する。
メインメモリーからPSRAMへ
M5StackCore2のSRAM領域は512kB。
それをSqlite3データベースに使わせると不足するので、Core2内蔵の疑似SRAM領域をSqlite3が使うようにsqlite3_configで設定する。
/*
* sqlite3用
*/
const sqlite3_mem_methods DATABASE_CUSTOM_MEM_METHODS{
/* メモリー割り当て関数 */
.xMalloc = [](int size) -> void * {
return heap_caps_aligned_alloc(8, size,
MALLOC_CAP_8BIT | MALLOC_CAP_SPIRAM);
},
/* メモリー解放関数 */
.xFree = heap_caps_free,
/* メモリー再割り当て関数 */
.xRealloc = [](void *ptr, int size) -> void * {
return heap_caps_realloc(ptr, size, MALLOC_CAP_8BIT | MALLOC_CAP_SPIRAM);
},
/* 割り当てサイズを返す関数 */
.xSize = [](void *ptr) -> int {
return heap_caps_get_allocated_size(ptr);
},
/* 8の倍数に切り上げる関数 */
.xRoundup = [](int size) -> int {
return (size + 7) & ~7;
},
/* メモリー割り当て初期化 */
.xInit = [](void *app_data) -> int {
return 0; // nothing to do
},
/* メモリー割り当て後片付け */
.xShutdown = [](void *app_data) -> void {
// nothing to do
},
/* xInit() と xShutdown()の引数 */
.pAppData = nullptr,
};
Discussion