資料介紹
描述
介紹
以下項(xiàng)目使用土壤濕度傳感器、DHT11 溫度傳感器和 ESP8266 來收集溫度、濕度和水分讀數(shù)并將它們發(fā)送到 ThingSpeak。本文將幫助您學(xué)習(xí)使用 ESP8266 的基礎(chǔ)知識(shí),并通過 ThingSpeak 等 API 將傳感器數(shù)據(jù)發(fā)送到網(wǎng)站。
傳感器簡(jiǎn)介
DHT11溫濕度傳感器模塊是一款基本型、低成本的數(shù)字溫濕度傳感器。它使用電容式濕度傳感器和熱敏電阻來測(cè)量周圍的空氣,并在數(shù)據(jù)引腳上輸出數(shù)字信號(hào)(不需要模擬輸入引腳)。
土壤濕度傳感器模塊對(duì)環(huán)境濕度最為敏感,一般用于檢測(cè)土壤的含水量;模塊在土壤濕度小于設(shè)定閾值時(shí)DO口輸出高電平,當(dāng)土壤濕度超過設(shè)定閾值時(shí),模塊D0輸出低電平;小板數(shù)字輸出D0可直接與單片機(jī)相連,單片機(jī)檢測(cè)高低,從而檢測(cè)土壤水分;小板數(shù)字量輸出DO店繼電器模塊可直接驅(qū)動(dòng)蜂鳴器模塊,可組成土壤水分報(bào)警設(shè)備;小板模擬量輸出AO和AD模塊通過AD轉(zhuǎn)換器相連,可以得到更準(zhǔn)確的土壤水分值。
編程 ESP8266
為了通過互聯(lián)網(wǎng)發(fā)送數(shù)據(jù),我們需要先將 ESP8266 連接到 WI-FI 網(wǎng)絡(luò),然后對(duì)其進(jìn)行編程以收集值并將其發(fā)送到 ThingSpeak API。
其代碼解釋如下:
首先你需要下載 ESP8266 和 ThingSpeak 的庫,你可以在這里找到:
ThingSpeak 庫:https ://github.com/mathworks/thingspeak-arduino
要下載 ESP8266 庫,請(qǐng)按照以下步驟操作:
- 現(xiàn)在打開 Arduino IDE 并單擊File > Preferences 。
- 一個(gè)窗口會(huì)打開這樣
- 將 URL 粘貼到框中,然后單擊“確定”。
- 現(xiàn)在轉(zhuǎn)到工具 > 板 > 板管理器。
- 如圖所示在方框上輸入“ESP8266”,您將獲得安裝選項(xiàng),選擇最新版本并單擊安裝。
現(xiàn)在,為了使用ESP8266,首先配置如下電路。此外,確保在繼續(xù)之前從 Arduino UNO 中移除微控制器,
現(xiàn)在,我們首先需要將 ESP8266 設(shè)置為編程模式,我們使用以下步驟執(zhí)行此操作:
- 打開電路電源。
- 按住閃光燈開關(guān)。
- 在按住閃光燈開關(guān)的同時(shí),按一次復(fù)位開關(guān)。
- 現(xiàn)在,松開閃光燈開關(guān)。
如果正確執(zhí)行此過程,您可能會(huì)看到 ESP8266 中的藍(lán)色 LED 閃爍。完成這些步驟后,我們可以繼續(xù)上傳實(shí)際程序
下面簡(jiǎn)單了解一下程序:
#include "ThingSpeak.h"
#include
//------- WI-FI details ----------//
char ssid[] = " "; //SSID here
char pass[] = " "; // Passowrd here
//--------------------------------//
//----------- Channel details ----------------//
unsigned long Channel_ID = ; // Your Channel ID
const char * myWriteAPIKey = " "; //Your write API key
//-------------------------------------------//
const int Field_Number_1 = 1;
const int Field_Number_2 = 2;
const int Field_Number_3 = 3;
String value = "";
int value_1 = 0, value_2 = 0, value_3 = 0;
int x, y, z;
WiFiClient client;
首先,我們包含庫并設(shè)置所需的變量。在 ssid 和 pass 下提供您的 Wi-Fi 憑據(jù)(名稱和密碼)。分別給出通道 ID 和寫入 API 密鑰。如果你想知道如何設(shè)置 thingspeak,你可以參考這個(gè)網(wǎng)站:Thingspeak 設(shè)置和基礎(chǔ) - Robo India || 教程 || 學(xué)習(xí)阿杜諾 || 機(jī)器人學(xué)。由于我們的項(xiàng)目中將包含三個(gè)字段(濕度、溫度、水分),因此我們使用三個(gè)變量作為字段編號(hào),三個(gè)變量作為值。
void setup()
{
Serial.begin(115200);
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
internet();
}
在設(shè)置下,我們只需將波特率設(shè)置為 115200 并初始化 Wi-Fi 和 ThingSpeak 客戶端模式。
void internet()
{
if (WiFi.status() != WL_CONNECTED)
{
while (WiFi.status() != WL_CONNECTED)
{
WiFi.begin(ssid, pass);
delay(5000);
}
}
}
void upload()
{
ThingSpeak.writeField(Channel_ID, Field_Number_1, value_1, myWriteAPIKey);
delay(15000);
ThingSpeak.writeField(Channel_ID, Field_Number_2, value_2, myWriteAPIKey);
delay(15000);
ThingSpeak.writeField(Channel_ID, Field_Number_3, value_3, myWriteAPIKey);
delay(15000);
value = "";
}
互聯(lián)網(wǎng)和上傳功能被定義為將 ESP8266 連接到 Wi-Fi 并將接收到的數(shù)據(jù)上傳到 Thingspeak。
現(xiàn)在,這是核心部分:
void loop()
{
internet();
if (Serial.available() > 0)
{
delay(100);
while (Serial.available() > 0)
{
value = Serial.readString();
if (value[0] == '*')
{
if (value[7] == '#')
{
value_1 = ((value[1] - 0x30) * 10 + (value[2] - 0x30));
value_2 = ((value[3] - 0x30) * 10 + (value[4] - 0x30));
value_3 = ((value[5] - 0x30) * 10 + (value[6] - 0x30));
}
}
}
}
upload();
}
為了發(fā)送數(shù)據(jù),我們首先將其對(duì)齊到所需的流中,然后添加開始和停止符號(hào)。這可以用一個(gè)例子來解釋:
假設(shè)在給定時(shí)間,溫度、濕度和濕度的值分別為30C、71% 和 62% 。這些值中的每一個(gè)最大值都可以是 2 位整數(shù)。如果所有這些值都以相同的順序?qū)懺谝黄?,那就?/font>30-71-62 。或者在程序中我們會(huì)將其視為字符串“ 307162 ”。通過這種方式,我們將傳感器值發(fā)送到串行端口,隨后由 ESP8266 中的程序分離。但是,我們必須定義一個(gè)開始和停止符號(hào)來區(qū)分兩組值。這是使用作為“*”(星號(hào))的起始符號(hào)和作為“#”(散列)的終止符號(hào)來完成的。
因此,為此我們聲明空字符串類型變量。在Arduino程序中你會(huì)看到,當(dāng)我們要向這個(gè)變量寫入數(shù)據(jù)時(shí),首先向串口發(fā)送開始符號(hào),然后發(fā)送數(shù)據(jù)流,最后發(fā)送停止符號(hào)。
在程序中,這些值使用索引簡(jiǎn)單地分開。
value_1 保存溫度,value_2 保存濕度,value_3 保存水分值。
請(qǐng)注意,您不能發(fā)送小數(shù)值。根據(jù)我們用來發(fā)送數(shù)據(jù)的方法,這是可以理解的。
所以,現(xiàn)在如果您已按照描述將 ESP8266 設(shè)置為編程模式,您就可以通過 ESP8266 上傳代碼了。再次確保所有連接正確,不要將ESP8266的任何引腳連接到5V ,否則你會(huì)燒毀IC 。_ 此外,請(qǐng)記住在上傳代碼之前從Arduino板上移除微控制器。還要確保你選擇_ 該板作為“ GENERICESP8266模塊”。
完成這些步驟后,您可以按上傳按鈕。
Arduino編程
現(xiàn)在您已經(jīng)完成了 ESP8266 的編程。我們可以繼續(xù)上傳 Arduino 程序。確保移除 ESP8266 連接,然后繼續(xù)。另外,將開發(fā)板更改為 'Arduino UNO' 。
該電路中使用的傳感器需要一個(gè)模擬引腳和一個(gè)數(shù)字引腳。DHT11 通過數(shù)字引腳讀取,該數(shù)字引腳在程序中設(shè)置為引腳 5。土壤濕度傳感器引腳設(shè)置為 A0 模擬引腳。
現(xiàn)在,如前所述,我們不能使用十進(jìn)制數(shù)。這在發(fā)送溫度和濕度值時(shí)成為一個(gè)問題。因此,我們使用 round() 函數(shù)形式的“math.h”庫來解決這個(gè)問題。此函數(shù)只是將十進(jìn)制數(shù)近似為最接近的整數(shù)。
編程的工作簡(jiǎn)要說明如下:
DHT11
為了使用 DHT11,我們需要安裝它的庫:https ://drive.google.com/open?id=1aWuF115pMaZbySQS2CIHBxJiPSM1ezhE
現(xiàn)在為了獲得讀數(shù),我們只需使用函數(shù)dht.humidity和dht.temperature ,這會(huì)為我們提供相應(yīng)的十進(jìn)制值。為了發(fā)送使用這些數(shù)據(jù),我們通過簡(jiǎn)單地將值傳遞為 round(DHT.humidity) 和 round(DHT.temperature) 來四舍五入。
mySerial.print('*'); // Starting char
mySerial.print(round(DHT.temperature)); //2 digit data
mySerial.print(round(DHT.humidity)); //2 digit data
您還可以參考 DHT11 的示例程序以更好地理解代碼
這是 DHT11 的連接:
請(qǐng)注意,此數(shù)據(jù)引腳連接到引腳 2。您可以通過更改示例程序中的引腳值來連接到所需的引腳。
土壤濕度
土壤濕度傳感器值在模擬引腳上讀取。首先,您需要知道在您的濕潤(rùn)土壤樣本中使用時(shí)土壤水分的最大模擬輸出是多少。只需按照此處所示進(jìn)行連接,并上傳以下代碼:(觀察串行繪圖儀)
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); delay(2000);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.print("Start");
Serial.println(analogRead(A0));
}
現(xiàn)在將傳感器放入土壤中,查看達(dá)到的最大讀數(shù)。該值將代表 100% 的濕度。在我的例子中,這是 550?,F(xiàn)在為了獲得相應(yīng)的整數(shù)百分比值,我們使用 map() 函數(shù)。模擬讀數(shù)是在 op_value 變量中獲取的,所以我們所做的就是:
op_value = map(op_value, 550, 0, 0, 100);
這樣寫意味著 550 是 100%,0 是 0%。
這就是循環(huán)語句現(xiàn)在的樣子
ack = 0;
int chk = DHT.read11(DHTxxPIN);
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack = 1;
break;
}
if (ack == 0)
{
Serial.print("Temperature(*C) = ");
Serial.println(DHT.temperature);
Serial.print("Humidity(%) = ");
Serial.println(DHT.humidity);
op_value = analogRead(A0);
op_value = map(op_value,550,0,0,100);
Serial.print("Moisture(%): ");
Serial.print(op_value);
Serial.print("%");
Serial.println("\n ------------------------- \n");
//------Sending Data to ESP8266--------//
mySerial.print('*'); // Starting char
mySerial.print(round(DHT.temperature)); //2 digit data
mySerial.print(round(DHT.humidity)); //2 digit data
mySerial.print(op_value); //2 digit data
mySerial.println('#'); // Ending char
//------------------------------------//
delay(2000);
}
if (ack == 1)
{
Serial.print("NO DATA");
Serial.print("\n\n");
delay(2000);
}
我們使用 ack 變量來簡(jiǎn)單地檢查 DHT 是否正確連接。請(qǐng)注意,不需要對(duì)土壤水分值使用 round() 函數(shù),因?yàn)樗呀?jīng)是一個(gè) 2 位整數(shù)。
將電路配置為與顯示的各個(gè)部分相同。上傳 Arduino 代碼時(shí),確保 ESP8266 的 GPIO0 和 RST 沒有接地。
電路
連接最終應(yīng)該是這樣的:
DHT11
數(shù)據(jù)引腳-->pin5
Vcc------>5V
地線------>地線
土壤水分傳感器
A0-------->A0
Vcc-------->5V
地線------>地線
ESP8266
3.3V------>3.3V
EN---------->3.3V
地線------>地線
Rx-------->pin10
Tx---------->pin11
RST------>斷開連接
GPIO0----->斷開連接
GPIO2------>斷開連接
最后電路可能看起來像這樣:
物語
您將收到的第一組數(shù)據(jù)全為零。這可確保您的 Wi-Fi 連接和 ThingSpeak 連接都正常運(yùn)行。現(xiàn)在,請(qǐng)記住我們在發(fā)送每個(gè)字段的讀數(shù)之前添加了 15 秒的延遲。因此,將所有數(shù)據(jù)發(fā)送到各自的字段總共需要 45 秒。閱讀圖表可能如下所示:
您可以進(jìn)一步通過簡(jiǎn)單的 Matlab 代碼將數(shù)據(jù)相互比較。在使用 thingSpeakRead() 函數(shù)時(shí),我們使用參數(shù) NumMinutes 來檢索指定持續(xù)時(shí)間內(nèi)的數(shù)據(jù)。所以,寫 10 意味著檢索 10 分鐘前的數(shù)據(jù)。
此外,由于 15 秒的延遲,在每個(gè)字段中的新讀數(shù)之前,它們將始終是兩個(gè) NaN 值。因此,我們使用 ~isnan() 從變量中刪除這些值。
確保填寫通道 ID 和讀取 API 密鑰變量:
readID = ;
readkey = ' ';
hum = thingSpeakRead(readID, 'Field', 2, 'NumPoints', 10, 'ReadKey', readkey);
moist= thingSpeakRead(readID, 'Field', 3, 'NumPoints', 10, 'ReadKey', readkey);
hum = hum(~isnan(hum));
moist = moist(~isnan(moist));
stem(moist(end-10:end),hum(end-10:end)')
xlabel('Moisture(%)')
ylabel('Humidity(%)')
readID = ;
readkey = ' ';
temp = thingSpeakRead(readID, 'Field', 1, 'NumMinutes', 10, 'ReadKey', readkey);
moist= thingSpeakRead(readID, 'Field', 3, 'NumMinutes', 10, 'ReadKey', readkey);
temp = temp(~isnan(temp));
moist = moist(~isnan(moist));
stem(moist(end-10:end),temp(end-10:end)')
xlabel('Moisture (%)');
ylabel('Temperature (C)');
錯(cuò)誤
以下是您可能會(huì)遇到的錯(cuò)誤:
- ESP8266錯(cuò)誤:
如果您遇到此錯(cuò)誤,則表示您上傳代碼時(shí) ESP8266 未處于編程模式。所以,首先要確保你的連接是正確的。特別檢查接地引腳連接到 GPIO0 和 RST 。此外,請(qǐng)確保您使用與本文中相同的 esp 和 thingspeak 庫,以避免任何進(jìn)一步的錯(cuò)誤。
- ThingSpeak 錯(cuò)誤:
發(fā)送到 ThingSpeak 的第一個(gè)讀數(shù)將全部為零。這表明 ESP8266 和 ThingSpeak 之間已成功建立連接。現(xiàn)在,如果您只收到零,那么您可能需要檢查是否正在傳遞來自 Arduino 的數(shù)據(jù)。我們這樣做如下,
打開您的串行監(jiān)視器并以*XXXXXX# 格式鍵入任何隨機(jī)值,這類似于我們發(fā)送傳感器值的方式。如果您在圖表中看到結(jié)果,則表示正在傳遞值。但是,傳感器值不是我們需要的正確整數(shù)格式。查看您是否可以找到在串行端口中發(fā)送的整數(shù)類型,確保在 myserial.print() 函數(shù)中傳遞的值使用 round() 函數(shù)或基于您的程序的任何其他方法四舍五入。唯一的要求是值必須是 2 位整數(shù)。
這是因?yàn)樽兞繘]有足夠的值來制作繪圖。正如代碼中提到的,它需要10 個(gè)值來制作 plot 。此外,它從過去 10 分鐘的操作中獲取這 10 個(gè)值。因此,如果您在那么長(zhǎng)的時(shí)間內(nèi)沒有使用該系統(tǒng),那么您將沒有足夠的價(jià)值。您可以隨時(shí)根據(jù)需要更改繪制圖形的持續(xù)時(shí)間。但請(qǐng)記住,第一次運(yùn)行系統(tǒng)時(shí),您將需要等待 10-15 分鐘才能獲得繪圖。您可以將程序更改為較短的持續(xù)時(shí)間,但請(qǐng)記住,無論您選擇什么持續(xù)時(shí)間,它都必須足以讓 10 個(gè)值準(zhǔn)備好在現(xiàn)場(chǎng)使用。您可以進(jìn)行的最短持續(xù)時(shí)間為 5 分鐘。
- 閃爍的LED和低代碼:Arduino/ESP8266和Hackeet基礎(chǔ)知識(shí)
- 樂鑫ESP8266_技術(shù)參考手冊(cè)
- 樂鑫ESP8266-DevKitC_入門指南
- 樂鑫ESP8266-DevKitS_用戶指南
- 樂鑫ESP8266-DevKitC-V1參考設(shè)計(jì)
- 樂鑫ESP8266-DevKitS-V1參考設(shè)計(jì)
- ESP8266學(xué)習(xí)之路——環(huán)境部署
- ESP8266一鍵燒寫軟件下載 27次下載
- ESP8266
- ESP8266 PCB的模塊封裝庫下載 172次下載
- Esp8266原理圖分享 505次下載
- ESP8266系列封裝庫資源下載 0次下載
- 中移合物固件ESP8266軟件下載 8次下載
- 機(jī)智云ESP8266模組固件資料下載 65次下載
- ESP8266系列模塊選型 37次下載
- ESP8266紅外信號(hào)收發(fā)實(shí)驗(yàn) 1678次閱讀
- ESP8266硬件 4144次閱讀
- ESP8266/ESP32自動(dòng)下載原理 4249次閱讀
- 如何使用ESP8266制作可配置的Web服務(wù)器 1.2w次閱讀
- ESP8266上運(yùn)行代碼如何實(shí)現(xiàn) 2768次閱讀
- 如何利用ESP8266實(shí)現(xiàn)智能手表的設(shè)計(jì) 2999次閱讀
- STM32系列設(shè)計(jì),ESP8266聯(lián)網(wǎng)授時(shí)時(shí)鐘 7825次閱讀
- 從5方面描述STM32F407+ESP8266連接機(jī)智云過程 1.1w次閱讀
- esp8266中文資料匯總(esp8266引腳圖_與單片機(jī)連接_串口wifi實(shí)例) 22.4w次閱讀
- ESP8266的基礎(chǔ)知識(shí),怎么獲取網(wǎng)絡(luò)同步時(shí)間(北京時(shí)間) 6.2w次閱讀
- esp8266固件如何升級(jí)_ESP8266WIFI模塊固件升級(jí) 4.2w次閱讀
- ESP8266 Wi-Fi到底傳多遠(yuǎn)_esp8266 wifi信號(hào)強(qiáng)度測(cè)距 5.1w次閱讀
- 遠(yuǎn)程控制通訊--基于Arduino + ESP8266控制LED燈 3.9w次閱讀
- esp8266 at指令集詳解 14.1w次閱讀
- esp8266串口wifi實(shí)例 1.8w次閱讀
下載排行
本周
- 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)論
查看更多