用ARDUINO開(kāi)發(fā)板自制溫濕度計(jì)(含WEMOS D1開(kāi)發(fā)板環(huán)境安裝)
ARDUINO從入門到創(chuàng)客帶師第四彈 自制溫濕度計(jì)(翻車)
咱想起以前實(shí)驗(yàn)室的墻上掛著的介紹說(shuō)過(guò)法拉第之所謂偉大的原因是他不止把成功的經(jīng)歷寫在科學(xué)日記里,也把翻車失敗的經(jīng)歷寫進(jìn)去,因此咱對(duì)于咱翻車的經(jīng)歷也毫不避諱
其實(shí)關(guān)于這個(gè)我們自己有自己的方法:失傳技術(shù)研究所小講堂 篇七十三:在自家建立小型氣象站 在自家建立小型氣象站(后續(xù)) 小米米家電子墨水屏溫濕度計(jì)PRO測(cè)評(píng) 這些方案的精度都比我們這次要做的成本要低,我們這次的唯一的優(yōu)勢(shì)是自己手搓的成本很低
通過(guò)本篇教程,我們開(kāi)始邁向自制自動(dòng)氣象站的第一步
上期:ARDUINO從入門到創(chuàng)客帶師第三彈:用單片機(jī)開(kāi)發(fā)板自制MIDI音樂(lè)盒(預(yù)算15)
本期依然是利用ARDUINO單片機(jī)開(kāi)發(fā)板自己做系列,這次咱要用到的有:
ARDUINO 開(kāi)發(fā)板,如果僅僅是想要讀取傳感器模塊的信息可以是14包郵的基于AVR 8位單片機(jī)的UNO,這里我們還提供進(jìn)階的可以WIFI聯(lián)網(wǎng)的方案需要用到D1 MINI或者ARDUINO D1模塊,前者10塊錢包郵吧后者貴點(diǎn)16-18 NODEMCU也是可以的,因?yàn)槲覀兊哪K供電可以是3.3-5V范圍中的任意電壓,此外NODEMCU也有5V輸出
DHT11溫濕度傳感器模塊

單模塊的成本很便宜的

如果運(yùn)氣好,你可以買到5元包郵或者滿9.9包郵的

當(dāng)然精度很一般,濕度精度5%,溫度精度±2℃ 算上開(kāi)發(fā)板和杜邦線這套玩意成本也有20了,這么一想小米的溫濕度計(jì)帶藍(lán)牙5.0模塊和挺大一塊電子墨水屏才賣70是不是很便宜?這個(gè)教程帶給各位的,可能只有成就感了
在本期教程中,我們將利用全世界最好的搜索引擎,實(shí)際地解決自己需要解決的問(wèn)題(并沒(méi)有解決)
首先我們打開(kāi)TB,搜索DHT11
然后我們很容易就能找到相關(guān)結(jié)果

默認(rèn)搜索結(jié)果的第一個(gè)就可以,點(diǎn)進(jìn)去
這家雖然東西又貴據(jù)說(shuō)質(zhì)量還比華強(qiáng)北其他店鋪賣的同款更便宜的質(zhì)量還差,但是這并不耽誤我們只看不買
點(diǎn)進(jìn)去之后往下翻,我們會(huì)看到這家店的商品信息中提供的資料

這就是我們想要的

下載之后解壓DHT11的資料

其中一個(gè)是原理圖、說(shuō)明書、測(cè)試程序之類的資料,這個(gè)其實(shí)對(duì)于了解模塊有幫助但是并不是這次項(xiàng)目需要的文件。

畢竟知道這個(gè)傳感器包括一個(gè)電阻式感濕元件和一個(gè)NTC測(cè)溫元件,并與一個(gè)高性能8位單片機(jī)相連接之類的并不能改善這個(gè)模塊感人的精度……

這里給的測(cè)試程序居然還是51單片機(jī)的,天啊,這年頭誰(shuí)還用這玩意,STM32都直接用ARDUINO環(huán)境了,單片機(jī)真的需要從51學(xué)起嗎?你是個(gè)成熟的圖吧垃圾佬了,該學(xué)會(huì)怎么利用現(xiàn)成的開(kāi)源項(xiàng)目和調(diào)用庫(kù)了。

