4-1.EEPROMによるデータ利用

2019年5月29日

プログラム内の変数でデータを定義せずに、プログラム上でSSIDやパスワードなどを設定し、電源OFF・ON後も設定データを利用したい場合があります。
このような場合にEEPROM(Electrically Erasable Programmable Read-Only Memory)が利用できます。EEPROMは不揮発性メモリの一種でByte単位にデータを書き込んだり読み込んだりでき設定情報などの保存に利用します。一般的なフラッシュメモリはEEPROMを新しく拡張したもので、ブロック単位で読み書きできるためデータ量が多くなるとコスト的に安くなります。
ESP32-DevKitC(ESP-WROOM-32)は4MByteのフラッシュメモリを実装しており、このフラッシュメモリの一部を仮想的にEEPROMとして利用できます。また、EEPROMを利用できるライブラリが標準で提供されており、サイズは4Kbyteまで利用可能となります。4Kbyteなので大きなデータには適しませんので設定データなど小さなデータに利用します。
EEPROMを利用してデータを読み書きするスケッチを以下に説明します。

EEPROMを利用する場合はライブラリを宣言(①)します。次にEEPROMで利用するデータの型を宣言(②)しています。関連する変数(今回は”ssid”,”pass”)をまとめて扱える構造体として宣言しています。
EEPROMの開始には利用するByte数を設定し④の「EEPROM.begin(128);」のように宣言します。128はByteサイズになり、今回は64Byteを2個定義していますので、128を設定しています。最大は4KByteなので4096まで利用可能です。
⑤は②で定義した型をメモリ上に実体「buf」として作成します。⑥はEEPROM上の設定値を⑤で宣言した変数に読み込みます。⑦は⑥で読み込んだ内容をシリアルモニタに表示しています。したがって最初に起動した時は何も値がないため値には何も表示されません。
次に書き込み処理を行います。⑧で⑤の変数に値を設定し⑨でEEPROMに書き込み処理を行います。このため、ESP32-DevKitCのENボタンを押して再起動(リセット)後はEEPROMに書き込まれた情報が読み出されてシリアルモニタに表示されるようになります。
EEPROMの開始(④)、読み込み(⑥)と書き込み(⑨)処理について学習しましたので、データ保存時には利用してください。