ESP32重要库示例详解(一):EEPROM之Preferences库

1. 了解EEPROM

在嵌入式系统开发中,断电后晚能存储少量数据是常见需求。EEPROM(Electrically Erasable Programmable Read-Only Memory)是一种非易失性存储器,即使断电数据也不会丢失。ESP32的EEPROM模拟功能利用闪存空间,方便地模拟传统EEPROM,提供安全、高效的存储方案。需要注意的是,EEPROM 具有一定的擦写寿命限制,在使用时需合理规划以避免过度擦写导致的寿命问题。在这里插入图片描述

1.1 ESP32 的 EEPROM 与传统的 EEPROM 有以下一些区别:

ESP32 的 EEPROM:

集成在芯片内部:作为 ESP32 微控制器的一部分,使用较为方便,无需额外的硬件。
特定的编程接口:ESP32 有其专门的库和编程方式来操作内部的 EEPROM。

传统 EEPROM:

通常是独立的芯片:需要通过特定的引脚与其他电路连接。
容量选择更广泛:可能有多种不同容量规格可供选择,更具灵活性。
可能在一些特定应用场景中更具针对性,例如对容量、读写速度等有更高要求时。
ESP32平台提供了一个内置的EEPROM模拟功能,通过Preferences库,我们可以方便地进行数据的读写。特别的强调地是,当你在Arduino IDE中配置为ESP32开发板时,Preferences库已经默认包含,无需额外导入。

2. Preferences示例

以下是一个简单的示例,演示如何利用Preferences库记录设备的启动次数:

#include <Arduino.h>/*启动计数器示例,利用Preferences库。此示例展示了如何使用该库记录设备启动次数。
*/void setup()
{Serial.begin(115200);Serial.println();Preferences preferences;preferences.begin("my-app", false); // 使用“my-app”命名空间,以防止键名冲突// 可以清除整个命名空间或删除特定键// preferences.clear();// preferences.remove("counter");unsigned int counter = preferences.getUInt("counter", 0); // 获取计数器值,不存在则设为0counter++;Serial.printf("Current counter value: %u\n", counter);preferences.putUInt("counter", counter);preferences.end();Serial.println("Restarting in 10 seconds...");delay(10000);ESP.restart();
}void loop() {}

这段代码展示了如何在ESP32上利用Preferences库存储和读取数据。每次设备启动时,它会检查并增加"counter"的值,然后保存。

3. Preferences库的优势

  • 简便的API:使用Preferences库,数据读写操作就像操作字典一样简单。
  • 键值对存储:以键值对形式存储数据,便于管理和查找。
  • 命名空间:通过命名空间避免键名冲突,允许多个功能共享存储空间。
  • 自动类型处理:支持多种数据类型,如整型、字符串,无需手动处理序列化和反序列化。

4. 使用注意事项

  • 键名长度限制:键名长度限制为15个字符,如示例中的"counter"键。
  • 清除数据:可使用clear()清除整个命名空间,或用remove()删除特定键。

5. 示例解析

此示例演示了如何用Preferences库追踪设备启动次数:

  • setup()函数中,begin()以只读模式(false)开启"my-app"命名空间。注意不要把参数写为true.
  • getUInt()检索或初始化"counter"键的值,不存在则设为0。
  • 加1并更新计数器值。
  • 输出当前计数器值。
  • putUInt()保存计数器值, end()关闭Preferences
  • 延迟10秒后重启ESP32。

loop()函数中没有其他操作,因为所有逻辑都在setup()中完成。

通过这个例子,我们看到了ESP32如何借助内置的Preferences库简化了EEPROM操作,使数据持久化变得更加直观和高效。

6. 清除命名空间的操作

当将前面的代码烧录到ESP32后,你会发现无论你断电,还是重新烧录上述代码,counter的值都会一起累加。这个counter所在的命名空间会一直占用EEPROM空间,如何清楚除?请用以下代码清除