這有個(gè)WIFI資料才是我們更感興趣的東西

看WORD文檔的意思是這個(gè)用了還可以直接聯(lián)網(wǎng),不錯(cuò)啊

有項(xiàng)目文件

看得出來(lái)項(xiàng)目文件里面代碼注釋提到了11號(hào)引腳,那應(yīng)該就是我們這次的溫度傳感器模塊需要連接的引腳了

接好線之后我們慢慢盤代碼里面可能出BUG的地方
首先這個(gè)代碼提到了一個(gè)叫DHT.h的東西,簡(jiǎn)單通過(guò)搜索找出來(lái)放到庫(kù)里




關(guān)于ESP8266WiFi.h 報(bào)錯(cuò)的問(wèn)題可以先通過(guò)加載庫(kù)頂一下

其實(shí)這個(gè)代碼的注釋說(shuō)了,不建議用基于AVR單片機(jī)的
如果這時(shí)候你用的是14包郵的UNO或者D1 D1MINI的話你還需要CH340 CH341的驅(qū)動(dòng),用上次我們?cè)诎⒖帜亲鯟PU溫度顯示項(xiàng)目時(shí)候的驅(qū)動(dòng)就行

裝好驅(qū)動(dòng)檢測(cè)開(kāi)發(fā)板信息試試
如果有返回就說(shuō)明驅(qū)動(dòng)安裝成功了
然后在 文件 —— 首選項(xiàng) 附加開(kāi)發(fā)版網(wǎng)址管理 ?添加 開(kāi)發(fā)板網(wǎng)址如圖
然后開(kāi)發(fā)板的選項(xiàng)里面就有UNO WIFI了
我們常說(shuō)的D1其實(shí)全名是WeMos D1,有ARDUINO兼容版和MINI版 D1 UNO版其實(shí)有個(gè)地方需要注意就是它沒(méi)有完整的模擬輸入,相比基于AVR單片機(jī)的UNO之類的不太一樣。
這個(gè)位置是空腳
這是UNO到D1的映射,有些地方可以直接通過(guò)修改代碼實(shí)現(xiàn)
然后還需要下載一個(gè)壓縮包
解壓到C:\Users\Administrator\AppData\Local\Arduino15\staging\packages
其中Administrator是用戶名,如果你沒(méi)有管理員權(quán)限那這個(gè)地方填的就是你實(shí)際用戶名
或者在開(kāi)發(fā)板管理器搜索8266就能找到要的支持文件了
個(gè)人覺(jué)得相比掛PANDOWNLOAD好像還是ARDUINO更快
上邊還下著呢這邊完事了
哪邊快用哪個(gè)
就像之前看的那個(gè)本子說(shuō)的,哪邊錢多去哪邊,人嘛,就是這么回事。
這下開(kāi)發(fā)板可多了
再編譯試試
emmmmm
上面那行代碼的意思是讓你輸WIFI SSID和密碼
至于下面嘛,哪里不對(duì)刪哪里就行了
不能從常量型的char*轉(zhuǎn)換成變量型的char*
那就把const char換成char
Arduino語(yǔ)法詳解
為開(kāi)發(fā)板 WeMos D1 R1 編譯時(shí)出錯(cuò)可還行,嚇得我上這個(gè)資料的官網(wǎng)看了一眼,結(jié)果發(fā)現(xiàn)人家用的是這種方案:
?????
那就算了
咱現(xiàn)在手上有現(xiàn)成的8266開(kāi)發(fā)板,不可能為了現(xiàn)成的資料的問(wèn)題改掉現(xiàn)在的方案去拿面包板組什么簡(jiǎn)易8266電路,雖然我有這上面說(shuō)的所有東西,但是拉倒吧,現(xiàn)在的開(kāi)發(fā)都是用現(xiàn)成的開(kāi)發(fā)板,沒(méi)人用自己搭這種電路了,說(shuō)實(shí)在的這種東西也就看實(shí)驗(yàn)室的大佬以前玩51單片機(jī)的時(shí)候用過(guò),咱自己搞ARDUINO還真沒(méi)見(jiàn)過(guò)這種情況還需要自己弄USB轉(zhuǎn)串口模塊接線的。
/* DHT Pro Shield - Simple
*
* Example testing sketch for various DHT humidity/temperature sensors
* Written by ladyada, public domain
*
* Depends on Adafruit DHT Arduino library
* adafruit/DHT-sensor-library
*/
#include "DHT.h"
#define DHTPIN D4 ? ? // what pin we're connected to
// Uncomment whatever type you're using!
#define DHTTYPE DHT11 ? // DHT 11
//#define DHTTYPE DHT22 ? // DHT 22 ?(AM2302)
//#define DHTTYPE DHT21 ? // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors. ?This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);
void setup() {
?Serial.begin(9600);
?Serial.println("DHTxx test!");
?dht.begin();
}
void loop() {
?// Wait a few seconds between measurements.
?delay(2000);
?// Reading temperature or humidity takes about 250 milliseconds!
?// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
?float h = dht.readHumidity();
?// Read temperature as Celsius (the default)
?float t = dht.readTemperature();
?// Read temperature as Fahrenheit (isFahrenheit = true)
?float f = dht.readTemperature(true);
?// Check if any reads failed and exit early (to try again).
?if (isnan(h) || isnan(t) || isnan(f)) {
? ?Serial.println("Failed to read from DHT sensor!");
? ?return;
?}
?// Compute heat index in Fahrenheit (the default)
?float hif = dht.computeHeatIndex(f, h);
?// Compute heat index in Celsius (isFahreheit = false)
?float hic = dht.computeHeatIndex(t, h, false);
?Serial.print("Humidity: ");
?Serial.print(h);
?Serial.print(" %\t");
?Serial.print("Temperature: ");
?Serial.print(t);
?Serial.print(" *C ");
?Serial.print(f);
?Serial.print(" *F\t");
?Serial.print("Heat index: ");
?Serial.print(hic);
?Serial.print(" *C ");
?Serial.print(hif);
?Serial.println(" *F");
}
這串代碼就比較簡(jiǎn)單了,利用D1開(kāi)發(fā)板讀取DHT溫濕度模塊的數(shù)據(jù),然后通過(guò)串口直接輸出,這樣還是和上期的超聲波模塊一樣,用串口監(jiān)視器就可以讀數(shù)了。沒(méi)有WIFI,沒(méi)有物聯(lián)網(wǎng),但是簡(jiǎn)單可靠。

