一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>LittleFS使用ESP8266和Arduino IDE

LittleFS使用ESP8266和Arduino IDE

2022-11-15 | zip | 0.10 MB | 次下載 | 3積分

資料介紹

描述

在本文中,讓我們學(xué)習(xí)如何克服 NodeMCU 重置后數(shù)據(jù)被破壞的問(wèn)題。這個(gè)問(wèn)題在 Arduino 中也存在。為了在 Arduino 中解決這個(gè)問(wèn)題,我們使用 EEPROM [電可擦可編程只讀存儲(chǔ)器]。它是寫入數(shù)據(jù)的非易失性存儲(chǔ)器。這里,非易失性意味著一旦斷電,數(shù)據(jù)就不會(huì)丟失。因此,數(shù)據(jù)是永久寫入的,除非用戶決定,否則它不會(huì)改變。作為一個(gè)很好的類比,可以將 EEPROM 視為計(jì)算機(jī)上的硬盤驅(qū)動(dòng)器。

但是像 NodeMCU 這樣的板具有比 EEPROM 更先進(jìn)的閃存。在 EEPROM 中,數(shù)據(jù)以字節(jié)形式存儲(chǔ),因此存儲(chǔ)大量數(shù)據(jù)會(huì)很復(fù)雜,并且讀寫次數(shù)有限。而在閃存中,它就像一個(gè)拇指驅(qū)動(dòng)器,具有比 EEPROM 更多的讀寫操作。除此之外,通過(guò)使用文件系統(tǒng),我們可以創(chuàng)建文件、文件夾,并且用戶可以控制重命名或刪除他們創(chuàng)建的任何內(nèi)容。即使文件系統(tǒng)與程序存儲(chǔ)在同一個(gè)閃存芯片上,當(dāng)一個(gè)新的草圖被編程時(shí),它也不會(huì)修改文件系統(tǒng)的內(nèi)容。ESP8266 上使用板載閃存有兩個(gè)文件系統(tǒng)。一個(gè)是SPIFFS ,另一個(gè)是LittleFS. SPIFFS 目前已棄用,可能會(huì)在 ESP 核心的未來(lái)版本中刪除,所以讓我們只關(guān)注 LittleFS。

ESP8266 的 LittleFS 主要類似于計(jì)算機(jī)中的常規(guī)文件系統(tǒng),可以在其中導(dǎo)航、創(chuàng)建、重命名、刪除或修改文件。

注:本文最初發(fā)表于CircuitDigest ,與合著者Lavanya R一起發(fā)表。您可以在此處找到原始文章。)

補(bǔ)給品

這些是可以幫助您輕松完成此項(xiàng)目的產(chǎn)品列表

附屬鏈接

  • 16x2 液晶顯示器:
  • I2C 模塊(PC8574T):
  • 面包板:
  • 節(jié)點(diǎn)MCU:
  • WeMos D1 mini(替代):
  • 跳線(公對(duì)母):

第 1 步:連接 16x2 LCD 顯示器:

LCD代表Liquid Crystal Display;是一種顯示微控制器/開發(fā)板文本輸出的經(jīng)濟(jì)高效的方式。16x2 LCD 顯示器每行可顯示 16 個(gè)字符,并且有 2 行這樣的行。如果有更多信息需要顯示,信息可以滾動(dòng)顯示在 LCD 屏幕上。現(xiàn)在,當(dāng)涉及到顯示多于“開或關(guān)”的信息時(shí),LED 和七段顯示器會(huì)受到限制,因?yàn)樗鼈兛梢苑謩e顯示“開或關(guān)”狀態(tài)和字母數(shù)字字符。使用 LCD 可以輕松繞過(guò)此限制,但它們占用了微控制器或 NodeMCU 的大部分引腳。為避免這種情況,我們使用 I2C 模塊;通過(guò)使用 I2C 模塊,只需 4 個(gè)引腳即可實(shí)現(xiàn)與 LCD 的接口。

?
?
?
poYBAGNxioqAETSUABWO03llRfw273.jpg
?
1 / 2
?

