Comment utiliser EEPROM Arduino pour enregistrer des données entre les cycles de puissance

Saviez-vous que l'Arduino peut stocker des données lorsqu'il est éteint? Je parle de l'EEPROM, alors rejoignez-moi comme je vous montre comment lire et écrire.

Saviez-vous que l'Arduino peut stocker des données lorsqu'il est éteint?  Je parle de l'EEPROM, alors rejoignez-moi comme je vous montre comment lire et écrire.
Publicité

Saviez-vous que l'Arduino peut stocker des données lorsqu'il est éteint? Pas l'esquisse stockée dans la mémoire flash. Je parle de données variables dans l'EEPROM. Rejoignez-moi en vous montrant comment lire et écrire, et ce qu'il peut faire pour vos projets.

Si vous débutez avec Arduino, consultez notre guide des débutants Premiers pas avec Arduino: Guide du débutant Premiers pas avec Arduino: Guide du débutant Arduino est une plate-forme de prototypage électronique open source basée sur du matériel flexible et facile à utiliser. et logiciel. Il est destiné aux artistes, designers, amateurs et toute personne intéressée par la création d'objets ou d'environnements interactifs. Lire la suite .

Qu'est-ce que l'EEPROM?

EEPROM signifie mémoire morte programmable électriquement effaçable . C'est un type de mémoire non volatile. Ne vous inquiétez pas si vous ne comprenez pas ce que cela veut dire. Il stocke simplement les données même avec la puissance supprimée (contrairement à RAM Un guide rapide et sale de la RAM: Ce que vous devez savoir Un guide rapide et sale de RAM: Ce que vous devez savoir La RAM est un composant crucial de chaque ordinateur, mais il peut Soyez confus pour comprendre si vous n'êtes pas un gourou de la technologie.Dans ce post, nous décomposons dans des termes faciles à comprendre.En savoir plus, qui a besoin d'électricité pour conserver toutes les données).

EEPROM exemple tir

EEPROM est construit dans une myriade de processeurs, tels que le FPGA (Matrix Creator Matrix Creator) pour Matrix Creator Matrix Creator pour Raspberry Pi Review Matrix Creator pour Raspberry Pi Review Le Matrix Creator est un couteau suisse pour votre Pi, avec 15 capteurs, une suite de protocoles de communication, un anneau de LED RVB, un réseau de microphones, et plus encore! Lire la suite Pi HAT. Tous les Arduinos ont l'EEPROM disponible, mais la capacité varie selon le modèle. Assurez-vous de jeter un coup d'œil à notre guide d'achat Arduino Guide d'achat: Quel conseil devriez-vous obtenir? Guide d'achat Arduino: Quel conseil devriez-vous obtenir? Il y a tellement de différents types de cartes Arduino là-bas, vous seriez pardonné d'être confus. Lequel devriez-vous acheter pour votre projet? Laissez-nous vous aider, avec ce guide d'achat Arduino! Lire la suite pour plus de détails sur chaque tableau.

Comment ça marche?

EEPROM est électriquement effacé et programmé en utilisant tunneling Fowler-Nordheim . Vous n'avez pas besoin de connaître les détails techniques pour pouvoir l'utiliser. La prémisse de base est que l'électricité est utilisée pour changer les données binaires (qu'est-ce que binaire Qu'est-ce que binaire?) [Technologie expliquée] Qu'est-ce que binaire? [Technologie expliquée] Étant donné que binaire est si fondamental à l'existence des ordinateurs, il semble étrange que nous n'avons jamais abordé le sujet auparavant - alors aujourd'hui je pensais que je donnerais un bref aperçu de ce binaire ... Lire la suite). Il peut être lu, effacé et réécrit électroniquement.

Heureusement, le langage Arduino facilite le changement de données, sans avoir besoin d'un diplôme en informatique.

EEPROM bouchent

Espérance de vie

Bien qu'il soit facile d'utiliser EEPROM dans l'Arduino, il a une durée de vie limitée. EEPROM est spécifié pour gérer 100 000 cycles de lecture / effacement. Cela signifie que vous pouvez écrire, puis effacer / réécrire des données 100 000 fois avant que l'EEPROM ne devienne instable. En réalité, Atmel (les fabricants des semi-conducteurs Arduino "Chip") peut gérer un nombre de cycles plus ou moins élevé, en fonction des tolérances de chaque processeur.

EEPROM bouchent

Une fois qu'un emplacement a été écrit et effacé trop de fois, il peut commencer à devenir peu fiable. Il peut ne pas retourner les données correctes ou renvoyer la valeur d'un bit voisin.

Cela peut sembler beaucoup d'écritures, mais il peut être facile d'atteindre cette limite si vous lisez et écrivez par programmation (en boucle, par exemple). La lecture des données ne dégrade pas le silicium, seule l'écriture le fait . Vous pouvez lire les données de l'EEPROM autant que vous le souhaitez sans crainte!

Il est important de noter que cette limite s'applique à chaque emplacement de mémoire. Votre Arduino peut avoir 1000 emplacements de mémoire ou plus disponibles dans l'EEPROM, donc si vous écrivez trop de fois à un emplacement, c'est uniquement cet emplacement qui est impacté, et pas n'importe lequel des autres. Plus tard, je parlerai du niveau d'usure, qui peut réduire l'usure de l'EEPROM en distribuant les données de façon égale - quelque chose que les SSDs ont une durée de vie limitée à cause de leur durée de vie. cycles (bien que cette durée de vie soit beaucoup plus longue que vous ne le pensez). Voici comment vous pouvez estimer à quel point vous êtes proche de la fin. Lire la suite faire usage de.

À quoi ça sert?

