Nggak Perlu Database Simpan Data Lokal Di Esp32 Dengan File System
Nggak Perlu Database Simpan Data Lokal Di Esp32 Dengan File System
Menyimpan data secara lokal di ESP32 tanpa menggunakan database eksternal adalah solusi praktis untuk banyak proyek IoT ringan. Dengan memanfaatkan file system seperti SPIFFS atau LittleFS, ESP32 dapat menyimpan konfigurasi, log, atau data sensor secara langsung di dalam flash internal. Pendekatan ini menghilangkan kebutuhan server tambahan, mengurangi kompleksitas arsitektur, dan memungkinkan perangkat bekerja secara mandiri bahkan tanpa koneksi internet.
File system pada ESP32 bekerja mirip dengan penyimpanan pada komputer: kamu bisa membuat file, membaca, menulis, menghapus, dan memperbarui data. Hal ini membuat penyimpanan data menjadi fleksibel serta mudah dikelola, terutama ketika berurusan dengan format sederhana seperti JSON atau CSV. Selain itu, performanya cukup cepat untuk kebutuhan umum—misalnya menyimpan hasil pembacaan sensor secara berkala atau menyimpan preferensi pengguna untuk aplikasi IoT.
Dengan tidak perlunya database eksternal, biaya dan kebutuhan sumber daya menjadi jauh lebih rendah. Pendekatan ini cocok untuk proyek yang mengutamakan efisiensi dan kemampuan bekerja offline, seperti sistem monitoring lingkungan, perangkat smart-home, atau alat kendali otomatis. File system memberi keseimbangan ideal antara kesederhanaan, keandalan, dan fungsionalitas, menjadikannya pilihan favorit para pengembang yang menggunakan ESP32.
Script Program
Modifikasi platformio.ini
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
#include "WiFiModule.h"
[env:esp32dev]
board = esp32dev
platform = espressif32
framework = arduino
; --- Serial Upload ---
upload_port = COM12
; ganti sesuai port kamu
lib_extra_dirs = ../shared
[env:esp32dev-ota]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_protocol = espota
upload_port = xxx.xxx.xxx.xxx //isi dengan ip esp32 yang muncul di serial monitor
upload_flags =
--port=3232 ; OTA port default
--auth=otapassword ; jika pakai password, optional
; ganti sesuai port kamu
lib_extra_dirs = ../shared
WiFiModule.h
#pragma once
#include <WiFi.h>
class WiFiModule {
public:
WiFiModule(String ssid, String password);
void begin();
bool isConnected();
private:
String _ssid;
String _password;
};
WiFiModule.cpp
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
; --- Serial Upload ---
upload_port = COM9
; ganti sesuai port kamu
lib_deps =
bblanchon/ArduinoJson @ ^7.0.0
lib_extra_dirs = ../shared
board_build.partitions = min_spiffs.csv
board_build.filesystem = littlefs
WiFiModule.h
WiFiModule dimodifikasi untuk menggunakan data storage
#pragma once
#include <WiFi.h>
#include <StorageModule.h>
class WiFiModule {
public:
WiFiModule(StorageModule* storage);
void begin();
bool isConnected();
private:
StorageModule* storage;
};
WiFiModule.cpp
#include "WiFiModule.h"
WiFiModule::WiFiModule(StorageModule* storage)
: storage(storage) {}
void WiFiModule::begin() {
ArduinoJson ::JsonDocument doc;
if (storage->readJSON("/config.json", doc)) {
String ssid = doc["ssid"] | "";
String password = doc["password"] | "";
Serial.println("[WiFi] Initializing WiFi...");
Serial.println("[WiFi] Connecting to: " + ssid);
WiFi.begin(ssid.c_str(), password.c_str());
int retries = 0;
while (WiFi.status() != WL_CONNECTED && retries < 20) {
delay(500);
Serial.print(".");
retries++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\n[WiFi] Connected! IP: " + WiFi.localIP().toString());
} else {
Serial.println("\n[WiFi] Failed to connect.");
}
} else {
Serial.println("[WiFi] Config not found, skipping WiFi connect");
return;
}
}
bool WiFiModule::isConnected() {
return WiFi.status() == WL_CONNECTED;
}
StorageModule.h
#ifndef STORAGE_MODULE_H
#define STORAGE_MODULE_H
#include <LittleFS.h>
#include <ArduinoJson.h>
class StorageModule {
public:
StorageModule(bool formatOnFail = true);
bool begin();
bool exists(const String& path);
bool writeJSON(const String& path, const JsonDocument& doc);
bool readJSON(const String& path, JsonDocument& doc);
private:
bool _formatOnFail;
};
#endif
StorageModule.cpp
#include "StorageModule.h"
StorageModule::StorageModule(bool formatOnFail) {
_formatOnFail = formatOnFail;
}
bool StorageModule::begin() {
if (!LittleFS.begin(_formatOnFail)) {
Serial.println("[FS] Mount Failed");
return false;
}
Serial.println("[FS] LittleFS Mounted");
return true;
}
bool StorageModule::exists(const String& path) {
return LittleFS.exists(path);
}
bool StorageModule::writeJSON(const String& path, const JsonDocument& doc) {
File file = LittleFS.open(path, "w");
if (!file) return false;
serializeJson(doc, file);
file.close();
return true;
}
bool StorageModule::readJSON(const String& path, JsonDocument& doc) {
File file = LittleFS.open(path, "r");
if (!file) return "";
DeserializationError err = deserializeJson(doc, file);
file.close();
return !err;
}
main.cpp
#include <Arduino.h> #include <BlinkModule.h> #include <WiFiModule.h> #include <ArduinoOTA.h> #include <StorageModule.h>
BlinkModule blink(2, 500); StorageModule storage(true); WiFiModule wifi(&storage);
void setup() {
Serial.begin(115200);
delay(200);
Serial.println(“Project 01 - Blink Module”);
blink.start();
storage.begin();
wifi.begin();
ArduinoOTA.setPort(3232);
ArduinoOTA.setPassword(“otapassword”);
ArduinoOTA.begin();
}
void loop() { ArduinoOTA.handle(); }
Check it out!
Tags:
Ikuti terus tutorial saya di e-Project dan channel
saya di