首先,將 I2C 模塊連接到 LCD 顯示器。將母頭引腳焊接到 LCD 顯示器并連接 I2C 模塊,使 I2C 的四個(gè)引腳(GND、VCC、SDA、SCL)指向外部。

現(xiàn)在給電路供電,將 I2C 模塊的 GND 引腳連接到 ESP8266 的 GND 引腳,并將 I2C 模塊的 VCC 連接到 ESP8266 的 Vin 引腳。(這兩個(gè)引腳為液晶屏供電

將 I2C 模塊的 SDA 連接到 ESP8266 的 D2 引腳 將 I2C 模塊的 SCL 連接到 ESP8266 的 D1 引腳

第 2 步:16x2 LCD 代碼:

pYYBAGNxipGAe-GwABQQCzLqDzs215.jpg
?

對(duì)于想了解基礎(chǔ)知識(shí)的人可以從這里開始,如果沒(méi)有,您可以跳到一步 - 從 LittleFS 開始

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
int lcdColumns = 16;int lcdRows = 2;
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);

void setup(){
   lcd.init(); lcd.backlight();
}

void loop()    
{
    lcd.setCursor(0, 0);
    lcd.print("Hello World!");delay(1000);
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print("Hello World!");
    delay(1000);
    lcd.clear();
}
#include <LiquidCrystal_I2C.h>

該庫(kù)包含在使用 I2C 模塊的接口中。

int lcdColumns = 16;int lcdRows = 2;

這兩行用來(lái)設(shè)置LCD的列數(shù)和行數(shù);在我們的例子中,它是 16 列和 2 行。

LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);

這是設(shè)置 LCD 地址、列數(shù)和行數(shù)。(如果您不知道您的顯示地址,請(qǐng)運(yùn)行 I2C 掃描儀草圖)

void setup()
{
    lcd.init(); 
    lcd.backlight();
}

void setup 函數(shù)只運(yùn)行一次,所以在這里,初始化和聲明完成。“l(fā)cd.init();” 用于初始化 LCD 和“l(fā)cd.backlight();” 用于打開 LCD 顯示器的背光。

lcd.setCursor(0, 0);

在 void 循環(huán)中,“.setCursor”函數(shù)用于將光標(biāo)設(shè)置到所需位置。因?yàn)槲覀円@示消息“Hello World!” 在第一列第一行,我們給出位置“(0, 0)”

lcd.print("Hello World!");
delay(1000);

lcd.print” 函數(shù)將打印給出的任何信息。在這里,讓我們顯示“Hello World!” 并會(huì)產(chǎn)生 1 秒的延遲。這確保顯示的消息將保持足夠長(zhǎng)的時(shí)間讓我們正確看到它。

lcd.clear();

此功能將清除顯示以打印新信息。

lcd.setCursor(0,1);

現(xiàn)在,要?jiǎng)?chuàng)建一個(gè)小動(dòng)畫,讓我們將光標(biāo)設(shè)置到第一列,第二行,以便在第一行顯示消息一秒鐘后,它將轉(zhuǎn)移到第二行。

lcd.print("Hello World!");
delay(1000);

設(shè)置為第二行后,打印相同的消息以顯示,延遲將確保消息在第二行也保持 1 秒。

lcd.clear();

這將清除屏幕,以便下次打印消息時(shí)很方便。這不是絕對(duì)必需的,但以這種方式編寫程序是一種很好的做法。

第 3 步:LittleFs 帶 16x2 LCD 顯示屏和 ESP8266 [代碼]

使用 LittleFs 對(duì) flash 存儲(chǔ)器進(jìn)行寫入、讀取和刪除文件的電路與上一步相同,顯示“Hello World”

#include 
#include 
#include 

// set the LCD number of columns and rows
int lcdColumns = 16;
int lcdRows = 2;

// set LCD address, number of columns and rows
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows); 

//function prototypes
void readData();
void writeData(String data);
void deleteData();
 
