ESP32を使って学習リモコンを作る(6) ソフトウエア FLASH 読書き(SPIFFS)

赤外線リモコン スマートリモコン Smart Remote Controller Aruduino PlatformIO ESP32

本項では全画面表示が可能な図番に * を付けています。

ESP32を使って学習リモコンを作る(5) で説明した「 webserver」に引き続きソフトウエアの要素技術「 SPIFFS 」について説明します。

はじめに

SPIFFS(SPI Flash File System)を使うと ESP32-DevKitC-32E モジュールに搭載されたフラッシュメモリの一部分をストレージとして利用することができます。

学習リモコンにおけるフラッシュメモリの用途は次の2つです。

①Web ページの表示
index.html、js.js、style.css の3つのファイルを保存しておき必要に応じて SPIFFS を使って読み出します。(詳細は ESP32を使って学習リモコンを作る(5) webserver を参照)

②学習したリモコン信号の記憶
irReceive で受信した Hex フォーマットの赤外線信号を格納します。(詳細は ESP32を使って学習リモコンを作る(3) 「 図22 ターミナル出力全文 」最後の char prontoData[] = ” Hex フォーマットの赤外線信号 ” を参照)

ハードウエア

SPIFFS は ESP32-DevkitC-32E 単体で動作するのでこれまで使っていたハードウエアをそのまま使用することができます。 ESP32を使って学習リモコンを作る(4) で使ったブレッドボードをそのまま使います。(図1)

*図1 SPIFFS 動作確認に使用するブレッドボード

プロジェクトを作成する

Visula Studio Code ( VSCode ) を開いて画面左端縦の「アクティビティバー」からアリさんマーク(赤丸)をクリックします。(図2)

*図2 Visual Studio Code を開く

プライマリサイドバーが表示されるので Create New Project をクリックします。(図3)

*図3 プライマリサイドバー

PIO Home 画面が表示されます。(図4)

*図4 PIO Home

画面中央から右寄りの Quick Access から + New Project をクリックすると、Project Wizard が表示されます。(図5)

*図5 Project Wizard

Project Wizard に従って入力します。(図6)
  Name:  SPIFFS_Test_5 (何でもいいので任意のプロジェクト名を入力)
  Board: Espressif ESP32 Dev Module (プルダウンメニューから選択します)
  Framework: Arduino (プルダウンメニューから選択します)  

*図6 Project Wizard に必要事項を入力した

Project Wizard で Finish をクリックするとプロジェクトが自動生成されます。(図7)

*図7 プロジェクトが自動生成された

SPIFFS プロジェクト

自動生成されたプロジェクトに追加、変更を加えて SPIFFS に対応させます。

platformio.ini ファイルに以下の 2 行を追加します。(図8)
  upload_port = COM3 (使用する PC に合わせてください)
  monitor_speed = 115200

*図8 platformio.ini に追加

main.cpp ファイルをクリックして自動生成されたプログラムを表示します。(図9)

*図9 main.cpp

自動生成された main.cpp の内容を全て削除して次のコードをコピー/ペーストします。(図11)

#include <Arduino.h>

#include <SPIFFS.h>	//SPIFFS ライブラリを読み込む

String wrfile = "/test.txt"; //書込みファイル名
String writeStr ="Hello World!"; //書込みデータ

void setup(void) {
  Serial.begin(115200);	//シリアル速度
  SPIFFS.begin();	//SPIFFS 開始


 /** SPIFFS を使ってフラッシュメモリーに書込む */
  Serial.println("\n**************************************************************");
  Serial.println("store_FLASH started");
  Serial.println("**************************************************************");

  File fw = SPIFFS.open(wrfile.c_str(), "w");  //ファイルを書込みモードで開く
  fw.println(writeStr);  //ファイルに書込み
  fw.close();  //ファイルを閉じる
  
  Serial.print("wrfile = ");
  Serial.println(wrfile);
  Serial.print("writeStr= ");
  Serial.println(writeStr);
  delay (1000);
  Serial.println("**************************************************************");
  Serial.println("store_FLASH finished");
  Serial.println("**************************************************************");
 
 /** SPIFFS を使ってフラッシュメモリーから読み出す */
  Serial.println("\n**************************************************************");
  Serial.println("restore_FLASH started");
  Serial.println("**************************************************************");

  File fr = SPIFFS.open(wrfile.c_str(),"r"); //ファイルを読込みモードで開く
  String readStr = fr.readStringUntil('\n'); //改行まで1行読み出し
  fr.close();                                //ファイルを閉じる

  Serial.print("readStr = ");
  Serial.println(readStr);
  delay(200);
  Serial.print("readStr.length = "); //20240720
  Serial.println(readStr.length()); //20240720
  Serial.println("**************************************************************");
  Serial.println("restore_FLASH finished");
  Serial.println("**************************************************************");
}

