使用ESP32在SD卡上記錄溫濕度數(shù)據(jù)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
數(shù)據(jù)是任何分析和預(yù)測(cè)的關(guān)鍵資源。它總是需要?jiǎng)?chuàng)建任何信息或統(tǒng)計(jì)。有很多在線和離線平臺(tái)可用于記錄數(shù)據(jù),我們已經(jīng)使用了許多基于物聯(lián)網(wǎng)的平臺(tái)和web服務(wù)器來(lái)存儲(chǔ)和可視化數(shù)據(jù)。這里我們使用最流行的離線存儲(chǔ)數(shù)據(jù)的方式,即SD卡。
之前我們使用Arduino Uno來(lái)記錄SD卡上的數(shù)據(jù),今天我們將使用ESP32來(lái)記錄SD卡上的溫濕度數(shù)據(jù)。ESP32從DHT11傳感器收集溫度和濕度值,并將這些值存儲(chǔ)在SD卡上。保存在SD卡中的數(shù)據(jù)文件可以很容易地打開(kāi)為文本文件進(jìn)行進(jìn)一步分析。
組件的要求
?ESP32
?DHT11溫濕度傳感器
?SD卡模塊
?SD卡讀卡器
?跳線
SD卡適配器
Micro - SD卡適配器是Micro - SD卡讀卡器模塊,用于讀寫SD卡上的數(shù)據(jù)。MicroSD卡適配器的引腳直接與Arduino或任何其他微控制器兼容。該模塊具有與任何SD卡兼容的SPI接口,并使用5V或3.3V電源。
特性
?支持Micro SD卡(<=2G), Micro SDHC卡(<=32G)
?可接口電平為5V或3.3V的電平轉(zhuǎn)換電路板
?電源為4.5V ~ 5.5V,穩(wěn)壓電路板為3.3V
?通信接口為標(biāo)準(zhǔn)SPI接口。
線路圖
ESP32 SD卡數(shù)據(jù)記錄電路圖如下:
如電路圖所示,由于所有組件都用作模塊,因此連接非常簡(jiǎn)單,我們可以直接在面包板上構(gòu)建它們。SD卡模塊與ESP32通過(guò)SPI通信連接。ESP32上的SPI引腳為5、18、19和23引腳。連接進(jìn)一步分類如下表所示:
我們之前使用DHT11傳感器構(gòu)建了一個(gè)使用不同微控制器的氣象站。
代碼的解釋
ESP32 SD卡記錄器的完整代碼在頁(yè)面末尾給出。這里我們將解釋代碼的一些重要部分。
在對(duì)ESP32進(jìn)行編程之前,需要安裝將在此代碼中使用的SPI.h、SD.h、NTPClient.h和DHT.h庫(kù)。這些資料庫(kù)可從以下連結(jié)下載:
?SPI.h
?SD.h
?DHT.h
?NTPClient.h
下載這些庫(kù)之后,通過(guò)包含microSD卡模塊、DHT11和NTP服務(wù)器所需的庫(kù)來(lái)啟動(dòng)代碼。
在接下來(lái)的幾行中,定義DHT傳感器的類型和連接DHT11傳感器的ESP32引腳。如果您使用的是DHT22,那么將DHT類型更改為DHT22。在我的情況下,DHT傳感器連接到ESP32的GPIO4。
然后創(chuàng)建字符串和浮點(diǎn)變量來(lái)存儲(chǔ)Time、Date和DHT11傳感器數(shù)據(jù)。存儲(chǔ)在這些變量中的數(shù)據(jù)將保存在microSD卡上。
然后在SSID和密碼變量中輸入網(wǎng)絡(luò)憑據(jù),以便ESP32能夠與本地網(wǎng)絡(luò)建立連接。
在下一行中,定義連接到GPIO 5的SD卡CS引腳。
在接下來(lái)的兩行代碼中,為NTPClient創(chuàng)建一個(gè)實(shí)例,以便從NTP服務(wù)器請(qǐng)求日期和時(shí)間。
在setup()函數(shù)中,初始化串行通信、DHT11傳感器,并使用前面定義的憑據(jù)將ESP32連接到Wi-Fi網(wǎng)絡(luò)。
在接下來(lái)的幾行中,初始化NTP客戶端以從NTP服務(wù)器獲取日期和時(shí)間。根據(jù)您的時(shí)區(qū),更改timeClient.setTimeOffset(time)函數(shù)中的time值。按照給定的鏈接獲取GMT偏移時(shí)區(qū)的列表。
然后初始化SD卡。if條件檢查microSD卡是否正常工作。
如果SD卡正常工作,那么創(chuàng)建一個(gè)新的文本文件并寫入數(shù)據(jù)的名稱。
在loop()函數(shù)內(nèi)部,調(diào)用Read_TempHum()、logSDCard()和getTimeStamp()函數(shù)來(lái)獲取DH11傳感器、時(shí)間和日期值,然后將這些值發(fā)送到SD卡。
Read_TempHum()函數(shù)用于從DHT11傳感器和dht獲取溫度和濕度值。Read函數(shù)從傳感器讀取這些值。
getTimeStamp()函數(shù)用于從NTP服務(wù)器獲取日期和時(shí)間值。使用getFormattedDate()方法將原始日期和時(shí)間值轉(zhuǎn)換為可讀格式。之后,時(shí)間和日期值都存儲(chǔ)在兩個(gè)單獨(dú)的字符串變量中。
logSDCard()函數(shù)用于將所有信息記錄到SD卡的data.txt文件中。
測(cè)試ESP32數(shù)據(jù)記錄項(xiàng)目
一旦硬件和代碼準(zhǔn)備好了,將ESP32板連接到筆記本電腦并上傳代碼。一旦程序上傳,帶有日期和時(shí)間戳的溫度和濕度值將開(kāi)始存儲(chǔ)在SD卡的一個(gè)名為“data.txt”的文件中。要檢查這是否工作,從模塊中取出SD卡,在手機(jī)或筆記本電腦中打開(kāi)它,并打開(kāi)‘ data.txt ’文件。它看起來(lái)是這樣的:
這就是如何將數(shù)據(jù)從ESP32存儲(chǔ)到SD卡。
本文編譯自iotdesignpro