#include <Preferences.h>void setup() {Serial.begin(115200);delay(1000); // 等待串口初始化完成// 开启命名空间,这里以"my-app"为例Preferences preferences;preferences.begin("my-app", false);// 清除该命名空间下的所有数据preferences.clear();// 关闭命名空间preferences.end();Serial.println("Preferences namespace 'my-app' has been cleared.");// 其他setup代码...
}void loop() {// 主循环中无需操作
}

再重新烧录前面的重启次数统计的代码,counter的内容就会重新从零开始。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/10249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动硬盘加了PD充电口给设备供电:未来存储与供电的完美结合

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 一、引言 随着科技的飞速发展&#xff0c;电子设备在人们的日常生活中扮演着越来越重要的角色。与此同时&#xff0c;设备间的互联互通和供电方式的便捷性也成为了用户关注的焦点。移动硬盘&#xff0c;作…

Node.js安装与配置环境 v20.13.1(LTS)

1 下载 Node.js — Run JavaScript Everywhere LTS -- long-term support&#xff0c;长期维护版本 如果要下载其他版本在download里选择下载 2 安装 一路点击next&#xff0c;默认安装路径C:\Program Files\nodejs 3 环境变量配置 1&#xff09;Path环境变量增加nodejs安装…

Prometheus 监控平台组件深度讲解

Prometheus 的重要性和流行度已经无需多言。直入主题&#xff0c;本文对 Prometheus 监控平台的各个组件做深度讲解&#xff0c;希望能帮助读者更好地理解 Prometheus。 监控系统的核心逻辑 对于一套监控系统而言&#xff0c;核心就是采集数据并存储&#xff0c;然后做告警判…

Qt模型视图代理之QTableView应用的简单介绍

往期回顾 Qt绘图与图形视图之绘制带三角形箭头的窗口的简单介绍-CSDN博客 Qt绘图与图形视图之Graphics View坐标系的简单介绍-CSDN博客 Qt模型视图代理之MVD(模型-视图-代理)概念的简单介绍-CSDN博客 Qt模型视图代理之QTableView应用的简单介绍 一、最终效果 二、设计思路 这里…

数据结构——快速排序

基本思想&#xff1a; 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff0c;其基本思想为&#xff1a;任取待排序元素序列中的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&#xff0c;…

IT服务台的优势

我们谈谈IT服务台的一些好处&#xff0c;以更好地了解其重要性。IT 服务台为所有利益相关者&#xff08;技术人员和最终用户&#xff09;提供服务带来了效率。例如&#xff0c;三层 IT 服务台可以在第 0 层拥有自助服务门户&#xff0c;在第 1、2 和 3 层拥有技术人员&#xff…

1_1. Linux简介

1_1. Linux简介 文章目录 1_1. Linux简介1. 我们用linux来干嘛2. 计算机组成3. 操作系统4. Linux哲学思想5. Linux目录6. Linux分区类型 1. 我们用linux来干嘛 1. 大家都知道linux是一个操作系统&#xff0c;它是一个基础的软件&#xff0c;操作系统是硬件与应用程序的中间层。…

发布GPT-5的方式可能会与以往不同;开源vocode使用 AI 自动拨打电话;开源gpt智能对话客服工具;AI自动写提示词

✨ 1: vocode 用AI通过声音与用户进行实时交流 Vocode是一个旨在帮助开发者快速构建基于声音的大型语言模型&#xff08;LLM&#xff09;应用程序的开源库。简单来说&#xff0c;如果你想要开发一个能够通过声音与用户进行实时交流的应用&#xff0c;比如电话机器人、语音助手…

weditor安装的时候产生的问题

先放出来github的地址https://github.com/alibaba/web-editor&#xff0c;这个上面给了两种安装方式一种是&#xff1a; pip3 install -U weditor 这种方式会报错误&#xff0c; 具体原因我也不知道。那就采用第二种方式 git clone https://github.com/openatx/weditor pip3…

mysql执行流程