void loop()
  {
}

図11 main.cpp に使うコード

このコードを main.cpp にペーストした結果です。(図12)

*図12 main.pp にペーストした結果

以上で SPIFFS_Test_5 プロジェクトが完成です。

SPIFFS プロジェクトの勘所

3    #include <SPIFFS.h> //SPIFFS ライブラリを読み込む

SPIFFS が使えるようにヘッダーファイルをインクルードします。(main.cpp 3行目)

 9    Serial.begin(115200); //シリアル速度
10   SPIFFS.begin(); //SPIFFS 開始

シリアル通信の速度を設定して SPIFFS を開始します。(main.cpp 9~10行目)

18    File fw = SPIFFS.open(wrfile.c_str(), “w”); //ファイルを書込みモードで開く
19    fw.println(writeStr); //ファイルに書込み
20    fw.close(); //ファイルを閉じる
        .
26    delay (1000);

ファイルを書込みモード “w” で開きます。
fw.println(); でファイルに書き込みます。
fw.close(); でファイルを閉じて終了です。
フラッシュメモリの書込み時間に余裕を見て delay(1000); で 1 秒遅延させています。
(main.cpp 18~20、26行目)

36    File fr = SPIFFS.open(wrfile.c_str(),”r”); //ファイルを読込みモードで開く
37    String readStr = fr.readStringUntil(‘\n’); //改行まで1行読み出し
38    fr.close(); //ファイルを閉じる
        .
42    delay(200);

ファイルを読込みモード “r” で開きます。
fr.readStringUntil(‘\n’); で改行まで1行読み出します。
fr.close(); でファイルを閉じて終了です。
フラッシュメモリの読込み時間に余裕を見て delay(200); で 0.2 秒遅延させています。
(main.cpp 36~38、42行目)

ファームウエアビルド

PROJECT TASKS から Build をクリックするとビルドが開始されて [SUCCESS] と表示されると完了です。(図13)

*図13 ファームウエアビルドの完了

ファームウエア書込み

ESP32-DevKitC-32E を USB ケーブルで PC に接続します。 PROJECT TASKS から Upload をクリックするとファームウェアの書込みが開始されて [SUCCESS] と表示されると完了です。(図14)

*図14 ファームウエアの書き込みが完了した

ファームウエア実行

PROJECT TASKS から Monitor をクリックするとファームウェアの実行が開始されて、ターミナルウインドウにメッセージが表示されます。(図15)

*図15 ファームウエア実行結果

次のメッセージが出力されると SPIFFS を使ったフラッシュメモリへの書込みと読出しが完了です。

**************************************************************
store_FLASH started
**************************************************************
wrfile = /test.txt
writeStr= Hello World!
**************************************************************
store_FLASH finished
**************************************************************

**************************************************************
restore_FLASH started
**************************************************************
readStr = Hello World!
readStr.length = 13
**************************************************************
restore_FLASH finished
**************************************************************

図16 ターミナルウインドウに表示されたメッセージ

次回はいよいよ学習リモコンのファームウエアについて説明します。

リンク

ESP32を使って学習リモコンを作る(1) 学習リモコンでどんなことができるの?
ESP32を使って学習リモコンを作る(2) ハードウエア
ESP32を使って学習リモコンを作る(3) ソフトウエア 赤外線リモコン受信( irReceive )
ESP32を使って学習リモコンを作る(4) ソフトウエア 赤外線リモコン送信( irSend )
ESP32を使って学習リモコンを作る(5) ソフトウエア webserver
ESP32を使って学習リモコンを作る(6) ソフトウエア FLASH 読書き(SPIFFS)
ESP32を使って学習リモコンを作る(7) ソフトウエア 本機のプロジェクト
ESP32を使って学習リモコンを作る(8) ソフトウエア 本機プロジェクトの勘所
ESP32を使って学習リモコンを作る(9) ハードウエア設計の勘所
ESP32を使って学習リモコンを作る(10) 学習リモコンを操作した時のターミナル出力
Smart_Remote_Controller プロジェクト GitHub

(YI)

コメント

error: Content is protected !!
タイトルとURLをコピーしました