|
在ESP8266上将数据写入LittleFS的Arduino代码 首先我们需要在Arduino IDE上包括所有必需的库。当我们使用I2C LCD和LittleFS时,我们需要下载并安装以下两个库。下载链接如下。 ● 位于GitHub的Arduino-LiquidCrystal-I2C库 ● 位于GitHub的LittleFS库
在LCD显示屏和ESP8266上实现LittleF读写和删除操作 电路连接与上图一致。 - #include <LiquidCrystal_I2C.h>
- #include <Wire.h>
- #include "LittleFS.h"
复制代码需要上述库才能与LCD、I2C和LittleFS一起使用。 - int lcdColumns = 16;
- int lcdRows = 2;
复制代码这是用来设置LCD的列数和行数。在本文中,16x2表示16列2行。 - LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);
复制代码此函数用于设置LCD地址,列数和行数。 - void readData();
- void writeData(String data);
- void deleteData();
复制代码这些是功能原型。要将数据读取到闪存,请使用自定义函数readData()。同样,“ writeData”和“ deleteData”是分别从LittleFS写入和删除数据的自定义函数。
- void setup() {
- Serial.begin(115200);
- lcd.init();
- lcd.backlight();
复制代码接下来,我们介绍setup函数。在该函数中,我们启动串口监视器并将波特率设置为115200。lcd.init()函数将初始化LCD,.backlight函数将打开LCD背光。 - lcd.setCursor(0, 0);
- lcd.print("Little FS Demo");
- delay(1000);
复制代码像前文一样,这会将光标设置到第一列第一行,并显示消息“ Little FS Demo”,然后等待第二秒钟。延迟用于稳定系统。 - if(!LittleFS.begin()){
- Serial.println("An Error has occurred while mounting LittleFS");
复制代码之所以使用该程序的这一部分,是因为如果Little Fs无法启动,则应该显示一条错误消息,以通知用户Little FS无法启动。 - lcd.clear();
- lcd.print("Mounting Error");
- delay(1000);
- return;
- }
- readData();
- }
复制代码如果成功安装并初始化了LittleFS,我们将使用该代码片段读取已保存的数据
- void loop() {
- if(Serial.available())
- {
- String data = Serial.readString();
- Serial.println(data);
复制代码接下来,我们介绍loop函数。在该函数中,我们声明“ if语句”,当从串口监视器窗口接收到某些数据时触发。然后,读取数据并将其存储在“ data”字符串中,并且要读取该字符串,我们将使用“serial.readString function()。显示屏中打印的数据将被写入nodeMCU的闪存中。 “ Serial.available”函数将在串口监视器上接收用户的输入,并将其存储在“ data”字符串中。然后,它将检查用户输入了什么命令。 - if(data == "D")
- {
- deleteData();
- Serial.println("File deleted!");
- return;
- }
复制代码如果用户输入了“ D”,它将调用“ deleteData”函数来删除文件然后在LCD显示信息“File deleted!”。。 - else if(data == "R")
- {
- readData();
- Return;
- }
复制代码同样,如果用户输入了“ R”,它将调用函数“ readData”从闪存中读取文件 - Serial.println("Writing Data...");
- writeData(data);
- Serial.println("done Writing Data!");
- }
- }
- void readData()
- {
- File file = LittleFS.open("/SavedFile.txt", "r");
复制代码创建另一个名为readData()的函数。创建一个文件对象,并传递文件路径和字母“ r”以表示正在读取文件。要读取数据,首先必须访问文件,这就是使用它的原因。这将打开LittleFS文件,并在该保存的文本文件中。 - if(!file){
- Serial.println("No Saved Data!");
- lcd.clear();
- lcd.print("No Saved Data!");
- return;
- }
复制代码现在,我们需要检查文件是否打开。如果是这样,我们将使用“ while循环”和“ file.available()”检查文件中的数据,因为“ file.read()”函数一次输出一个字符。因此,请使用“ serial.write”函数一次打印一个字符。如果条件为“ if”,则将检查文件是否存在。如果没有,它将打印一条消息,提示“No saved data”。在串口监视器上,它将清除LCD并显示相同的消息。 - lcd.clear();
- lcd.print("Saved Data :");
- lcd.setCursor(0,1);
- while(file.available()){
- lcd.write(file.read());
- }
- lcd.setCursor(0,0);
- file.close();
- }
复制代码如果找到该文件,则“ lcd.clear”函数将清空LCD并显示消息“ Saved Data:”。为了表明它将要从闪存和第二行读取数据,它将开始显示该消息。因此,将光标设置在第一列,第二行位置,然后从闪存中读取文件,并将其写入LCD。显示后,它将重置光标位置,并且file.close()函数将关闭文件。 - void writeData(String data)
- {
- //Open the file
- File file = LittleFS.open("/SavedFile.txt", "w");
- //Write to the file
- file.print(data);
- delay(1);
- //Close the file
- file.close();
复制代码在writeData()函数中,我们首先创建一个要在其中保存数据的文件。为此,请在其中使用“ File file = LittleFS.open()”,以放置应保存的路径。本文使用的是“ /SavedFile.txt”。如果文件已经存在,它将重写文件中的数据;如果文件不存在,它将创建一个名为SavedFile.txt的新文件。此函数的第二个参数是“ w”,表示正在写入文件。调用“ writeFunction”函数以使用LittleFs写入闪存。打开“ LittleFs”以访问保存的文本文件。然后使用“ file.print”写入数据。,“ file.close”用于在写入后关闭文件。 - Serial.println("Write successful");
- lcd.clear();
- lcd.print("Data Saved :");
- // set cursor to first column, second row
- lcd.setCursor(0,1);
- // print the data on the LCD
- lcd.print(data);
- // reset cursor position
- lcd.setCursor(0,0);
- }
复制代码在串口监视器上,显示“Write successful”消息。然后清空LCD以打印“Data Save:”,然后将光标设置在(0,1)位置以在LCD上打印写入的数据。然后将光标位置重新设置为(0,0)。 - void deleteData()
- {
- //Remove the file
- LittleFS.remove("/SavedFile.txt");
- lcd.clear();
- lcd.print("Data Deleted");
- }
复制代码
创建另一个名为deleteData()的自定义函数。在这里,使用代码片段“ LittleFS.remove(“/SavedFile.txt”);”其中“ /SavedFile.txt”是必须删除的文件的路径。 “ deleteData”函数是删除文件。因此,首先,访问已保存的文本文件,然后将其删除。然后在LCD上打印一条消息“Data Deleted”。
LittleFS文件系统的测试 在第一次使用时,由于没有任何数据可显示,因此LCD屏幕将显示消息“No data Saved”
通过串口监视器输入数据后,可以在串口监视器中键入“ R”来读取数据或通过键入“ D”来删除数据。
上图显示了从串口监视器向Little Fs写入新数据。我们在此处输入的新数据是“new data 123”,但是您可以使用任何数据。它可以是字母数字字符的组合。
同样,我们可以使用“ R”和“ D”读取和删除数据。在上图中,我们使用D删除了数据,然后当我们再次尝试读取数据时,它显示“No saved Data”。
如上图所示,我们还将LCD连接到nodemcu以显示已保存的数据,LCD显示存储在nodemcu闪存中的数据状态。
当NodeMCU断开电源并重新连接时,它将从NodeMCU的闪存中读取。现在,从PC断开NodeMCU的连接,然后再次重新连接。这应该直接调用读取函数并显示存储在闪存中的数据。如您所见,我们可以在显示屏上看到“No saved data”。 |