資料介紹
PCB圖如下:

?
成分
|
ESP8266-DEVKITC-02D-F 樂鑫系統(tǒng) |
× 1 |
|
DHT22 亞馬遜 |
× 1 |
| MQ135空氣質量傳感器模塊 | × 1 |
| SD卡模塊 | × 1 |
| 40 針跳線母對母 20 厘米 | × 1 |
描述
Nodemcu 數(shù)據(jù)記錄器
您大多已經在 ThingSpeak 和其他物聯(lián)網平臺上看到了帶有實時圖表和表格的數(shù)據(jù)記錄 Web 服務器。但我們也可以創(chuàng)建自己的網絡服務器并實時更新數(shù)據(jù),我們之前使用不同的板創(chuàng)建了許多網絡服務器。在這里,我們還將使用 DHT11 傳感器創(chuàng)建 ESP8266 Web 服務器數(shù)據(jù)記錄器。這里的溫度和濕度數(shù)據(jù)將使用AJAX在網頁上更新。
AJAX(異步 JavaScript 和 XML)允許通過在后臺與服務器共享少量數(shù)據(jù)來自動更新網站,而無需刷新整個網頁。這可確保在不重新加載整個網站的情況下更改網頁的某些部分。所以讓我們開始吧!
所需組件
NodeMCU ESP8266
DHT11 傳感器
跳線
DHT11傳感器用于測量溫度和濕度,通常用于創(chuàng)建氣象站。
電路原理圖

將 DHT11 連接到 NodeMCU 很容易。DHT11 的 VCC 和 GND 引腳連接到 3.3V 和 GND NodeMCU,而 DHT 的 Data 引腳連接到 NodeMCU 的 D5 (GPIO 14) 引腳。

