赤外線リモコン スマートリモコン 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)
プロジェクトを作成する
Visula Studio Code ( VSCode ) を開いて画面左端縦の「アクティビティバー」からアリさんマーク(赤丸)をクリックします。(図2)
プライマリサイドバーが表示されるので Create New Project をクリックします。(図3)
PIO Home 画面が表示されます。(図4)
画面中央から右寄りの Quick Access から + New Project をクリックすると、Project Wizard が表示されます。(図5)
Project Wizard に従って入力します。(図6)
Name: SPIFFS_Test_5 (何でもいいので任意のプロジェクト名を入力)
Board: Espressif ESP32 Dev Module (プルダウンメニューから選択します)
Framework: Arduino (プルダウンメニューから選択します)
Project Wizard で Finish をクリックするとプロジェクトが自動生成されます。(図7)
SPIFFS プロジェクト
自動生成されたプロジェクトに追加、変更を加えて SPIFFS に対応させます。
platformio.ini ファイルに以下の 2 行を追加します。(図8)
upload_port = COM3 (使用する PC に合わせてください)
monitor_speed = 115200
main.cpp ファイルをクリックして自動生成されたプログラムを表示します。(図9)
自動生成された 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)
以上で SPIFFS_Test_5 プロジェクトが完成です。
SPIFFS プロジェクトの勘所
SPIFFS が使えるようにヘッダーファイルをインクルードします。(main.cpp 3行目)
10 SPIFFS.begin(); //SPIFFS 開始
シリアル通信の速度を設定して SPIFFS を開始します。(main.cpp 9~10行目)
19 fw.println(writeStr); //ファイルに書込み
20 fw.close(); //ファイルを閉じる
26 delay (1000);
ファイルを書込みモード “w” で開きます。
fw.println(); でファイルに書き込みます。
fw.close(); でファイルを閉じて終了です。
フラッシュメモリの書込み時間に余裕を見て delay(1000); で 1 秒遅延させています。
(main.cpp 18~20、26行目)
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)
ファームウエア書込み
ESP32-DevKitC-32E を USB ケーブルで PC に接続します。 PROJECT TASKS から Upload をクリックするとファームウェアの書込みが開始されて [SUCCESS] と表示されると完了です。(図14)
ファームウエア実行
PROJECT TASKS から Monitor をクリックするとファームウェアの実行が開始されて、ターミナルウインドウにメッセージが表示されます。(図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)
コメント