如何使用arduino eeprom在电源周期之间保存数据

你知道Arduino在关闭时可以存储数据吗?我在说EEPROM,所以请跟我一起,我教你如何读写。...

你知道Arduino关闭后可以存储数据吗?不是存储在闪存中的草图。我说的是EEPROM中的可变数据。加入我,我向你展示如何读写它,以及它能为你的项目做些什么。

arduino-eeprom-save-data

如果你是新来Arduino的,一定要看看我们的初学者指南。

什么是电可擦可编程只读存储器(eeprom)?

EEPROM代表电可擦除可编程只读存储器。这是一种非易失性存储器。如果你不明白这意味着什么,别担心。它只是简单地存储数据,即使在断电的情况下(不像RAM,它需要电力来保留任何数据)。

EEPROM example shot

EEPROM内置于无数的处理器中,例如矩阵生成器Pi HAT中使用的现场可编程门阵列(FPGA)。所有Arduinos都提供EEPROM,但容量因型号而异。请务必查看我们的购买指南,了解每块板的更多详情。

它是如何工作的?

EEPROM是电擦除和编程使用福勒诺德海姆隧道。你不需要知道技术细节就可以使用它。基本前提是电是用来改变二进制数据(什么是二进制的)。它可以通过电子方式读取、擦除和重写。

幸运的是,Arduino语言使更改数据变得很容易,所有这些都不需要计算机科学学位。

EEPROM Close Up

预期寿命

虽然在Arduino中使用EEPROM很容易,但它的使用寿命有限。EEPROM被指定处理100000个读/擦除周期。这意味着在EEPROM变得不稳定之前,您可以写入然后擦除/重新写入数据100000次。实际上,Atmel(Arduino“芯片”的**商)半导体可以处理更高或更低的周期数,这取决于每个处理器的公差。

EEPROM Close Up

一旦一个位置被多次写入和擦除,它就会变得不可靠。它可能不会返回正确的数据,或从相邻位返回值。

这听起来像是写了很多东西,但是如果以编程方式读写(例如在循环中),很容易达到这个极限。读取数据不会降低硅的质量,只有写入才能。您可以读取数据从EEPROM的,你喜欢没有恐惧!

需要注意的是,这个限制适用于每个内存位置。您的Arduino在EEPROM中可能有1000个或更多的可用内存位置,因此如果您对一个位置写入太多次,则只会影响该位置,而不会影响其他任何位置。稍后我将讨论磨损均衡,它可以通过均匀分布数据来减少EEPROM的磨损——SSD可以利用这一点。

它有什么用?

EEPROM对于Arduino项目非常有用。因为即使断电,它也能记住数据,所以可以存储Arduino的状态。也许你可以建造一个激光炮塔,它可以记住自己的位置或者剩余的“**”数量。您可以使用它来控制设备,并记录设备被激活的次数。

EEPROM最适合设置或高分。如果您想定期写入复杂数据,可以考虑使用以太网屏蔽(内置SD插槽)或Raspberry Pi。

EEPROM Close Up

读写

现在理论已经过时了,让我们来看看如何读写一些数据!首先,包括库(这是ArduinoIDE附带的):

#include <EEPROM.h>

现在写一些数据:

EEPROM.write(0, 12);

这将数字12写入EEPROM位置0。每次写入需要3.3毫秒(ms,1000ms=1秒)。注意你不能写字母(char),只能写从0到255的数字。这就是为什么EEPROM是理想的设置或高分,但不是那么好的球员姓名或文字。可以使用这种方法存储文本(可以将字母表中的每个字母映射到一个数字),但是需要有多个内存位置——每个字母对应一个位置。

以下是您如何读取这些数据的:

EEPROM.read(0);

零是您以前写过的地址。如果您以前没有写入地址,它将返回最大值(255)。

有一些稍微有用的方法可用。假设要存储小数点或字符串:

EEPROM.put(2,"12.67");

这会将数据写入多个位置——这很容易自己编写,但也很方便。您仍然需要跟踪它写入了多少个位置,这样您就不会意外地覆盖数据了!必须使用get方法再次检索此数据:

float f = 0.00f;EEPROM.get(2, f);

get中的值存储到float f变量中。注意这是如何用0.00f作为值初始化的。f让编译器知道您可能需要在这个变量中存储大量的数据,因此它在编译期间设置了一些额外的配置。

Arduino网站上的EEPROM文档有更多的例子。

磨损整平

磨损均衡是一种减少EEPROM磨损、提高EEPROM使用寿命的技术。如果你只是在做一个小项目,你可能不需要担心这个。

EEPROM Close Up

要保持EEPROM的寿命,最简单的方法就是将写操作限制在特定的位置。您可以先读取地址,如果要写入的值已经存在,则无需再次写入(请记住,读取数据不会造成伤害)。下面是您将如何做到这一点:

