|
1 |
| -# Sqlite µLogger |
| 1 | +# Sqlite µLogger for Arduino |
2 | 2 |
|
3 |
| -Lean and Mean Sqlite Data(base) Logger |
| 3 | +Sqlite µLogger is a Fast and Lean database logger that can log data into Sqlite databases even with SRAM as low as 2kb as in an Arduino Uno. |
4 | 4 |
|
5 |
| -## This library hosts both a C library and an Arduino library. |
| 5 | +This repo is an Arduino library that can work with Arduino Uno board or any Arduino board that has minimum 2kb RAM and a SD Shield attached. |
| 6 | + |
| 7 | +It has been tested with Arduino Uno with SparkFun MicroSD Shield, WeMos ESP8266 D1 Mini with WeMos MicroSD Shield and ESP32 SD_MMC breakout board. |
| 8 | + |
| 9 | + |
6 | 10 |
|
7 | 11 | # Features
|
8 | 12 |
|
9 |
| -- Memory requirement: `page_size` + some stack |
10 |
| -- "Finalize" is optional |
| 13 | +- Low Memory requirement: `page_size` + some stack |
11 | 14 | - Can log using Arduino UNO (2kb RAM) with 512kb page size
|
12 |
| -- Can do binary search on RowID or Timestamp without any index |
| 15 | +- Can do quick binary search on RowID or Timestamp without any index in logarithmic time |
13 | 16 | - Recovery possible in case of power failure
|
14 | 17 | - Rolling logs are possible (not implemented yet)
|
15 | 18 | - Can use any media using any IO library/API or even network filesystem
|
16 |
| -- DMA writes possible |
| 19 | +- DMA writes possible (not shown) |
| 20 | +- Virtually any board and any media can be used as IO is done through callback functions. |
| 21 | + |
| 22 | +# Getting started |
| 23 | + |
| 24 | +The example `Uno_and_above` shows how data read from Analog pins can be stored along with Timestamp into Sqlite database and retrieved by RowId. |
| 25 | + |
| 26 | +Records can also be located using Timestamp in logarithmic time by doing a Binary Search on the data logged. This is not possible using conventional loggers. |
| 27 | + |
| 28 | +For example, locating any record in a 70 MB db having 1 million records on Arduino UNO with SparkFun microSD Shield took only 1.6 seconds. |
| 29 | + |
| 30 | +The examples `ESP8266_Console` and `ESP32_Console` can be used to log and retrieve from ESP8266 and ESP32 boards respectively on Micro SD and SPIFFS filesystems. |
17 | 31 |
|
18 | 32 | # Ensuring integrity
|
19 | 33 |
|
20 |
| -During finalize: |
21 |
| -- If Sqlite format 3 and checksum matches, then all ok |
22 |
| -- If header checksum does not match, re-build header from leaf pages |
23 |
| -- If leaf page checksum does not match, discard it (optional?) |
| 34 | +If there is power failure during logging, the data can be recovered using `Recover database` option in the menu. |
24 | 35 |
|
25 | 36 | # Limitations
|
26 | 37 |
|
| 38 | +Following are limitations of this library: |
| 39 | + |
27 | 40 | - Only one table per Sqlite database
|
28 | 41 | - Length of table script limited to (`page size` - 100) bytes
|
| 42 | +- `Select`, `Insert` are not supported. Instead C API similar to that of Sqlite API is available. |
29 | 43 | - Index creation and lookup not possible (as of now)
|
30 | 44 |
|
| 45 | +However, the database created can be copied to a desktop PC and further operations such as index creation and summarization can be carried out from there as though its a regular Sqlite database. |
| 46 | + |
| 47 | +# Support |
| 48 | + |
| 49 | +If you find any issues, please create an issue here or contact the author (Arundale Ramanathan) at arun@siara.cc. |
0 commit comments