EEPROM (Electrically Erasable Programmable Read-Only Memory) là một loại bộ nhớ không khả biến (non-volatile), cho phép lưu trữ dữ liệu ngay cả khi thiết bị bị tắt nguồn. Trong các hệ vi điều khiển như Arduino, ESP32, và ESP8266, EEPROM thường được sử dụng để lưu trữ các tham số cấu hình hoặc dữ liệu quan trọng như mật khẩu Wi-Fi, giá trị cài đặt của thiết bị, v.v.
EEPROM trong Arduino
Trong Arduino, EEPROM là bộ nhớ tích hợp, được truy cập thông qua thư viện <EEPROM.h>. Dung lượng EEPROM tùy thuộc vào hộ vi Arduino bạn đang sử dụng. Ví dụ:
Arduino Uno: 1 KB
Arduino Mega: 4 KB
Các lệnh cơ bản:
EEPROM.read(address): Đọc dữ liệu từ địa chỉ.
EEPROM.write(address, value): Ghi giá trị vào địa chỉ.
EEPROM.update(address, value): Chỉ ghi nếu giá trị mới khác giá trị cũ, giúp kéo dài tuổi thọ EEPROM.
Ví dụ:
#include <EEPROM.h>
void setup() {
Serial.begin(9600);
// Ghi dữ liệu
EEPROM.write(0, 123);
// Đọc dữ liệu
int value = EEPROM.read(0);
Serial.println(value);
}
void loop() {
}
EEPROM trong ESP32
ESP32 không có EEPROM tích hợp như Arduino, nhưng nó có thể giả lập EEPROM bằng Flash. Thư viện <EEPROM.h> trên ESP32 cũng có giao diện giống như Arduino.
Khác biệt quan trọng: Trước khi ghi dữ liệu, bạn phải gọi lệnh EEPROM.begin(size), trong đó size là dung lượng cần định nghĩa (tối đa 4096 byte).
Sau khi ghi, bạn cần gọi lệnh EEPROM.commit() để dữ liệu thực sự được ghi vào Flash.
Ví dụ:
#include <EEPROM.h>
void setup() {
Serial.begin(9600);
// Ghi dữ liệu
EEPROM.write(0, 123);
// Đọc dữ liệu
int value = EEPROM.read(0);
Serial.println(value);
}
void loop() {
}
EEPROM trong ESP8266
Giống như ESP32, ESP8266 không có EEPROM tích hợp và sử dụng Flash để giả lập. Thư viện <EEPROM.h> trên ESP8266 cung cấp các hàm tương tự ESP32.
Dung lượng EEPROM tối đa là 4096 byte, và bạn phải sử dụng EEPROM.begin(size) trước khi truy cập.
Ví dụ:
#include <EEPROM.h>
void setup() {
Serial.begin(9600);
EEPROM.begin(512); // Khởi tạo 512 byte EEPROM
// Ghi dữ liệu
EEPROM.write(0, 99);
EEPROM.commit();
// Đọc dữ liệu
int value = EEPROM.read(0);
Serial.println(value);
}
void loop() {
}
Lưu ý khi sử dụng EEPROM
Giới hạn chu kỳ ghi: EEPROM chịu được số chu kỳ ghi-hủy giới hạn (đường thường 100.000 lần). Sử dụng EEPROM.update thay vì EEPROM.write để giảm sự hao mòn.
Dung lượng EEPROM: Lựa chọn dung lượng phù hợp với dự án để tránh lãng phí Flash.
Ghi/commit: Nhớ commit trong ESP32 và ESP8266 để đảm bảo dữ liệu
EEPROM là một công cụ mạnh mẽ để lưu trữ dữ liệu trên Arduino, ESP32 và ESP8266. Tuy nhiên, để sử dụng hiệu quả, bạn cần hiểu rõ cách hoạt động và các giới hạn của nó. Hi vọng bài viết này đã cung cấp thông tin hữu ích để bạn bắt đầu tích hợp EEPROM vào các dự án của mình!