這里我發(fā)現(xiàn)自己的模塊好像是炸了,快遞已經(jīng)停運(yùn)就是想買也發(fā)不了貨所以直接上下一章了。
PS:DHT22好貴啊……15塊錢一個(gè)模塊趕上開(kāi)發(fā)板了,精度嘛確實(shí)高了些,濕度2%,溫度±0.5℃,但是這個(gè)價(jià)格這個(gè)精度還真就不如加錢上小米那套東西了。
我還是覺(jué)得WIFI比藍(lán)牙好,畢竟這年頭如果不是必要,誰(shuí)沒(méi)事手機(jī)開(kāi)藍(lán)牙呢?小米的溫濕度計(jì)用藍(lán)牙是因?yàn)樗枰‰?,畢竟連屏幕都用電子墨水屏了,兩節(jié)CR2032+藍(lán)牙5.0都可以茍半年,WIFI現(xiàn)在說(shuō)實(shí)在的比藍(lán)牙好用多了,可惜低功耗IOT方面一直沒(méi)有藍(lán)牙那種便宜的解決方案,所以小米那套才會(huì)用藍(lán)牙而不是WIFI吧,相比之下小米的臺(tái)燈就是ESP8266模塊的經(jīng)典應(yīng)用方案,是非常常見(jiàn)的利用成本不到10元的模塊搞物聯(lián)網(wǎng)的方案。
ESP8266的性能不錯(cuò),好歹也是32位MCU,還帶WIFI,相對(duì)來(lái)說(shuō)真的比藍(lán)牙好用多了,也許下期我們可以真的利用這個(gè)模塊的WIFI功能搞搞物聯(lián)網(wǎng)?