EEPROM ESP32/ESP8266 - Code

Home » Arduino » EEPROM ESP32/ESP8266 EEPROM ESP32/ESP8266

ESP32 Flash Memory – Store Permanent Data (Write and Read)

Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách lưu trữ và đọc các giá trị từ bộ nhớ flash ESP32 bằng Arduino IDE. Dữ liệu được lưu trong bộ nhớ flash vẫn ở đó ngay cả khi ESP32 đặt lại hoặc khi nguồn điện bị ngắt. Để làm ví dụ, chúng tôi sẽ chỉ cho bạn cách lưu trạng thái GPIO cuối cùng.ESP32 Flash MemoryTrước khi tiếp tục với hướng dẫn này, bạn nên cài đặt tiện ích bổ sung ESP32 trong IDE Arduino của mình. Thực hiện theo một trong các hướng dẫn sau để cài đặt ESP32 trên Arduino IDE, nếu bạn chưa cài đặt.
  • Cài đặt ESP32 trong Arduino IDE (Hướng dẫn dành cho Windows)
  • Cài đặt ESP32 trong Arduino IDE (hướng dẫn Mac và Linux)

Flash Memory

Dữ liệu được lưu trong bộ nhớ flash vẫn ở đó ngay cả khi ESP32 đặt lại hoặc khi nguồn điện bị ngắt. Bộ nhớ flash rất giống với EEPROM. Cả hai đều là những bộ nhớ không thay đổi.Lưu dữ liệu trong bộ nhớ flash đặc biệt hữu ích để:
  • Nhớ trạng thái cuối cùng của một biến;
  • Lưu các thiết lập;
  • Lưu số lần một thiết bị đã được kích hoạt;
  • Hoặc bất kỳ loại dữ liệu nào khác mà bạn cần lưu vĩnh viễn.
Một hạn chế với bộ nhớ flash là số lần bạn có thể ghi dữ liệu vào nó. Dữ liệu có thể được đọc từ flash bao nhiêu lần tùy thích, nhưng hầu hết các thiết bị được thiết kế cho khoảng 100.000 đến 1.000.000 hoạt động ghi.

EEPROM Library

Để đọc và ghi từ bộ nhớ flash ESP32 bằng Arduino IDE, chúng tôi sẽ sử dụng thư viện EEPROM. Việc sử dụng thư viện này với ESP32 rất giống với việc sử dụng nó với Arduino. Vì vậy, nếu bạn đã sử dụng Arduino EEPROM trước đây, thì điều này không khác nhiều.Vì vậy, chúng tôi cũng khuyên bạn nên xem qua bài viết của chúng tôi về Arduino EEPROM.Với ESP32 và thư viện EEPROM, bạn có thể sử dụng tối đa 512 byte trong bộ nhớ flash. Điều này có nghĩa là bạn có 512 địa chỉ khác nhau và bạn có thể lưu giá trị từ 0 đến 255 ở mỗi vị trí địa chỉ.EEPROM ESP32/ESP8266

Write

Để ghi dữ liệu vào bộ nhớ flash, bạn sử dụng hàm EEPROM.write () giá trị truyền vào là địa chỉ nơi bạn muốn lưu dữ liệu và giá trị (biến byte) bạn muốn lưu:EEPROM.write(address, value);Ví dụ: để lưusố 9 trên địa chỉ 0, bạn sẽ có:EEPROM.write(0,9);Để lưu dữ liệu lại bạn dùng lệnh comit() sau khi đã write xong;EEPROM.commit();

Read

Để đọc một byte từ bộ nhớ flash, bạn sử dụng hàm EEPROM.read (). Hàm này ltruyền vào địa chỉ cần đọc dữ liệu và nó sẽ trả về 1 byte dữ liệu.
EEPROM.read(address);Ví dụ, để đọc 1 byte được lưu trữ trước đó trong địa chỉ 0, hãy sử dụng:EEPROM.read(0);

Remember Last GPIO State