MySQL 架构与SQL执行流程 MySQL主要而分为server层和存储引擎层两部分 Server 层包括连接器、查询缓存、分析器、优化器、执行器等&#xff0c;涵盖 MySQL 的大多数核心服务功能&#xff0c;以及所有的内置函数&#xff08;如日期、时间、数学和加密函数等&#xff09;&#…

AI宝库:全球精选AI工具网站一网打尽,创新智慧触手可及

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 精选专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 探秘AI之巅&#xff0c;一键解锁未来工具&#xff01;立即点击&#xff0c;开启智能新纪元&#…

天猫最热销的三款随身WiFi,哪一款直播最好用?2024公认最好的随身WiFi,天猫上的随身wifi是正规产品吗

近期有小伙伴问我&#xff1a;“小编、小编我要当户外博主了&#xff0c;想买一个随身WiFi&#xff0c;但是天猫榜单前三的随身WiFi自己都没有听说过&#xff0c;到底入手哪个比较好&#xff1f;”三款随身WiFi呢&#xff0c;分别是格行随身WiFi、迅优随身WiFi、小米随身WiFi&a…

2024年电工杯数学建模B题思路 中国电机工程学会杯建模思路分析

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

6 7 8 9 11 12 15 17 18 20 22cm散热风扇防护网风扇金属网罩

品牌&#xff1a;威驰 颜色分类&#xff1a;60mm/6cm金属网,80mm/8cm金属网,92mm/9.2cm金属网,110mm/11cm金属网,120mm/12cm金属网,150mm/15cm金属网,172mm/17.2cm金属网,200mm/20cm金属网,280mm/28cm金属网 1产品参数&#xff0c;防护网罩60 80 90 110 120 125 145 150 180…

Python专题:八、列表(2)

Python的内置数据类型——列表 定义一个列表a&#xff0c;直接遍历&#xff0c;列表元素 for in循环&#xff0c;通过索引遍历列表 range&#xff08;参数一&#xff0c;参数二&#xff09; range&#xff08;len(a)&#xff09;range(0,len(a)) in 关键字判断元素是否在列表…

Debian12 Linux lsof 查询端口 并杀进程 sh文件编写过程记录

目录 一、需求描述 二、需求处理思路 1、根据关键字查询进程号 2、根据端口查询进程号 3、根据进程号杀进程 三、编写shell 脚本 总结 一、需求描述 在linux环境上&#xff0c;已知某个进程的运行关键字以及运行端口&#xff0c;要求根据已知信息查杀对应进程。要求编写…

Codigger:Vim的革新者,提升开发体验和功能性

深知Vim在编程和文本编辑领域的卓越地位&#xff0c;因此&#xff0c;在设计和开发过程中&#xff0c;Codigger始终将保留Vim的核心功能和高度定制能力作为首要任务。然而&#xff0c;Vim的复杂性和高度定制性也让很多新用户望而却步。为了降低这种使用门槛&#xff0c;Codigge…

Python起风了钢琴曲

写在前面 那年夏天&#xff0c;有《纸短情长》&#xff0c;有《稻香》&#xff0c;有《可不可以》&#xff0c;有《体面》&#xff0c;还有《起风了》……本期小编给大家分享Python弹奏的《起风了》钢琴曲&#xff0c;一起来看看吧&#xff01; 《起风了》 《起风了》是一首深…

【工具篇】-Powershell

什么是powershell&#xff1f; Windows PowerShell 是一种命令行外壳程序和脚本环境&#xff0c;使命令行用户和脚本编写者可以利用 .NET Framework 的强大功能。本文来介绍一下它的打开方法和常用的命令 什么是“.NET”&#xff1f; 什么是".NET"&#xff1f;htt…

2. 感知机算法和简单 Python 实现

目录 1. 感知机介绍 1.1 背景 1.2 定义 1.2.1 权重 1.2.2 阈值 1.2.3 偏置 1.3 逻辑处理&#xff1a;与门、非门、或门 2. 感知机实现 2.1 与门的 Python 实现 2.2 非门的 Python 实现 2.3 或门的 Python 实现 1. 感知机介绍 1.1 背景 感知机1957年由 Rosenblatt 提…