為數(shù)據(jù)記錄編程 NodeMCU ESP8266
在直接開始編碼之前,安裝所需的庫,ESP8266 庫已預先安裝在 IDE 上;你只需要安裝 DHT11 庫
安裝庫后,包括所有必需的庫。
#include
#include
#include
#include "DHT.h"
現(xiàn)在在接下來的幾行中,輸入您的 Wi-Fi 名稱和密碼。
const char* ssid = "Wi-Fi 名稱";
const char* 密碼 = "密碼";
然后定義 DHT 傳感器的類型和傳感器連接的引腳。如果您使用的是 DHT22,則將 DHT 類型更改為 DHT22。在我的例子中,DHT 傳感器連接到 NodeMCU 的 GPIO14 (D5)。
#define LED 2 //板載LED
#define DHTTYPE DHT11 // DHT 11
uint8_t DHTPin = 14;
DHT dht(DHTPin, DHTTYPE);
當我們使用 NodeMCU IP 地址打開網頁瀏覽器時,會執(zhí)行 handleRoot 函數(shù)。
無效句柄根()
{
字符串 s = MAIN_page; //讀取HTML內容
server.send(200, "text/html", s); //發(fā)送網頁
}
下一個函數(shù) readData() 用于從 DHT11 傳感器讀取數(shù)據(jù)并將其發(fā)送到網頁。在這個循環(huán)中,NodeMCU 將 DHT11 值存儲到兩個浮點變量中:溫度和濕度,之后它將浮點變量轉換為字符串并將它們的數(shù)據(jù)存儲到另一個字符串變量“數(shù)據(jù)”中,并在請求時將其發(fā)送到網頁。
無效讀取數(shù)據(jù)()
{
String data = "{"溫度":""+ String(溫度) +"", "濕度":""+ String(濕度) +""}";
數(shù)字寫入(LED,!數(shù)字讀?。↙ED));
server.send(200, "文本/平面", 數(shù)據(jù));
延遲(2000);
溫度 = dht.readTemperature();
濕度 = dht.readHumidity();
Serial.print(濕度,1);
Serial.print(溫度,1);
}
在 void setup() 函數(shù)中,我們使用 .begin() 函數(shù)初始化波特率,DHT 傳感器,使用 server.begin() 函數(shù)初始化網頁,然后使用 Wi-Fi 名稱和密碼將模塊與 Wi-Fi 連接。
序列號.開始(115200);
pinMode(DHTPin,輸入);
dht.begin();
WiFi.begin(ssid, 密碼);
server.begin();
第一個函數(shù)用于在客戶端請求 URI(統(tǒng)一資源標識符)“/”時調用“handleRoot”函數(shù),而第二個函數(shù)用于在對 URI“/readData”進行 POST 請求時調用“readData”函數(shù)
server.on("/", handleRoot);
server.on("/readData", readData);
void loop() 函數(shù)持續(xù)監(jiān)聽來自客戶端的 HTTP 請求
無效循環(huán)(無效)
{
server.handleClient();
}
數(shù)據(jù)記錄
ESP8266 等物聯(lián)網設備的常見用途是監(jiān)控傳感器。使用前面示例中的代碼,我們可以請求時間,并將一些傳感器值保存到文件中。如果我們也運行服務器,我們可以在網頁的漂亮圖表中顯示這些數(shù)據(jù)。
溫度記錄儀
在以下示例中,我們將使用 DS18S20 溫度傳感器記錄一段時間內的溫度并將其保存到 SPIFFS。然后它可以顯示在瀏覽器的圖表中。
安裝庫
首先,下載 Miles Burton 的 Dallas Temperature 庫和 Jim Studt 的 OneWire 庫:轉到 Sketch > Include Library ... > Manage Libraries 并搜索“Dallas Temperature”和“OneWire”(確保下載正確的版本) .
硬件
將 DS18S20 溫度傳感器的地(引腳 1)連接到 ESP 的地,將數(shù)據(jù)引腳(引腳 2)連接到 GPIO5,將 VCC(引腳 3)連接到 ESP 的 3.3V。最后,在數(shù)據(jù)引腳和 VCC 之間連接一個 4k7Ω 電阻。
庫、常量和全局變量
#include
#include <達拉斯溫度.h>
#include
#include
#include
#include
#include
#include
#include
#define ONE_HOUR 3600000UL
#define TEMP_SENSOR_PIN 5
單線單線(TEMP_SENSOR_PIN);// 設置 OneWire 實例以與 OneWire 設備通信
DallasTemperature tempSensors(&oneWire); // 創(chuàng)建溫度傳感器類的實例
ESP8266WebServer 服務器(80);// 創(chuàng)建一個監(jiān)聽 80 端口上的 HTTP 請求的 webserver 對象
文件 fsUploadFile; // 一個 File 變量來臨時存儲接收到的文件
ESP8266WiFiMulti wifiMulti;// 創(chuàng)建一個 ESP8266WiFiMulti 類的實例,名為 'wifiMulti'
const char *OTAName = "ESP8266"; // OTA 服務的名稱和密碼
const char *OTAPassword = "esp8266";
const char* mdnsName = "esp8266"; // mDNS 響應者的域名
WiFiUDP UDP;// 創(chuàng)建一個 WiFiUDP 類的實例來發(fā)送和接收 UDP 消息
IPAddress timeServerIP; // time.nist.gov NTP 服務器的 IP 地址
const char* ntpServerName = "time.nist.gov";
常量 int NTP_PACKET_SIZE = 48; // NTP 時間戳在消息的前 48 個字節(jié)中
字節(jié)數(shù)據(jù)包緩沖區(qū)[NTP_PACKET_SIZE];// 用于保存?zhèn)魅牒蛡鞒鰯?shù)據(jù)包的緩沖區(qū)
這里唯一的新東西是 OneWire 和 DallasTemperature 庫,用于從傳感器獲取溫度。
設置
無效設置(){
序列號.開始(115200);// 啟動串口通信向計算機發(fā)送消息
延遲(10);
Serial.println("\r\n");
tempSensors.setWaitForConversion(false); // 不要在溫度傳感器讀取時阻塞程序
tempSensors.begin(); // 啟動溫度傳感器
if (tempSensors.getDeviceCount() == 0) {
Serial.printf("在引腳 %d 上找不到 DS18x20 溫度傳感器。正在重新啟動。\r\n", TEMP_SENSOR_PIN);
Serial.flush();
ESP.reset();
}
開始WiFi();// 啟動一個 Wi-Fi 接入點,并嘗試連接到一些給定的接入點。然后等待 AP 或 STA 連接
startOTA(); // 啟動OTA服務
開始SPIFFS();// 啟動 SPIFFS 并列出所有內容
開始MDNS();// 啟動 mDNS 響應者
啟動服務器();// 使用文件讀取處理程序和上傳處理程序啟動 HTTP 服務器
開始UDP();// 開始監(jiān)聽 UDP 消息到端口 123
WiFi.hostByName(ntpServerName, timeServerIP); // 獲取NTP服務器的IP地址
Serial.print("時間服務器 IP:\t");
Serial.println(timeServerIP);
發(fā)送NTP包(時間服務器IP);
}
在設置中,也沒有太多新的東西,我們只是啟動溫度傳感器,并檢查我們是否可以與之通信。如果未找到溫度傳感器,ESP 將重置。
從傳感器獲取溫度可能需要一些時間(最多 750 毫秒)。我們不希望我們的循環(huán)花費超過幾毫秒的時間,所以我們不能等待 750 毫秒。如果我們這樣做了,HTTP 服務器等就會開始出現(xiàn)問題。
解決方法是先請求溫度。然后傳感器將開始讀取模擬溫度,并將其存儲在內存中。與此同時,循環(huán)繼續(xù)運行,服務器刷新等。750毫秒后,我們再次聯(lián)系傳感器,并從其內存中讀取溫度。
為了告訴庫我們不想等待傳感器的模數(shù)轉換,我們使用 setWaitForConversion。
常量無符號長間隔NTP = ONE_HOUR; // 每小時更新時間
無符號長 prevNTP = 0;
unsigned long lastNTPResponse = millis();
const unsigned long intervalTemp = 60000; // 每分鐘進行一次溫度測量
無符號長 prevTemp = 0;
布爾 tmpRequested = 假;
常量無符號長 DS_delay = 750; // 從 DS18x20 讀取溫度可能需要 750 毫秒
uint32_t timeUNIX = 0; // 從時間服務器接收到的最新時間戳
無效循環(huán)(){
無符號長 currentMillis = millis();
if (currentMillis - prevNTP > intervalNTP) { // 每小時向時間服務器請求時間
prevNTP = currentMillis;
發(fā)送NTP包(時間服務器IP);
}
uint32_t 時間 = getTime(); // 檢查時間服務器是否有響應,如果有,獲取UNIX時間
如果(時間){
timeUNIX = 時間;
Serial.print("NTP 響應:\t");
Serial.println(timeUNIX);
lastNTPResponse = 毫秒();
} else if ((millis() - lastNTPResponse) > 24UL * ONE_HOUR) {
Serial.println("自上次 NTP 響應以來已超過 24 小時。重新啟動。");
Serial.flush();
ESP.reset();
}
如果(時間UNIX!= 0){
if (currentMillis - prevTemp > intervalTemp) { // 每分鐘,請求溫度
tempSensors.requestTemperatures(); // 從傳感器請求溫度(讀取它需要一些時間)
tmpRequested = 真;
prevTemp = currentMillis;
Serial.println("溫度要求");
}
if (currentMillis - prevTemp > DS_delay && tmpRequested) { // 請求溫度后 750 毫秒
uint32_t 實際時間 = timeUNIX + (currentMillis - lastNTPResponse) / 1000;
// 實際時間是上次 NTP 時間加上自上次 NTP 響應以來經過的時間
tmpRequested = 假;
浮動溫度 = tempSensors.getTempCByIndex(0); // 從傳感器獲取溫度
溫度=圓形(溫度* 100.0)/ 100.0;// 將溫度四舍五入到 2 位
Serial.printf("附加溫度到文件:%lu,", actualTime);
Serial.println(temp);
文件 tempLog = SPIFFS.open("/temp.csv", "a"); // 將時間和溫度寫入 csv 文件
tempLog.print(實際時間);
tempLog.print(',');
tempLog.println(temp);
tempLog.close();
}
} else { // 如果我們還沒有收到 NTP 響應,發(fā)送另一個請求
發(fā)送NTP包(時間服務器IP);
延遲(500);
}
server.handleClient(); // 運行服務器
ArduinoOTA.handle(); // 監(jiān)聽 OTA 事件
}
循環(huán)看起來要復雜得多,但實際上非常簡單。這一切都基于Blink without Delay。
有兩件事發(fā)生:
概述
這是一款帶有板載傳感器DHT22(AM2302)的校準數(shù)字溫濕度模塊,與DHT11相比具有更高的精度和更寬的測量范圍。
溫度
分辨率:0.1°C
精度:±0.5℃
測量范圍:-40°C ~ 80°C
濕度
分辨率:0.1%RH
精度:±2%RH (25°C)
測量范圍:0%RH ~ 99.9%RH
工作電壓:3.3V~5.5V
推薦儲存條件
溫度 : 10°C ~40°C
濕度:60%RH或以下
MQ135材質是SnO2,它是一種特殊的材料:暴露在干凈的空氣中幾乎不導電,但放在有可燃氣體的環(huán)境中,它的導電性能很好。只需制作一個簡單的電子電路,將電導率的變化轉換為相應的輸出信號。MQ135氣體傳感器對氨、硫化物、苯蒸汽、煙霧等有害氣體敏感。用于家庭、周邊環(huán)境有害氣體檢測裝置,適用于氨氣、芳烴、硫磺、苯蒸氣等有害氣體/煙霧、氣體檢測,檢測濃度范圍:10-1000ppm。在正常環(huán)境下,沒有檢測到氣體的環(huán)境下,將傳感器的輸出電壓設置為參考電壓,模擬輸出電壓約為1V,當傳感器檢測到氣體時,