EEPROM est incroyablement utile pour vos projets Arduino. Comme il se souvient des données même lorsque l'alimentation est coupée, vous pouvez stocker l'état de l'Arduino. Peut-être que vous pourriez construire une tourelle laser Pew Pew! Comment construire une tourelle laser avec un Pew Arduino Pew! Comment construire une tourelle laser avec un Arduino Êtes-vous ennuyé? Autant construire une tourelle laser. Lire plus qui se souvient de sa position ou combien de "munitions" reste. Vous pouvez l'utiliser pour contrôler vos appareils Appliances de contrôle d'un Arduino: Le début des appareils de contrôle de domotique Depuis un Arduino: Le début de la domotique La dernière fois, je vous ai montré quelques façons de rendre vos projets Arduino contrôlés par SiriProxy, OS Les éléments explicables intégrés de X, et certains scripts d'Automator, ou même une puce matérielle dédiée à la reconnaissance vocale. Je ... Lire la suite, et connectez-vous combien de fois votre appareil a été activé.

EEPROM est le mieux adapté pour les choses comme les paramètres ou les meilleurs scores. Si vous voulez écrire régulièrement des données complexes, pensez peut-être à un bouclier Ethernet Donnez à votre projet Arduino son propre mini-serveur Web, avec un blindage Ethernet Donnez à votre projet Arduino son propre mini-serveur Web, avec un blindage Ethernet pour configurer un système de contrôle Internet pour votre Arduino - mais il devait rester connecté à un ordinateur via USB afin de maintenir la connexion Internet .... Lire la suite (avec slot SD intégré) ou un Raspberry Pi Raspberry Pi: Le Didacticiel non officiel Raspberry Pi: le didacticiel non officiel Si vous êtes un propriétaire Pi actuel qui veut en savoir plus ou un propriétaire potentiel de ce périphérique de taille de carte de crédit, ce n'est pas un guide que vous voulez manquer. Lire la suite .

EEPROM bouchent

Lire et écrire

Maintenant que la théorie est en route, regardons comment lire et écrire des données! Tout d'abord, incluez la bibliothèque (fournie avec l'IDE Arduino):

#include 

Maintenant écrivez quelques données:

 EEPROM.write(0, 12); 

Ceci écrit le numéro 12 dans l'emplacement EEPROM 0 . Chaque écriture prend 3, 3 millisecondes ( ms, 1000ms = 1 seconde). Notez comment vous ne pouvez pas écrire des lettres ( char ), seuls les nombres de zéro à 255 sont autorisés. C'est pourquoi EEPROM est idéal pour les réglages ou les scores élevés, mais pas si bon pour les noms de joueurs ou de mots. Il est possible de stocker du texte en utilisant cette méthode (vous pouvez mapper chaque lettre de l'alphabet à un nombre), mais vous aurez besoin de plusieurs emplacements de mémoire - un emplacement pour chaque lettre.

Voici comment vous lisez ces données:

 EEPROM.read(0); 

Zéro est l'adresse que vous avez écrite précédemment. Si vous n'avez pas encore écrit à une adresse, elle renvoie la valeur maximale ( 255 ).

Il existe des méthodes légèrement plus utiles. Supposons que vous vouliez stocker une décimale ou une chaîne:

 EEPROM.put(2, "12.67"); 

Cela écrit les données à plusieurs endroits - quelque chose qui serait facile à écrire soi-même, mais néanmoins utile. Vous aurez toujours besoin de garder une trace du nombre d'emplacements auxquels vous avez écrit, de sorte que vous n'écrasez pas accidentellement vos données! Vous devez utiliser la méthode get pour récupérer ces données à nouveau:

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

La valeur de get est stockée dans la variable float f . Notez comment cela est initialisé avec 0.00f comme valeur. Le f permet au compilateur de savoir que vous pourriez vouloir stocker un grand nombre dans cette variable, ainsi il met en place des configurations supplémentaires lors de la compilation.

La documentation de l'EEPROM sur le site Web Arduino a beaucoup plus d'exemples.

Nivellement de l'usure

Le nivellement d'usure est une technique utilisée pour réduire l'usure et augmenter la durée de vie de l'EEPROM. Si vous ne travaillez que sur un petit projet, vous n'aurez peut-être pas à vous en soucier.

EEPROM bouchent

La chose la plus simple que vous pouvez faire pour préserver la vie de l'EEPROM est de limiter vos écritures à un endroit particulier. Vous pouvez le faire en lisant d'abord l'adresse, et si la valeur que vous voulez écrire est déjà présente, il n'est pas nécessaire de l'écrire à nouveau (rappelez-vous, la lecture des données ne fait pas de mal). Voici comment vous feriez cela:

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

C'est un peu un code simple, mais cela ne fonctionne que pour les entiers! Au lieu de réinventer la roue, utilisez la fonction intégrée à la bibliothèque Arduino EEPROM:

 EEPROM.update(address, val); 

Cette méthode a exactement la même signature que la méthode d' écriture, bien qu'elle réduise drastiquement le nombre d'écritures nécessaires!

Si vous avez besoin d'écrire beaucoup de données et que vous êtes préoccupé par l'usure du silicium, vous pouvez garder une trace du nombre d'écritures que vous faites, bien que cela utilise plus de données. Voici une implémentation approximative en pseudocode:

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

Vous aurez besoin de stocker l'adresse et writeCount dans EEPROM (et writeCount devra être réparti entre les emplacements d'adresses). La plupart du temps, ce niveau de protection ne sera pas nécessaire. Les Arduinos sont aussi bon marché, donc vous pouvez trouver plus facile d'acheter une sauvegarde!

Vous devriez maintenant en savoir assez pour faire des projets impressionnants. Faites-nous savoir si vous faites quelque chose de cool! Pouvez-vous reconnaître tous les appareils dans les images? Laissez-nous un commentaire ci-dessous!

In this article