int safeWrite(int data, address) { if(EEPROM.read(address) != data) { EEPROM.write(address, data); }}

这是一个相当简单的代码位,但它只适用于整数!与其重新发明轮子,不如使用Arduino EEPROM库中内置的功能:

EEPROM.update(address, val);

这个方法与写入方法具有完全相同的签名,尽管它可能会大大减少所需的写入次数!

如果您需要写入大量数据,并且担心硅片磨损,则可以跟踪您的写入次数,尽管这样会使用更多数据。以下是伪代码的粗略实现:

var address = 0var writeCount = 0if(writeCount > 75,000) writeCount = 0 address += 1EEPROM.write(address, data)

您需要将地址和writeCount存储在EEPROM中(writeCount需要在地址位置之间拆分)。大多数情况下,这一级别的保护是没有必要的。Arduinos也很便宜,所以您可能会发现购买备份更容易!

你现在应该知道足够的知识来做一些很棒的项目。如果你做的很酷,就告诉我们!你能认出照片中所有的设备吗?请在下面给我们留言!

  • 发表于 2021-03-16 14:09
  • 阅读 ( 332 )
  • 分类:IT

你可能感兴趣的文章

作为一个arduino初学者不要犯的10个错误

Arduino板,以及随之而来的许多价格合理的微控制器,永远改变了人们的电子爱好。曾经是超级极客的领域,拥有广泛的电子和计算知识,现在所有人都可以使用。 ...

  • 发布于 2021-03-13 03:20
  • 阅读 ( 247 )

带arduino和rfid的diy智能锁

...甚至连碰都没碰就打开了。听起来很酷?今天我们将使用Arduino作为主干和一些便宜的组件来构建一个简单的基于RFID的智能锁。 ...

  • 发布于 2021-03-15 03:29
  • 阅读 ( 261 )

将led灯带连接到arduino的最终指南

...最常见的LED产品是LED带。在本文中,我们将介绍如何使用Arduino设置两种最常见的类型。这些项目非常简单,即使你是一个初学者与Arduino或DIY电子,你将能够做到这一点。 ...

  • 发布于 2021-03-17 18:44
  • 阅读 ( 373 )

分析笔记本电脑电池健康状况的6个最佳工具

...用图。 观察与设计容量相比,满载容量是如何逐渐减小的。注意任何差异。 从购买笔记本电脑开始,比较充满电时的电池寿命和设计容量。 检查电池的使用情况和持续时间。以及您的...

  • 发布于 2021-03-18 07:49
  • 阅读 ( 211 )

5个arduino省电小贴士,让您的手机连续运行数天

Arduino板改变了DIY技术的面貌。简单的项目,如创建微型Arduino交通灯是完美的教学基础电子和编程初学者。 ...

  • 发布于 2021-03-24 09:53
  • 阅读 ( 220 )

如何用游戏控制器和arduino控制机器人

Arduinos和类似的兼容板是各地DIY修补匠的首选设备之一。无论你是一个刚开始使用Arduino的初学者,还是一个已经在你的生活中使用Arduino的人,它们都为无数令人敬畏的项目提供了一个平台。 ...

  • 发布于 2021-03-25 23:05
  • 阅读 ( 323 )

今天学习如何用这些命令编程arduino板

... 幸运的是,Arduino板使整个过程更加容易。一系列的板是可用的,所有可编程使用Arduino IDE和Arduino编码库。 ...

  • 发布于 2021-03-30 06:10
  • 阅读 ( 272 )

如何开始用arduino和其他人的代码制作自己的电子产品

...看。也许你能做得更好。也许是时候去看看阿杜伊诺了。Arduino这个词可能会让人联想到一个张大嘴巴的极客蜷缩在工作台上的形象,但它的简单性让它成为即使是最不懂电子技术的人进入电子领域的一个切入点。我们将概述Ardui...

  • 发布于 2021-05-27 05:57
  • 阅读 ( 192 )

可编程只读存储器(prom eprom)和电可擦可编程只读存储器(eeprom)的区别

PROM-EPROM和EEPROM的主要区别在于PROM只能编程一次,而EPROM可以用紫外光重新编程,EPROM可以用电荷重新编程。 ROM代表只读存储器,它存储启动计算机所需的指令。它是一种非易失性存储器。因此,即使没有连续的功率流,数据仍...

  • 发布于 2021-07-01 12:25
  • 阅读 ( 611 )

猛撞(ram)和只读存储器(rom)的区别

...机存取存储器 只读存储器 使用 猛撞允许计算机快速读取数据以运行应用程序。它允许阅读和写作。 只读存储器存储最初启动计算机所需的程序。它只允许阅读。 ...

  • 发布于 2021-07-04 17:04
  • 阅读 ( 409 )
cu971784
cu971784

0 篇文章