每隔一小時,ESP 就會向 NTP 服務器請求時間。然后它會不斷檢查響應,并在收到 NTP 響應時更新時間。如果超過 24 小時沒有收到任何響應,則說明有問題,ESP 會自行重置。
每分鐘,ESP 都會向 DS18x20 傳感器請求溫度,并設置“tmpRequested”標志。傳感器將啟動模數(shù)轉換。
請求后 750 毫秒,當轉換應該完成時,ESP 從傳感器讀取溫度,并重置標志(否則,它將一遍又一遍地讀取相同的溫度)。然后它將時間和溫度寫入 SPIFFS 中的文件。
通過將其保存為文件系統(tǒng)中的 CSV 文件,我們可以輕松地將其下載到客戶端(使用正在運行的 Web 服務器),并且很容易使用 JavaScript 進行解析。
如果我們錯過了第一個 NTP 響應,timeUNIX 將為零。如果是這種情況,我們發(fā)送另一個 NTP 請求(否則,下一個請求將在一個小時后,并且溫度記錄僅在時間已知時開始)。
我們還需要運行服務器和 OTA 函數(shù)來處理 HTTP 和 OTA 請求。
設置函數(shù)、服務器處理程序和輔助函數(shù)
這些函數(shù)自上一個示例以來沒有改變,因此這里沒有必要介紹它們。不過,您確實需要它們來運行程序。下載帶有完整草圖示例的 ZIP 存檔。
SD卡模塊
該模塊(microsd卡適配器)是?micro sd卡讀卡器模塊,通過文件系統(tǒng)驅動和spi接口,微控制器系統(tǒng)完成micro sd卡文件的讀寫。用戶可以直接使用arduino ide自帶的sd卡完成借書卡的初始化和讀寫。

