11、ESP32 Flash

1、Flash 作用

        Flash 与 EEPROM 类似,即使 ESP32 复位或断电,Flash 中保存的数据也不会丢失。

Flash 可以用于:

  • 记住变量的最后状态;
  • 保存设置;
  • 保存设备被激活的次数;
  • 或您需要永久保存的任何其他类型的数据。

2、Flash 读写

        Flash 中最多可以使用 512 字节,相当 512 个地址,可以在每个地址位置保存一个介于 0 到 255 之间的值。

         Flash 可以任意读取其数据,但会限制写入数据的次数,大多数设备大约 100,000 到 1,000,000 次写入。

Flash 库函数:

引入 Flash 库:#include <EEPROM.h>

Flash 初始化函数:

初始化 Flash:EEPROM.begin(size);

  • size:要访问的字节数

Flash 写入函数:

写入 Flash:EEPROM.write(address, value);

  • address:要保存数据的地址
  • value:要保存的值

保存更改:EEPROM.commit();

Flash 读取函数:

读取 Flash:EEPROM.read(address);

  • address:将要读取字节的地址

3、Coed

        案例:每次按下按键时都会更改 LED 状态,在 ESP32 复位或断电后,也能记住最后的 LED 状态(带有按键消抖)。

#include <Arduino.h>
#include <EEPROM.h>


#define EEPROM_SIZE 1       // 要访问的字节数

const int buttonPin = 4;    // button pin
const int ledPin = 2;       // LED pin

int ledState = HIGH;        // led 当前引脚状态
int buttonState;            // button 当前引脚状态
int lastButtonState = LOW;  // button 上次状态

unsigned long lastDebounceTime = 0;  // 最后一次切换输出引脚时间
unsigned long debounceDelay = 50;    // 防抖时间

void setup()
{
    Serial.begin(115200);

    EEPROM.begin(EEPROM_SIZE);

    pinMode(buttonPin, INPUT);
    pinMode(ledPin, OUTPUT);

    ledState = EEPROM.read(0);  // 读取上次引脚状态
    digitalWrite(ledPin, ledState);
}


void loop()
{
    int reading = digitalRead(buttonPin);       // 读取开关状态

    // 开关被按下,记录切换时间
    if (reading != lastButtonState)
    {
        lastDebounceTime = millis();
    }


    if ((millis() - lastDebounceTime) > debounceDelay)      // 防抖
    {
        // 按键按下,更新 led 状态
        if (reading != buttonState)
        {
            buttonState = reading;

            if (buttonState == HIGH)
            {
                ledState = !ledState;
            }
        }
    }
    lastButtonState = reading;


    // ledState 变量与当前 LED 状态不同
    if (digitalRead(ledPin) != ledState)
    {
        Serial.println("State changed");
        // change the LED state
        digitalWrite(ledPin, ledState); // 改变 led 状态
        EEPROM.write(0, ledState);      // 写入 led 状态
        EEPROM.commit();        // 更新
        Serial.println("State saved in flash memory");
    }
}
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: ESP32 FLASH读写是通过SPI接口进行的,可以使用ESP-IDF提供的SPI Master驱动程序来实现。在使用SPI Master驱动程序之前,需要先初始化SPI总线和SPI设备。然后,可以使用spi_device_transmit函数来发送和接收数据。在写入FLASH时,需要先擦除FLASH扇区,然后再写入数据。在读取FLASH时,可以直接从FLASH中读取数据。 ### 回答2: ESP32是一款强大的开发板,内置了丰富的存储空间,其中包括了FLASH存储器。FLASH存储器可以用来读取和写入数据。 在ESP32上进行FLASH的读写操作需要使用ESP-IDF框架提供的API函数。主要的函数有`spi_flash_read`和`spi_flash_write`。 `spi_flash_read`函数用于从FLASH存储器中读取数据。它需要指定要读取的地址和数据缓冲区的大小。可以通过指定偏移量和大小来实现读取某个特定范围内的数据。 `spi_flash_write`函数用于向FLASH存储器中写入数据。它需要指定要写入的地址和数据缓冲区的大小。需要注意的是,写入操作会擦除目标地址上的数据,因此确保在执行写入操作之前备份数据是非常重要的。 读取和写入的地址是以字节为单位的。在使用这些函数之前,需要对SPI Flash进行初始化,这可以通过在代码中调用`esp_flash_init`函数来实现。 除了读取和写入数据之外,还可以使用`spi_flash_erase_sector`函数来擦除一个扇区的数据。它需要指定要擦除的扇区的地址。需要注意的是,扇区的大小通常为4KB。 总结起来,ESP32FLASH存储器可以通过`spi_flash_read`和`spi_flash_write`函数进行读写操作,还可以使用`spi_flash_erase_sector`函数进行扇区擦除操作。在使用这些函数之前需要对SPI Flash进行初始化。通过这些API函数,我们可以方便地在ESP32上进行FLASH的读写操作。 ### 回答3: ESP32是一款集成式的芯片,它具备了内置的Flash存储器,用于存储程序和数据。Flash存储器被分为多个扇区,每个扇区都有自己的地址范围和大小。ESP32支持Flash读取数据以及将数据写入Flash的功能。 要从Flash中读取数据,我们通常需要先确定要读取的数据存储在哪个扇区中。然后,我们使用ESP32Flash读取命令,通过指定数据在该扇区中的偏移地址来读取数据。读取的数据可以存储在缓冲区中,用于后续的处理。 而要将数据写入Flash,则首先需要选择一个空闲的扇区来存储数据。然后,将要写入的数据存储在一个缓冲区中。最后,我们使用ESP32Flash编程命令,将缓冲区中的数据写入到选定的扇区中。 需要注意的是,写入Flash时会覆盖原有的数据。因此,在执行写入操作之前,我们应该先备份任何我们希望保留的数据。 除了基本的读写操作,ESP32还提供了其他一些功能,例如擦除整个Flash存储器或者擦除特定扇区。这些功能可以在需要时使用。 总之,ESP32Flash读写功能为我们提供了一种方便的方式来访问和存储数据。通过合理地利用这些功能,我们可以在ESP32上开发出各种应用,从简单的数据存储到复杂的程序存储。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无敌暴龙战士朵拉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值