資料介紹
PCB圖如下:
?
成分
ESP8266-DEVKITC-02D-F 樂鑫系統 |
× 1 |
DHT22 亞馬遜 |
× 1 |
MQ135空氣質量傳感器模塊 | × 1 |
SD卡模塊 | × 1 |
40 針跳線母對母 20 厘米 | × 1 |
描述
Nodemcu 數據記錄器
您大多已經在 ThingSpeak 和其他物聯網平臺上看到了帶有實時圖表和表格的數據記錄 Web 服務器。但我們也可以創建自己的網絡服務器并實時更新數據,我們之前使用不同的板創建了許多網絡服務器。在這里,我們還將使用 DHT11 傳感器創建 ESP8266 Web 服務器數據記錄器。這里的溫度和濕度數據將使用AJAX在網頁上更新。
AJAX(異步 JavaScript 和 XML)允許通過在后臺與服務器共享少量數據來自動更新網站,而無需刷新整個網頁。這可確保在不重新加載整個網站的情況下更改網頁的某些部分。所以讓我們開始吧!
所需組件
NodeMCU ESP8266
DHT11 傳感器
跳線
DHT11傳感器用于測量溫度和濕度,通常用于創建氣象站。
電路原理圖
將 DHT11 連接到 NodeMCU 很容易。DHT11 的 VCC 和 GND 引腳連接到 3.3V 和 GND NodeMCU,而 DHT 的 Data 引腳連接到 NodeMCU 的 D5 (GPIO 14) 引腳。
為數據記錄編程 NodeMCU ESP8266
在直接開始編碼之前,安裝所需的庫,ESP8266 庫已預先安裝在 IDE 上;你只需要安裝 DHT11 庫
安裝庫后,包括所有必需的庫。
#include
#include
#include
#include "DHT.h"
現在在接下來的幾行中,輸入您的 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 地址打開網頁瀏覽器時,會執行 handleRoot 函數。
無效句柄根()
{
字符串 s = MAIN_page; //讀取HTML內容
server.send(200, "text/html", s); //發送網頁
}
下一個函數 readData() 用于從 DHT11 傳感器讀取數據并將其發送到網頁。在這個循環中,NodeMCU 將 DHT11 值存儲到兩個浮點變量中:溫度和濕度,之后它將浮點變量轉換為字符串并將它們的數據存儲到另一個字符串變量“數據”中,并在請求時將其發送到網頁。
無效讀取數據()
{
String data = "{"溫度":""+ String(溫度) +"", "濕度":""+ String(濕度) +""}";
數字寫入(LED,!數字讀取(LED));
server.send(200, "文本/平面", 數據);
延遲(2000);
溫度 = dht.readTemperature();
濕度 = dht.readHumidity();
Serial.print(濕度,1);
Serial.print(溫度,1);
}
在 void setup() 函數中,我們使用 .begin() 函數初始化波特率,DHT 傳感器,使用 server.begin() 函數初始化網頁,然后使用 Wi-Fi 名稱和密碼將模塊與 Wi-Fi 連接。
序列號.開始(115200);
pinMode(DHTPin,輸入);
dht.begin();
WiFi.begin(ssid, 密碼);
server.begin();
第一個函數用于在客戶端請求 URI(統一資源標識符)“/”時調用“handleRoot”函數,而第二個函數用于在對 URI“/readData”進行 POST 請求時調用“readData”函數
server.on("/", handleRoot);
server.on("/readData", readData);
void loop() 函數持續監聽來自客戶端的 HTTP 請求
無效循環(無效)
{
server.handleClient();
}
數據記錄
ESP8266 等物聯網設備的常見用途是監控傳感器。使用前面示例中的代碼,我們可以請求時間,并將一些傳感器值保存到文件中。如果我們也運行服務器,我們可以在網頁的漂亮圖表中顯示這些數據。
溫度記錄儀
在以下示例中,我們將使用 DS18S20 溫度傳感器記錄一段時間內的溫度并將其保存到 SPIFFS。然后它可以顯示在瀏覽器的圖表中。
安裝庫
首先,下載 Miles Burton 的 Dallas Temperature 庫和 Jim Studt 的 OneWire 庫:轉到 Sketch > Include Library ... > Manage Libraries 并搜索“Dallas Temperature”和“OneWire”(確保下載正確的版本) .
硬件
將 DS18S20 溫度傳感器的地(引腳 1)連接到 ESP 的地,將數據引腳(引腳 2)連接到 GPIO5,將 VCC(引腳 3)連接到 ESP 的 3.3V。最后,在數據引腳和 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); // 創建溫度傳感器類的實例
ESP8266WebServer 服務器(80);// 創建一個監聽 80 端口上的 HTTP 請求的 webserver 對象
文件 fsUploadFile; // 一個 File 變量來臨時存儲接收到的文件
ESP8266WiFiMulti wifiMulti;// 創建一個 ESP8266WiFiMulti 類的實例,名為 'wifiMulti'
const char *OTAName = "ESP8266"; // OTA 服務的名稱和密碼
const char *OTAPassword = "esp8266";
const char* mdnsName = "esp8266"; // mDNS 響應者的域名
WiFiUDP UDP;// 創建一個 WiFiUDP 類的實例來發送和接收 UDP 消息
IPAddress timeServerIP; // time.nist.gov NTP 服務器的 IP 地址
const char* ntpServerName = "time.nist.gov";
常量 int NTP_PACKET_SIZE = 48; // NTP 時間戳在消息的前 48 個字節中
字節數據包緩沖區[NTP_PACKET_SIZE];// 用于保存傳入和傳出數據包的緩沖區
這里唯一的新東西是 OneWire 和 DallasTemperature 庫,用于從傳感器獲取溫度。
設置
無效設置(){
序列號.開始(115200);// 啟動串口通信向計算機發送消息
延遲(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();// 開始監聽 UDP 消息到端口 123
WiFi.hostByName(ntpServerName, timeServerIP); // 獲取NTP服務器的IP地址
Serial.print("時間服務器 IP:\t");
Serial.println(timeServerIP);
發送NTP包(時間服務器IP);
}
在設置中,也沒有太多新的東西,我們只是啟動溫度傳感器,并檢查我們是否可以與之通信。如果未找到溫度傳感器,ESP 將重置。
從傳感器獲取溫度可能需要一些時間(最多 750 毫秒)。我們不希望我們的循環花費超過幾毫秒的時間,所以我們不能等待 750 毫秒。如果我們這樣做了,HTTP 服務器等就會開始出現問題。
解決方法是先請求溫度。然后傳感器將開始讀取模擬溫度,并將其存儲在內存中。與此同時,循環繼續運行,服務器刷新等。750毫秒后,我們再次聯系傳感器,并從其內存中讀取溫度。
為了告訴庫我們不想等待傳感器的模數轉換,我們使用 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; // 從時間服務器接收到的最新時間戳
無效循環(){
無符號長 currentMillis = millis();
if (currentMillis - prevNTP > intervalNTP) { // 每小時向時間服務器請求時間
prevNTP = currentMillis;
發送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 響應,發送另一個請求
發送NTP包(時間服務器IP);
延遲(500);
}
server.handleClient(); // 運行服務器
ArduinoOTA.handle(); // 監聽 OTA 事件
}
循環看起來要復雜得多,但實際上非常簡單。這一切都基于Blink without Delay。
有兩件事發生:
概述
這是一款帶有板載傳感器DHT22(AM2302)的校準數字溫濕度模塊,與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,它是一種特殊的材料:暴露在干凈的空氣中幾乎不導電,但放在有可燃氣體的環境中,它的導電性能很好。只需制作一個簡單的電子電路,將電導率的變化轉換為相應的輸出信號。MQ135氣體傳感器對氨、硫化物、苯蒸汽、煙霧等有害氣體敏感。用于家庭、周邊環境有害氣體檢測裝置,適用于氨氣、芳烴、硫磺、苯蒸氣等有害氣體/煙霧、氣體檢測,檢測濃度范圍:10-1000ppm。在正常環境下,沒有檢測到氣體的環境下,將傳感器的輸出電壓設置為參考電壓,模擬輸出電壓約為1V,當傳感器檢測到氣體時,
每隔一小時,ESP 就會向 NTP 服務器請求時間。然后它會不斷檢查響應,并在收到 NTP 響應時更新時間。如果超過 24 小時沒有收到任何響應,則說明有問題,ESP 會自行重置。
每分鐘,ESP 都會向 DS18x20 傳感器請求溫度,并設置“tmpRequested”標志。傳感器將啟動模數轉換。
請求后 750 毫秒,當轉換應該完成時,ESP 從傳感器讀取溫度,并重置標志(否則,它將一遍又一遍地讀取相同的溫度)。然后它將時間和溫度寫入 SPIFFS 中的文件。
通過將其保存為文件系統中的 CSV 文件,我們可以輕松地將其下載到客戶端(使用正在運行的 Web 服務器),并且很容易使用 JavaScript 進行解析。
如果我們錯過了第一個 NTP 響應,timeUNIX 將為零。如果是這種情況,我們發送另一個 NTP 請求(否則,下一個請求將在一個小時后,并且溫度記錄僅在時間已知時開始)。
我們還需要運行服務器和 OTA 函數來處理 HTTP 和 OTA 請求。
設置函數、服務器處理程序和輔助函數
這些函數自上一個示例以來沒有改變,因此這里沒有必要介紹它們。不過,您確實需要它們來運行程序。下載帶有完整草圖示例的 ZIP 存檔。
SD卡模塊
該模塊(microsd卡適配器)是?micro sd卡讀卡器模塊,通過文件系統驅動和spi接口,微控制器系統完成micro sd卡文件的讀寫。用戶可以直接使用arduino ide自帶的sd卡完成借書卡的初始化和讀寫。
HTML 和 JavaScript
有一些 HTML 和 JavaScript 文件可以使用 Google Graphs 繪制溫度。我不會在這里介紹它,但如果你想知道它是如何工作的,你可以在 ZIP 存檔中找到這些文件。
使用示例
如果您打算長時間使用它,請將 SPIFFS 大小設置為 64KB 或更大。(您也可以增加第 80 行的記錄間隔以節省空間。)
代碼
用法
[代碼]
詮釋 LED=13;//內置LED引腳
整數 MQ135=5;//MQ135的輸出引腳
無效設置()
{
?pinMode(LED,輸出);//LED為輸出
?pinMode(MQ135,輸入);//MQ135為輸入
?序列號.開始(9600);//串口監視器的波特率為9600
??}
??無效循環()
??{
????int MQValue=digitalRead(MQ135);
????如果(MQValue==0)
????{
??????數字寫入(LED,高);//寫高電平到LED
??????Serial.print("有有害氣體");
????}
??????別的
??????{
????????數字寫入(LED,低);//將低電平寫入LED
????????Serial.print("很干凈");
??????}
????}
在第 138-140 行輸入您的 Wi-Fi 憑據,然后點擊上傳。然后使用 Tools > ESP8266 Sketch Data Upload 將網頁和腳本上傳到 SPIFFS。
代碼
代碼
Nodemcu_Datalogger.ino
?
?
- 緊湊型多開關數據記錄器開源分享
- 簡單的數據記錄器開源設計
- 活動時間數據記錄器開源
- 基于Arduino Meag 2560的數據記錄器 0次下載
- GPS和AHRS數據記錄器開源分享
- 工作記錄器開源分享
- 溫度和濕度數據記錄器開源案例
- 溫度和濕度數據記錄器開源分享
- 基于Arduino的GPS數據記錄器
- 為Karts構建一個便宜的數據記錄器
- 數據記錄器con atmega32U4開源
- 附加固件下載固件以操作數據記錄器其他數據范圍。
- 愛華微膠囊記錄器TP-M725/TP-M525數據手冊 1次下載
- 溫度記錄器 1次下載
- 多參數數據記錄器設計與實現_杜文略 0次下載
- labview怎么記錄時間和數據 4208次閱讀
- 樹莓派Pico文件系統應用:數據記錄器 1427次閱讀
- 將“黑匣子”故障記錄器添加到“大(或小)箱”系統中 751次閱讀
- 確定溫度記錄iButton的任務參數 591次閱讀
- 確定溫度記錄儀i按鈕設備的任務參數 716次閱讀
- iButton數據記錄器和iButton帽的IP等級 803次閱讀
- NodeMCU開發板的部署及調試 1902次閱讀
- PC打印機端口控制數據記錄器 823次閱讀
- 如何使用DS1678實時事件記錄器 946次閱讀
- digilent高分辨率便攜式數據記錄器介紹 1698次閱讀
- 基于無線通信技術的數據記錄系統設計 777次閱讀
- LCD顯示遠程溫度濕度數據記錄器與應用軟件的介紹 4869次閱讀
- 飛行記錄儀為什么稱為“黑匣子”呢?它是怎么制造的? 7956次閱讀
- 長時間CAN數據記錄的解決方案 2931次閱讀
- 精準定位!GPS定位及軌跡記錄器DIY教程 2.5w次閱讀
下載排行
本周
- 1涂鴉各WiFi模塊原理圖加PCB封裝
- 11.75 MB | 76次下載 | 1 積分
- 2錦銳科技CA51F2 SDK開發包
- 24.06 MB | 29次下載 | 1 積分
- 3錦銳CA51F005 SDK開發包
- 19.47 MB | 3次下載 | 1 積分
- 4蘋果iphone 11電路原理圖
- 4.98 MB | 3次下載 | 2 積分
- 5基礎模擬電子電路
- 3.80 MB | 3次下載 | 1 積分
- 6RA-Eco-RA6M4-100PIN-V1.0開發板資料
- 34.89 MB | 1次下載 | 免費
- 7STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4編程手冊
- 3.32 MB | 1次下載 | 免費
- 8聯想A820t手機維修圖紙包括主板原理圖 尾板原理圖 點位圖
- 0.62 MB | 次下載 | 5 積分
本月
- 1AI智能眼鏡產業鏈分析
- 4.43 MB | 383次下載 | 免費
- 2蘇泊爾電磁爐線路的電路原理圖資料合集
- 2.02 MB | 296次下載 | 5 積分
- 3貼片三極管上的印字與真實名稱的對照表詳細說明
- 0.50 MB | 94次下載 | 1 積分
- 4長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
- 0.46 MB | 91次下載 | 5 積分
- 5涂鴉各WiFi模塊原理圖加PCB封裝
- 11.75 MB | 76次下載 | 1 積分
- 6錦銳科技CA51F2 SDK開發包
- 24.06 MB | 29次下載 | 1 積分
- 7AO4803A雙P通道增強型場效應晶體管的數據手冊
- 0.11 MB | 28次下載 | 2 積分
- 8長虹液晶彩電LS29機芯的技術資料說明
- 3.42 MB | 16次下載 | 2 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191388次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183342次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81588次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73815次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論