HTML 和 JavaScript
有一些 HTML 和 JavaScript 文件可以使用 Google Graphs 繪制溫度。我不會在這里介紹它,但如果你想知道它是如何工作的,你可以在 ZIP 存檔中找到這些文件。
使用示例

如果您打算長時間使用它,請將 SPIFFS 大小設置為 64KB 或更大。(您也可以增加第 80 行的記錄間隔以節(jié)省空間。)
代碼
用法
[代碼]
詮釋 LED=13;//內置LED引腳
整數(shù) MQ135=5;//MQ135的輸出引腳
無效設置()
{
?pinMode(LED,輸出);//LED為輸出
?pinMode(MQ135,輸入);//MQ135為輸入
?序列號.開始(9600);//串口監(jiān)視器的波特率為9600
??}
??無效循環(huán)()
??{
????int MQValue=digitalRead(MQ135);
????如果(MQValue==0)
????{
??????數(shù)字寫入(LED,高);//寫高電平到LED
??????Serial.print("有有害氣體");
????}
??????別的
??????{
????????數(shù)字寫入(LED,低);//將低電平寫入LED
????????Serial.print("很干凈");
??????}
????}
在第 138-140 行輸入您的 Wi-Fi 憑據(jù),然后點擊上傳。然后使用 Tools > ESP8266 Sketch Data Upload 將網頁和腳本上傳到 SPIFFS。
代碼
代碼
Nodemcu_Datalogger.ino
?
?
- 緊湊型多開關數(shù)據(jù)記錄器開源分享
- 簡單的數(shù)據(jù)記錄器開源設計
- 活動時間數(shù)據(jù)記錄器開源
- 基于Arduino Meag 2560的數(shù)據(jù)記錄器 0次下載
- GPS和AHRS數(shù)據(jù)記錄器開源分享
- 工作記錄器開源分享
- 溫度和濕度數(shù)據(jù)記錄器開源案例
- 溫度和濕度數(shù)據(jù)記錄器開源分享
- 基于Arduino的GPS數(shù)據(jù)記錄器
- 為Karts構建一個便宜的數(shù)據(jù)記錄器
- 數(shù)據(jù)記錄器con atmega32U4開源
- 附加固件下載固件以操作數(shù)據(jù)記錄器其他數(shù)據(jù)范圍。
- 愛華微膠囊記錄器TP-M725/TP-M525數(shù)據(jù)手冊 1次下載
- 溫度記錄器 1次下載
- 多參數(shù)數(shù)據(jù)記錄器設計與實現(xiàn)_杜文略 0次下載
- labview怎么記錄時間和數(shù)據(jù) 4208次閱讀
- 樹莓派Pico文件系統(tǒng)應用:數(shù)據(jù)記錄器 1427次閱讀
- 將“黑匣子”故障記錄器添加到“大(或?。┫洹毕到y(tǒng)中 751次閱讀
- 確定溫度記錄iButton的任務參數(shù) 591次閱讀
- 確定溫度記錄儀i按鈕設備的任務參數(shù) 716次閱讀
- iButton數(shù)據(jù)記錄器和iButton帽的IP等級 803次閱讀
- NodeMCU開發(fā)板的部署及調試 1902次閱讀
- PC打印機端口控制數(shù)據(jù)記錄器 823次閱讀
- 如何使用DS1678實時事件記錄器 946次閱讀
- digilent高分辨率便攜式數(shù)據(jù)記錄器介紹 1698次閱讀
- 基于無線通信技術的數(shù)據(jù)記錄系統(tǒng)設計 777次閱讀
- LCD顯示遠程溫度濕度數(shù)據(jù)記錄器與應用軟件的介紹 4869次閱讀
- 飛行記錄儀為什么稱為“黑匣子”呢?它是怎么制造的? 7956次閱讀
- 長時間CAN數(shù)據(jù)記錄的解決方案 2931次閱讀
- 精準定位!GPS定位及軌跡記錄器DIY教程 2.5w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
電子發(fā)燒友App






創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論