資料介紹
描述
該項(xiàng)目是一個(gè)相當(dāng)簡(jiǎn)單的天氣數(shù)據(jù)收集和存儲(chǔ)程序。
天氣數(shù)據(jù)由 Arduino 記錄,并通過向網(wǎng)絡(luò)服務(wù)器發(fā)送特制的 GET 請(qǐng)求每 10 分鐘發(fā)送到數(shù)據(jù)庫。
或者,您也可以將輸出發(fā)送到 20x4 LCD。
先決條件:
您必須已經(jīng)配置了 Web 服務(wù)器、數(shù)據(jù)庫和服務(wù)器端腳本語言,它們可以處理 HTTP GET 請(qǐng)求的查詢字符串中的名稱/值對(duì)。如果您使用的是 Windows,在典型的 LAMP/WAMP/WIMP 堆棧上啟動(dòng)和運(yùn)行非常容易,但讓所有這些一起工作超出了本文的范圍。
在我的例子中,我已經(jīng)配置了一臺(tái) Windows 7 機(jī)器來運(yùn)行一個(gè)標(biāo)準(zhǔn)的 WIMP 堆棧——
- Windows 7 上的 Microsoft IIS 7.5
- PHP 7.1.24 - windows.php.net/download/
- MySQL 社區(qū) 8.0.13 - dev.mysql.com/downloads
- 我還使用 PHPMyAdmin 的副本來幫助進(jìn)行數(shù)據(jù)庫配置 - phpmyadmin.net/
- 必須啟用 mysqli PHP 擴(kuò)展
重要的提示:
這個(gè)項(xiàng)目完全忽略了任何表面上的安全(不要按原樣將它放在 Internet 上,但它對(duì)您的 LAN 沒問題)并且我的數(shù)據(jù)庫優(yōu)化可能需要一些工作。
概述:
本文的重點(diǎn)是將數(shù)據(jù)從傳感器中獲取到我們的數(shù)據(jù)庫中,然后提取該數(shù)據(jù)并以某種方式顯示它,讓我們知道接下來會(huì)發(fā)生什么。
從現(xiàn)在開始,本文假設(shè)您有一個(gè)可用的 Web 服務(wù)器、PHP 和 MySQL。
數(shù)據(jù)庫配置:
對(duì)于這個(gè)項(xiàng)目,我創(chuàng)建了一個(gè)名為 weatherdata 的數(shù)據(jù)庫,并在該數(shù)據(jù)庫中創(chuàng)建了一個(gè)名為 master 的表。
除了每個(gè)數(shù)據(jù)庫條目的唯一標(biāo)識(shí)符之外,我們還想記錄 4 件事:
- 時(shí)間;
- 溫度
- 氣壓
- 濕度
所以我們需要 5 個(gè)我命名如下的字段:
- 流體;
- 時(shí)間戳
- 溫度
- 壓力
- 濕度
這是 phpMyAdmin 的樣子:
使用 phpMyAdmin 創(chuàng)建數(shù)據(jù)庫 weatherdata。跳過從界面創(chuàng)建表并在 MySQL 命令行客戶端中使用下面的腳本來創(chuàng)建表和字段:
CREATE TABLE master
(
uid INT(11) NOT NULL AUTO_INCREMENT,
timestamp DATETIME NOT NULL,
temperature DOUBLE(8,4) NOT NULL,
pressure DOUBLE(8,4) NOT NULL,
humidity DOUBLE(8,4) NOT NULL,
PRIMARY KEY (uid)
);
測(cè)試注意事項(xiàng):
您可以通過在瀏覽器的地址欄中手動(dòng)輸入 WEBSERVER_IP_ADDRESS/processincoming.php?t=9.30&p=98.80&h=75.70 并按回車鍵來測(cè)試設(shè)置(如果需要,可以更改值)。如果服務(wù)器正確處理它,您將看到這些值記錄在數(shù)據(jù)庫中并且它工作正常。如果它不起作用,則某處存在配置或設(shè)置錯(cuò)誤。
服務(wù)器端處理
數(shù)據(jù)庫輸入是通過 Arduino 每 10 分鐘向 Web 服務(wù)器發(fā)送一次 GET 請(qǐng)求來完成的,請(qǐng)求的查詢字符串中包含溫度、壓力和濕度值。
在 Arduino 代碼中,構(gòu)建并發(fā)送 URL 字符串:
urlString = "GET /processincoming.php?t=" + temperatureToDB + "&p=" +
pressureToDB + "&h=" + humidityToDB + " HTTP/1.1";
sendDataToServer(urlString);
sendDataToServer() 函數(shù)接受完整的字符串并將其發(fā)送到局域網(wǎng)中位于 192.168.1.35 的 Web 服務(wù)器:
void sendDataToServer(String stringToSend) {
//make sure i'm sending what I think I'm sending
Serial.println(stringToSend);
if (client.connect(server, 80))
{
client.println(stringToSend);
client.println("Host: 192.168.1.35");
client.println("Connection: close");
client.println();
}
else
{
Serial.println("connection failed");
}
}
我們發(fā)送的完整請(qǐng)求如下所示:
GET /processincoming.php?t=9.30&p=98.80&h=75.70 HTTP/1.1
應(yīng)該很明顯,但 t = 溫度值,p = 壓力值和 h = 濕度值
我在這里要注意的一件事是,此頁面請(qǐng)求不會(huì)產(chǎn)生通常會(huì)發(fā)送到瀏覽器的任何輸出(除了默認(rèn)響應(yīng)標(biāo)頭之外)。一旦 Arduino 發(fā)送數(shù)據(jù),它就完成了直到下一個(gè)周期并且不需要解析響應(yīng),甚至不需要等待響應(yīng)。
提示:為您的網(wǎng)絡(luò)服務(wù)器提供 LAN 上的靜態(tài) IP 地址。如果您依賴 DHCP,您可能會(huì)發(fā)現(xiàn)自己在修改 Arduino 代碼以說明每次服務(wù)器重新啟動(dòng)時(shí)主機(jī) IP 都會(huì)發(fā)生變化。
此處包含的代碼 (WeatherStation_v1_webclient_no_lcd.ino) 編譯為 1304 字節(jié),因此適用于較小的設(shè)備。
顯示數(shù)據(jù):
文件 weather.php 負(fù)責(zé)顯示我們的天氣數(shù)據(jù)。顯示頁面是由腳本生成的簡(jiǎn)單 HTML 表格,不需要除 mysqli 之外的任何其他 PHP 擴(kuò)展。
默認(rèn)情況下,此頁面顯示長(zhǎng)達(dá) 3 小時(shí)的數(shù)據(jù),因此我們的 Arduino 應(yīng)該至少運(yùn)行了那么長(zhǎng)時(shí)間才能記錄足夠的數(shù)據(jù)量。如果您嘗試在沒有足夠數(shù)據(jù)點(diǎn)的情況下運(yùn)行它,您將收到數(shù)組錯(cuò)誤。
收集數(shù)據(jù)至少 3 小時(shí)后,輸出 HTML 應(yīng)如下所示:
最后,隨附的原理圖附有 LCD 輸出 - 可以忽略。
備選方案
在這種情況下,不要忽視 LCD,您將需要它。我還包括第二個(gè) Arduino 程序,它結(jié)合了上述內(nèi)容并輸出到 20x4 LCD。
可以在此處找到 LCD 組件的完整描述:https ://create.arduino.cc/projecthub/ragingradish/improved-weatherstation-20x4-18dd89
程序的 LCD 部分已更新,以確認(rèn)以太網(wǎng)已啟動(dòng)并正在運(yùn)行,但其他方面沒有變化。
為了將數(shù)據(jù)發(fā)送到服務(wù)器,添加并初始化了適當(dāng)?shù)膸欤缓髮l件插入到循環(huán)中:
//send data to server every 10 minutes
if ((mainLoop == 0) || (mainLoop % 10 == 0))
{
temperatureToDB = currentTemp;
pressureToDB = currentPressure;
humidityToDB = currentHumid;
urlString = "GET /processincoming.php?t=" + temperatureToDB + "&p=" +
pressureToDB + "&h=" + humidityToDB + " HTTP/1.1";
sendDataToServer(urlString);
}
運(yùn)行 LCD 版本的代碼是 WeatherStation_20x4_v1_webclient.ino 并編譯為 2090 字節(jié)。你需要一個(gè)有足夠內(nèi)存的設(shè)備來運(yùn)行它。
- 物聯(lián)網(wǎng)迷你天氣預(yù)報(bào)開源分享
- Farmaid數(shù)據(jù)收集器開源分享
- 通過HTTP請(qǐng)求調(diào)用API從Open Weather下載天氣數(shù)據(jù)
- 航空天氣按鈕開源分享
- 天氣預(yù)報(bào)顯示開源項(xiàng)目
- 電子紙潮汐和天氣追蹤器開源分享
- 使用Blues Wireless和Qubitro的物聯(lián)網(wǎng)天氣數(shù)據(jù)記錄器
- 基于Arduino MKR ZERO的天氣數(shù)據(jù)記錄器 0次下載
- 使用TTGO ESP32和Visuino從互聯(lián)網(wǎng)上獲取天氣數(shù)據(jù)
- Zambreti天氣預(yù)報(bào)器開源分享
- BME680天氣監(jiān)測(cè)裝置開源分享
- 基于STM32的ESP8266天氣時(shí)鐘(2)--------MCU獲取天氣數(shù)據(jù)
- USB數(shù)據(jù)抓包軟件程序下載 7次下載
- PIC24H系列參考手冊(cè)之程序存儲(chǔ)器
- 一種智能大氣數(shù)據(jù)測(cè)量系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- AWTK 開源串口屏開發(fā)(11) - 天氣預(yù)報(bào) 270次閱讀
- 燃氣數(shù)字壓力記錄儀的設(shè)計(jì)及應(yīng)用 593次閱讀
- 用小安派開源硬件制作一個(gè)桌面天氣站 809次閱讀
- GaussDB數(shù)據(jù)庫存儲(chǔ)過程介紹 1054次閱讀
- 前沿開源技術(shù)領(lǐng)域的開源大數(shù)據(jù)一一解讀 1005次閱讀
- S7-200 CPU擴(kuò)展程序存儲(chǔ)區(qū) 975次閱讀
- Python如何爬取天氣數(shù)據(jù) 1669次閱讀
- 如何為MSP430設(shè)計(jì)固件以收集和處理IC的數(shù)據(jù) 1881次閱讀
- C語言編程程序的存儲(chǔ)類別 3685次閱讀
- 關(guān)于騰訊的開源分布式存儲(chǔ)系統(tǒng)DCache 1970次閱讀
- 淺談 Linux 程序 Orbital Apps 開源程序集合 845次閱讀
- 開源存儲(chǔ)的六大優(yōu)勢(shì) 3975次閱讀
- 淺談外部程序存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器操作命令 5260次閱讀
- 剖析混合存儲(chǔ)陣列的優(yōu)勢(shì),以及最適合混合存儲(chǔ)的各種數(shù)據(jù)類型 6854次閱讀
- 51單片機(jī)存儲(chǔ)程序和數(shù)據(jù) 9600次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多