Help us understand the problem. What is going on with this article?

ESP8266 (ESP-WROOM-02) の便利ライブラリまとめ (EEPROM編)

More than 3 years have passed since last update.

概要

ESP8266 (以下 WROOM02) のプログラムにあたり、標準ライブラリの使い方まとめ。EEPROM編。

はじめに

WROOM02 (Arduino) でコーディングしていると、値を保存しておいて、次回の起動時にもその値を使いたいことがありますよね。うん、あるある。
不揮発なメモリ処理をいい感じにやってくれる EEPROM というクラスが標準であるので、その使い方まとめです。

リアルな外付けの EEPROM に対するドライバではなくて、WROOM02 搭載の不揮発メモリを、仮想的な EEPROM として扱うライブラリになります。

WROOM02 は 4MB の不揮発(フラッシュ)メモリを積んでいるので、それを操作することになります。

なお、リアルな外付けの EEPROM を使う場合は、以下がとても参考になります。
http://playground.arduino.cc/Code/I2CEEPROM

使い方

インクルード

#include <EEPROM.h>

Mac では、上記の実態は以下にあります。
~/Library/Arduino15/packages/esp8266/hardware/esp8266/2.0.0/libraries/EEPROM/EEPROM.h
~/Library/Arduino15/packages/esp8266/hardware/esp8266/2.0.0/libraries/EEPROM/EEPROM.cpp

簡単な例

初期化

  // 使用するサイズを宣言する
  EEPROM.begin(100);

書き込み

  uint8_t val = 32; // 保存したい値

  // 0 : EEPROM の先頭アドレス
  EEPROM.write(0, val);

  // コミット
  // (コミットで内蔵フラッシュメモリに、実際に書き込みます)
  EEPROM.commit();

読み込み

  // 0 : EEPROM の先頭アドレス
  uint8_t val = EEPROM.read(0);

実用的な例

  • uint8_t 型ではなくて、任意の型を保存・読み込みできると便利です。
  • その場合、template 版の関数を使えばOKです。

例えば、WiFi 接続のための、SSID と Password を保存する場合
( * 初回は何も表示されず、2回目は初回に保存されたSSID/Passwordを表示するだけのサンプルです。)
( * なので、このスケッチ自体には意味は無いです。)

#include <EEPROM.h>

struct CONFIG {
  char ssid[32];
  char pass[32];
};

void setup() {
  Serial.begin(115200);
  while (!Serial);
  Serial.println("");

  EEPROM.begin(100);

  CONFIG buf;
  EEPROM.get<CONFIG>(0, buf);
  Serial.println(buf.ssid);
  Serial.println(buf.pass);

  strcpy(buf.ssid, "Your SSID");
  strcpy(buf.pass, "Your Password");
  EEPROM.put<CONFIG>(0, buf);
  EEPROM.commit();
}

void loop() {
}

まとめ

参考

全関数を載せておきます。

基本操作

  void begin(size_t size);
  uint8_t read(int address);
  void write(int address, uint8_t val);
  bool commit();
  void end();

  uint8_t * getDataPtr();

テンプレート版

  template<typename T>  T &get(int address, T &t);
  template<typename T>  const T &put(int address, const T &t);
exabugs
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away