Arduinoの基礎 - EEPROM

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動

概要

Arduino上のマイコンにはEEPROM(Electrically Erasable Programmable Read-Only Memory)がある。
EEPROMがあれば、ハードディスクのように電源がOFFの場合でもメモリ上の値を保持することができる。

Arduino IDE上で利用可能なEEPROMライブラリもあるので、読み込みや書き込みは非常に簡単である。

EEPROMのサイズはマイコンの種類によって違うので、利用時には注意する。
ATmega88と168では512[Byte]、ATmega328では1[KB]、 ATmega1280とATmega2560では4[KB]である。
また、1[Byte]を書き込むのに掛かる時間は3.3[mS]であり、更にデータを削除して書き込むというサイクルの寿命は10万回とされている。


EEPROM の read/write

EEPROMライブラリでは、書き込み時はwriteメソッド、読み込み時はreadメソッドがあり、1バイト毎に読み書きを行う。
次のサンプルコードでは、MYSTRUCT構造体を定義して、それをEEPROMに書き込み、 s2に読み込む。
また、読み込んだ結果はシリアルモニタで確認することができる。

 #include <EEPROM.h>
 
 typedef struct _MYSTRUCT
 {
    int i;
    char c;
 } MYSTRUCT, *PMYSTRUCT;
 
 void setup()
 {
    Serial.begin(9600);
  
    MYSTRUCT s = {.i = 1234, .c = 'z'};
    byte *p = (byte*)&s;
 
    for(int i = 0; i < sizeof(MYSTRUCT); i++)
    {
       EEPROM.write(i, *p);
       p++;
    }
 
    MYSTRUCT s2;
    byte *p2 = (byte*) &s2;
 
    for(int i = 0; i < sizeof(MYSTRUCT); i++)
    {
       byte b = EEPROM.read(j);
       *p2 = b;
       p2++;
    }
 
    Serial.println( s2.i );
    Serial.println( s2.c );
 }
 
 void loop()
 {
 
 }



EEPROMのgetメソッドとputメソッド

次のサンプルコードでは、getメソッドとputメソッドを利用して、ユーザ定義のMYSTRUCT構造体をEEPROMに読み書きしている。
特定のデータ構造を非構造的な保存領域に記憶する際は、
データ構造の先頭にシグネチャ(例 : 3文字等)を置いたり、データ構造のバージョン番号も同時に書き込むことによって、
複数のプログラムバージョンに対応することができる。

 #include <EEPROM.h>
 
 typedef struct _MYSTRUCT
 {
    int i;
    char c;
 } MYSTRUCT, *PMYSTRUCT;
 
 void setup()
 {
    MYSTRUCT s3 = {.i = 9876, .c = 'a'};
    EEPROM.put(0, s3);
 
    MYSTRUCT s4;
    EEPROM.get(0, s4);
 
    Serial.println(s4.i);
    Serial.println(s4.c);
 }
 
 void loop()
 {
 
 }