53
62

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-01-30

概要

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);
53
62
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
53
62

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?