資料介紹
PCB圖如下:
?
成分
ESP8266-DEVKITC-02D-F 樂鑫系統(tǒng) |
× 1 |
DHT22 亞馬遜 |
× 1 |
MQ135空氣質(zhì)量傳感器模塊 | × 1 |
SD卡模塊 | × 1 |
40 針跳線母對母 20 厘米 | × 1 |
描述
Nodemcu 數(shù)據(jù)記錄器
您大多已經(jīng)在 ThingSpeak 和其他物聯(lián)網(wǎng)平臺上看到了帶有實時圖表和表格的數(shù)據(jù)記錄 Web 服務器。但我們也可以創(chuàng)建自己的網(wǎng)絡服務器并實時更新數(shù)據(jù),我們之前使用不同的板創(chuàng)建了許多網(wǎng)絡服務器。在這里,我們還將使用 DHT11 傳感器創(chuàng)建 ESP8266 Web 服務器數(shù)據(jù)記錄器。這里的溫度和濕度數(shù)據(jù)將使用AJAX在網(wǎng)頁上更新。
AJAX(異步 JavaScript 和 XML)允許通過在后臺與服務器共享少量數(shù)據(jù)來自動更新網(wǎng)站,而無需刷新整個網(wǎng)頁。這可確保在不重新加載整個網(wǎng)站的情況下更改網(wǎng)頁的某些部分。所以讓我們開始吧!
所需組件
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 地址打開網(wǎng)頁瀏覽器時,會執(zhí)行 handleRoot 函數(shù)。
無效句柄根()
{
字符串 s = MAIN_page; //讀取HTML內(nèi)容
server.send(200, "text/html", s); //發(fā)送網(wǎng)頁
}
下一個函數(shù) readData() 用于從 DHT11 傳感器讀取數(shù)據(jù)并將其發(fā)送到網(wǎng)頁。在這個循環(huán)中,NodeMCU 將 DHT11 值存儲到兩個浮點變量中:溫度和濕度,之后它將浮點變量轉(zhuǎn)換為字符串并將它們的數(shù)據(jù)存儲到另一個字符串變量“數(shù)據(jù)”中,并在請求時將其發(fā)送到網(wǎng)頁。
無效讀取數(shù)據(jù)()
{
String data = "{"溫度":""+ String(溫度) +"", "濕度":""+ String(濕度) +""}";
數(shù)字寫入(LED,!數(shù)字讀取(LED));
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ù)初始化網(wǎng)頁,然后使用 Wi-Fi 名稱和密碼將模塊與 Wi-Fi 連接。
序列號.開始(115200);
pinMode(DHTPin,輸入);
dht.begin();
WiFi.begin(ssid, 密碼);
server.begin();
第一個函數(shù)用于在客戶端請求 URI(統(tǒng)一資源標識符)“/”時調(diào)用“handleRoot”函數(shù),而第二個函數(shù)用于在對 URI“/readData”進行 POST 請求時調(diào)用“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)網(wǎng)設備的常見用途是監(jiān)控傳感器。使用前面示例中的代碼,我們可以請求時間,并將一些傳感器值保存到文件中。如果我們也運行服務器,我們可以在網(wǎng)頁的漂亮圖表中顯示這些數(shù)據(jù)。
溫度記錄儀
在以下示例中,我們將使用 DS18S20 溫度傳感器記錄一段時間內(nèi)的溫度并將其保存到 SPIFFS。然后它可以顯示在瀏覽器的圖表中。
安裝庫
首先,下載 Miles Burton 的 Dallas Temperature 庫和 Jim Studt 的 OneWire 庫:轉(zhuǎn)到 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 并列出所有內(nèi)容
開始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)問題。
解決方法是先請求溫度。然后傳感器將開始讀取模擬溫度,并將其存儲在內(nèi)存中。與此同時,循環(huán)繼續(xù)運行,服務器刷新等。750毫秒后,我們再次聯(lián)系傳感器,并從其內(nèi)存中讀取溫度。
為了告訴庫我們不想等待傳感器的模數(shù)轉(zhuǎn)換,我們使用 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 響應以來經(jīng)過的時間
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材質(zhì)是SnO2,它是一種特殊的材料:暴露在干凈的空氣中幾乎不導電,但放在有可燃氣體的環(huán)境中,它的導電性能很好。只需制作一個簡單的電子電路,將電導率的變化轉(zhuǎn)換為相應的輸出信號。MQ135氣體傳感器對氨、硫化物、苯蒸汽、煙霧等有害氣體敏感。用于家庭、周邊環(huán)境有害氣體檢測裝置,適用于氨氣、芳烴、硫磺、苯蒸氣等有害氣體/煙霧、氣體檢測,檢測濃度范圍:10-1000ppm。在正常環(huán)境下,沒有檢測到氣體的環(huán)境下,將傳感器的輸出電壓設置為參考電壓,模擬輸出電壓約為1V,當傳感器檢測到氣體時,
每隔一小時,ESP 就會向 NTP 服務器請求時間。然后它會不斷檢查響應,并在收到 NTP 響應時更新時間。如果超過 24 小時沒有收到任何響應,則說明有問題,ESP 會自行重置。
每分鐘,ESP 都會向 DS18x20 傳感器請求溫度,并設置“tmpRequested”標志。傳感器將啟動模數(shù)轉(zhuǎn)換。
請求后 750 毫秒,當轉(zhuǎn)換應該完成時,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)驅(qū)動和spi接口,微控制器系統(tǒng)完成micro sd卡文件的讀寫。用戶可以直接使用arduino ide自帶的sd卡完成借書卡的初始化和讀寫。
HTML 和 JavaScript
有一些 HTML 和 JavaScript 文件可以使用 Google Graphs 繪制溫度。我不會在這里介紹它,但如果你想知道它是如何工作的,你可以在 ZIP 存檔中找到這些文件。
使用示例
如果您打算長時間使用它,請將 SPIFFS 大小設置為 64KB 或更大。(您也可以增加第 80 行的記錄間隔以節(jié)省空間。)
代碼
用法
[代碼]
詮釋 LED=13;//內(nèi)置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 將網(wǎng)頁和腳本上傳到 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次閱讀
- 將“黑匣子”故障記錄器添加到“大(或小)箱”系統(tǒng)中 751次閱讀
- 確定溫度記錄iButton的任務參數(shù) 591次閱讀
- 確定溫度記錄儀i按鈕設備的任務參數(shù) 716次閱讀
- iButton數(shù)據(jù)記錄器和iButton帽的IP等級 803次閱讀
- NodeMCU開發(fā)板的部署及調(diào)試 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驅(qū)動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 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次下載 | 免費
評論