void setup() {
  
  //Start the serial monitor
  Serial.begin(115200);

  // initialize LCD
  lcd.init();
  // turn on LCD backlight                      
  lcd.backlight();

   // set cursor to first column, first row
  lcd.setCursor(0, 0);
  lcd.print("Little FS Demo");
  delay(1000);

  //Start LittleFS
  if(!LittleFS.begin()){
    Serial.println("An Error has occurred while mounting LittleFS");

    //Print the error on display
    lcd.clear();
    lcd.print("Mounting Error");
    delay(1000);
    return;
  }

  //Read the saved data
  readData();
  
}
 
void loop() {
    //Take input from user on serial monitor

    if(Serial.available())
    {
         String data = Serial.readString();
         Serial.println(data);
         if(data == "D") // To delete the file 
         {
            deleteData();
            Serial.println("File deleted!");
            return; 
         }
         else if(data == "R") // To read the file
         {
            readData();
            return;
         }
         
         Serial.println("Writing Data...");
         writeData(data);
         Serial.println("done Writing Data!");
    }

}


void readData()
{
   //Open the file
   File file = LittleFS.open("/SavedFile.txt", "r");

  //Check if the file exists
   if(!file){
   //Read the file data and display it on LCD
    Serial.println("No Saved Data!");
    
    lcd.clear();
    lcd.print("No Saved Data!");
    
    return;
   }
      lcd.clear();
      lcd.print("Saved Data :");
      // set cursor to first column, second row
      lcd.setCursor(0,1);
      //Display on the LCD
      while(file.available()){
      lcd.write(file.read());
      }   
      //reset cursor poisition
      lcd.setCursor(0,0);
   //Close the file
    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();
  
  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);
}

void deleteData()
{
   //Remove the file
   LittleFS.remove("/SavedFile.txt"); 
   lcd.clear();
   lcd.print("Data Deleted"); 
}

需要以下這些庫(kù)才能與 LCD 顯示器、I2C 和 LittleFs 一起使用。

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <LittleFS.h>

int lcdColumns = 16;
int lcdRows = 2;

這是設(shè)置 LCD 的列數(shù)和行數(shù)。在我們的例子中,16x2 表示 16 列和 2 行。

LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);

該函數(shù)用于設(shè)置 LCD 地址、列數(shù)和行數(shù)。

void readData();
void writeData(String data);
void deleteData();

這些是函數(shù)原型。要將數(shù)據(jù)讀取到閃存,請(qǐng)使用自定義函數(shù)“readData()”。同樣,“writeData”和“deleteData”是自定義函數(shù),分別用于寫入數(shù)據(jù)和從LittleFs中刪除數(shù)據(jù)。

Serial.begin(115200);

啟動(dòng)串行監(jiān)視器并將波特率設(shè)置為 115200。

lcd.init();
lcd.backlight();

“l(fā)cd.init”函數(shù)將初始化LCD,.backlight函數(shù)將打開LCD背光

lcd.setCursor(0, 0);
lcd.print("Little FS Demo");
delay(1000);

像以前一樣,這會(huì)將光標(biāo)設(shè)置到第一列第一行并打印消息“Little FS Demo”并等待一秒鐘。

if(!LittleFS.begin())
{
Serial.println("An Error has occurred while mounting LittleFS");
lcd.clear();
lcd.print("Mounting Error");
delay(1000);
return;
}

在這里,使用這部分程序是因?yàn)槿绻?Little Fs 無(wú)法啟動(dòng),則應(yīng)顯示錯(cuò)誤消息以通知用戶 Little Fs 無(wú)法啟動(dòng)。

檢查文件是否已正確打開,如果未正確打開,將打印錯(cuò)誤消息并結(jié)束函數(shù)。或者它將打印之前寫入的數(shù)據(jù)。LCD 顯示屏上將顯示“安裝錯(cuò)誤”信息。

readData();

這行代碼用于讀取保存的數(shù)據(jù)。

void loop()
{
if(Serial.available())
{
String data = Serial.readString();
Serial.println(data);
if(data == "D")
{
deleteData();
Serial.println("File deleted!");
return;
}
else if(data == "R")
{
readData();
Return;
}
Serial.println("Writing Data...");
writeData(data);
Serial.println("done Writing Data!");}
}