Để chỉ cho bạn cách lưu dữ liệu trong bộ nhớ flash ESP32, chúng tôi sẽ lưu trạng thái cuối cùng của đầu ra, trong trường hợp này là đèn LED. Ví dụ, hãy tưởng tượng tình huống sau: Bạn đang điều khiển đèn bằng ESP32 Bạn bật đèn lên ESP32 đột ngột mất điện. Khi có nguồn trở lại, đèn vẫn tắt - vì đèn không giữ trạng thái cuối cùng
EEPROM ESP32/ESP8266

Schematic

Nối nút nhấn và đèn LED vào ESP32 như thể hiện trong sơ đồ sau.
EEPROM ESP32/ESP8266

Code

// include library to read and write from flash memory #include <EEPROM.h> // define the number of bytes you want to access #define EEPROM_SIZE 1 // constants won't change. They're used here to set pin numbers: const int buttonPin = 4; // the number of the pushbutton pin const int ledPin = 16; // the number of the LED pin // Variables will change: int ledState = HIGH; // the current state of the output pin int buttonState; // the current reading from the input pin int lastButtonState = LOW; // the previous reading from the input pin // the following variables are unsigned longs because the time, measured in // milliseconds, will quickly become a bigger number than can be stored in an int. unsigned long lastDebounceTime = 0; // the last time the output pin was toggled unsigned long debounceDelay = 50; // the debounce time; increase if the output flickers void setup() { Serial.begin(115200); // initialize EEPROM with predefined size EEPROM.begin(EEPROM_SIZE); pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); // read the last LED state from flash memory ledState = EEPROM.read(0); // set the LED to the last stored state digitalWrite(ledPin, ledState); } void loop() { // read the state of the switch into a local variable: int reading = digitalRead(buttonPin); // check to see if you just pressed the button // (i.e. the input went from LOW to HIGH), and you've waited long enough // since the last press to ignore any noise: // If the switch changed, due to noise or pressing: if (reading != lastButtonState) { // reset the debouncing timer lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { // whatever the reading is at, it's been there for longer than the debounce // delay, so take it as the actual current state: // if the button state has changed: if (reading != buttonState) { buttonState = reading; // only toggle the LED if the new button state is HIGH if (buttonState == HIGH) { ledState = !ledState; } } } // save the reading. Next time through the loop, it'll be the lastButtonState: lastButtonState = reading; // if the ledState variable is different from the current LED state if (digitalRead(ledPin)!= ledState) { Serial.println("State changed"); // change the LED state digitalWrite(ledPin, ledState); // save the LED state in flash memory EEPROM.write(0, ledState); EEPROM.commit(); Serial.println("State saved in flash memory"); } }

Chúc các bạn thành công!

Mời bạn xem thêm:

No comments:

Post a Comment

Newer Post Older Post Home Subscribe to: Post Comments (Atom)

Khóa học miễn phí

Học lập trình STM32 với Visual Code

Bài đăng mới

[Lập trình RTL8720] #2: Interupt GPIO | Ngắt ngoài

Bài đăng phổ biến

  • Unlock password PLC Mitsubishi FX Series | Read password PLC FX   This is Software Crack PLC FX Series (FX0N, FX1N, FX2N, FX3S, FX3G, FX3U) Note: Only Unlock Password have 8digits. Link Software: Download...
  • Điều khiển PID trên Siemens PLC sử dụng khối PID Compact PID là gì?  Về thực tế định nghĩa của PID và ứng dụng của nó trong các hệ thống thì đã có rất nhiều bài viết nói về nó. Ở đây Coder96 sẽ nói...
  • EEPROM ESP32/ESP8266   ESP32 Flash Memory – Store Permanent Data (Write and Read) Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách lưu trữ và đọc các giá trị ...
  • ESP32 Repeater Wifi - Kích sóng Wifi bằng ESP32   Cách đơn giản nhất để tự mình làm một kích sóng wifi bằng chính module lập trình ESP32 mà ai cũng có thể làm được. Tất cả chỉ trong vài cú...
  • C# With PLC FX3U | Giao tiếp với FX PLC bằng thư viện Melsec.dll của HTT Offical   C# là một ngôn ngữ khá mạnh, được sử dụng khá rộng rãi trong việc lập trình phần mềm. Với việc sử dụng những phần mềm SCADA của các hãng n...

Translate

Từ khóa » Cách Sử Dụng Eeprom Trong Arduino