當(dāng)串行從串行監(jiān)視器接收到一些數(shù)據(jù)時(shí),使用“serial.readString()”讀取數(shù)據(jù)并存儲(chǔ)在字符串“data”中。然后它會(huì)檢查用戶輸入了什么命令,并根據(jù)它執(zhí)行刪除/讀/寫。

void readData()
{
File file = LittleFS.open("/SavedFile.txt", "r");

if(!file)
{
Serial.println("No Saved Data!");
lcd.clear();
lcd.print("No Saved Data!"); return;
}

lcd.clear();
lcd.print("Saved Data :");
lcd.setCursor(0,1);
while(file.available())
{
lcd.write(file.read());
}lcd.setCursor(0,0);
file.close();
}

此功能將打開 LittleFs 文件和保存的文本文件,并將其顯示在串行監(jiān)視器和 LCD 屏幕上。

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();
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);
}

該函數(shù)將打開 LittleFs 文件并寫入用戶數(shù)據(jù)并將其顯示在串行監(jiān)視器和 LCD 屏幕上。

void deleteData()
{
//Remove the file
LittleFS.remove("/SavedFile.txt");
lcd.clear();
//update the display
lcd.print("Data Deleted");
}

該函數(shù)將刪除 LittleFs 文件并寫入用戶數(shù)據(jù)并顯示在串行監(jiān)視器和 LCD 屏幕上。

第 4 步:小 FS 工作

?
?
?
poYBAGNxipSAVKeuAACEYh0Fyl8822.png
?
1 / 2
?

這是將數(shù)據(jù)寫入閃存。這很簡(jiǎn)單。代碼的編寫方式允許用戶非常輕松地鍵入數(shù)據(jù)。只需打開串行監(jiān)視器并鍵入數(shù)據(jù)并按“輸入”(確保波特率 = 115200并且未選擇行尾)。輸入的任何內(nèi)容都將作為數(shù)據(jù)保存到 LittleFs 文件系統(tǒng)中。LittleFs 文件系統(tǒng)安裝在 ESP8266 的閃存上。除了在 LittleFs 文件系統(tǒng)中寫入之外,還可以完成另外兩項(xiàng)任務(wù)。那些正在閱讀和刪除。為此,代碼以這樣一種方式編寫,即它接受用戶的輸入并執(zhí)行用戶請(qǐng)求的功能。

?
?
?
pYYBAGNxipaAXWTlAAC7Avyb7-A576.png
?
1 / 2
?

當(dāng)用戶輸入“D”時(shí),文件被刪除,“R”讀取文件。

注意:它區(qū)分大小寫,并且像“DD”或“dD”而不是“D”之類的任何錯(cuò)誤都將被視為輸入數(shù)據(jù),這將被覆蓋在現(xiàn)有數(shù)據(jù)上?!癛”讀取文件)

第 5 步:最后的想法

?
?
?
?
pYYBAGNxip2AWYZEAA_hzDAXhPI295.jpg
?
1 / 2
?

這只是對(duì) LittleFS類型文檔的介紹。您可以更進(jìn)一步,從傳感器獲取輸入并嘗試將收集的數(shù)據(jù)存儲(chǔ)在 LittleFS 中(盡管這不是一個(gè)可行的項(xiàng)目,因?yàn)榭捎玫拈W存較少且無(wú)法有效存儲(chǔ)數(shù)據(jù))。

如果您對(duì)該項(xiàng)目有任何疑問(wèn),請(qǐng)隨時(shí)在下面發(fā)表評(píng)論,對(duì)于項(xiàng)目,請(qǐng)查看我的hackster 個(gè)人資料。

重要的提示

您可以從此鏈接下載 LiquidCrystal_I2C

要安裝請(qǐng)按照此步驟

Go to Arduino IDE ---> Sketch - --> Include Library ---> Add .ZIP Library ---> select this zip file

如果您想查看原始文章,請(qǐng)單擊此處。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)