[精讚] [會員登入]
1194

【NodeMCU / ESP8266】[Arduino]測量溫溼度並上傳至ThinkSpeak

使用簡單的溫度計來測量溫濕度並上傳至第三方網站,這樣他人只要有瀏覽器就能看到我們的數據了

分享此文連結 //n.sfs.tw/16055

分享連結 【NodeMCU / ESP8266】[Arduino]測量溫溼度並上傳至ThinkSpeak@小編過路君子
(文章歡迎轉載,務必尊重版權註明連結來源)
2023-01-11 20:19:26 最後編修
2023-01-11 03:43:20 By 過路君子
 

大家好,這裡是回到去年發現的大陸上的小編過路君子

但是身邊跟著的夥伴換人了呢,不再是上次的 LinkIt 7697

 

 

小編久違的又回去碰物聯網了呢,上次碰是去年四月的時候,那時候使用的是台灣開發的 Linklt 7697。

時過境遷,這次要使用的是中國開發的 NodeMCU ESP8266 這塊板子,話雖如此,但是在使用方式上大同小異,因為都是在 Arduino 上面開發。

不得不說 Arduino 真的強大,可以整合這麼多開發版,不用每換一塊就重新安裝一個環境或重新安裝軟體。

 

那我們今天的主題便是結合上次我們提到的 ThingSpeak 這個網站來做應用,還沒看過的人可以這邊請:【ThinkSpeak】一個IoT數據分析(IoT analytics)及呈現的網站

那同時我們會搭配溫度計使用,這次要使用的溫度計是 DHT11;順帶一提,之前小編在使用 Linklt 7697 的時候所使用的溫度計是 DHT22。

那接下來跟上次的文章一樣,廢話不多說,直接來上規格表:

軟體或硬體名稱 版本
NodeMCU 1.0 ESP-12E Module
USB Driver USB-SERIAL CP2102
Arduino IDE 1.8.18
Thingspeak 2.0.1
DHT sensor library 1.4.4

註:USB-SERIAL CP2102 的 載點

 

Step1. 安裝 DHT sensor library

(所有圖片點擊都可以放大、變高清)

 

Step2. 安裝 Thingspeak

這邊 Thingspeak 指的不是那個網站,而是套件名稱,應該算好找,因為全部就只有一個套件叫做 Thingspeak。

 

Step3. 將溫度計接上板子

這塊 NodeMCU 也是可以外加 Grove 擴充版的,所以小編也插了一塊上去,各位如果沒有擴充版......那就直接把杜邦線插在接腳上吧。

接線方式因為只有三根所以接起來還算簡單,正極接到 3v3 上(紫色線)、負極接地(綠色線)和中間的 OUT 接到 D5 上(藍色線),當然藍線要接到其他接腳也是可以的,就是等等下方的程式碼要改而已。

因為小編是 DHT11 的溫度計才要搞得那麼複雜,如果各位手上拿的是 DHT22 的溫度計,就直接插上去就可以了,因為它本身就是一個 Grove 接頭。

 

Step4. 程式碼撰寫

Secrets.h

// Use this file to store all of the private credentials 
// and connection details

#define SECRET_SSID "wifi-name"    // replace MySSID with your WiFi network name
#define SECRET_PASS "wifi-password"  // replace MyPassword with your WiFi password

#define SECRET_CH_ID 0000000      // replace 0000000 with your channel number
#define SECRET_WRITE_APIKEY "xxxxxx"   // replace XYZ with your channel write API Key

程式碼解析:

行號 解釋
4 設置將要連線的 wifi 名稱。
5 設置將要連線 wifi 的密碼。
7 設置要新增資料頻道的 ID,查詢方法在這
8 設置要新增資料頻道的 Key,查詢方法在這

 

Main.cpp

#include<ESP8266WiFi.h>
#include"DHT.h"
#include"Secrets.h"
#include"ThingSpeak.h"

#define DHTPIN D5

#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22

DHT dht(DHTPIN, DHTTYPE);

char ssid[] = SECRET_SSID;
char pass[] = SECRET_PASS;
WiFiClient client;

String myStatus = "";
unsigned long myChannelNumber = SECRET_CH_ID;
const char * myWriteAPIKey = SECRET_WRITE_APIKEY;

void setup() 
{
	Serial.begin(115200);
	while (!Serial) ;

	Serial.print('\n');

	dht.begin();

	WiFi.mode(WIFI_STA); 

	// Initialize ThingSpeak
	ThingSpeak.begin(client);  
}

void loop() 
{
	// Connect or reconnect to WiFi
	if(WiFi.status() != WL_CONNECTED)
	{
		Serial.print("Attempting to connect to SSID: ");
		Serial.println(SECRET_SSID);

		int wifiTryCount = 0;
		bool wifiConnected = false;
		while(!wifiConnected)
		{
			if(wifiTryCount >= 10)
			{
				ESP.restart();
				wifiTryCount = 0;
			}
			else wifiTryCount += 1;

			// Connect to WPA/WPA2 network.
			WiFi.begin(ssid, pass);
			Serial.print(".");

			for(int x=0; 15>x; x++)
			{
				delay(1000);
				if(WiFi.status() == WL_CONNECTED) 
				{
					wifiConnected = true;
					break;
				}
			}
		} 
		Serial.println("\nConnected.");
	}

	float h = dht.readHumidity();
	float t = dht.readTemperature();

	ThingSpeak.setField(1, t);
	ThingSpeak.setField(2, h);

	// set the status
	ThingSpeak.setStatus(myStatus);

	// write to the ThingSpeak channel
	int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
	if(x == 200) Serial.println("Channel update successful.");
	else Serial.println("Problem updating channel. HTTP error code " + String(x));

	// Wait 60 seconds to update the channel again
	delay(60000);
}

程式碼解析:

行號 解釋
1 wifi 相關功能的函式庫。
2 溫度計相關功能的函式庫,包含 DHT11 和 DHT22。
3 跟 Main.cpp 位於同個資料夾下的 .h 檔案。
4 ThingSpeak 網站相關操作的函式庫。
6 定義溫度計所在的接腳,如果各位插的腳位不是 D5,那這邊要改成各位所接的腳位。
8~9 定義使用的溫度計型號,請各位依照自己手上溫度計的型號來更改,DHT11 的溫度計就長的跟 Step3 裡的圖一樣,DHT22 的溫度計長得像這樣
11 定義 DHT 溫度計並提供接下來的程式有接口可以用。
13~15 提供接下來的 wifi 服務基礎定義。
17~19 提供接下來的 ThingSpeak 服務基礎定義。
28 啟動 DHT 溫度計。
30 設定 wifi 連線時所使用的模式。
33 初始化 ThinkSpeak 模組。
39 判斷板子現在是否是正常連接 wifi,否的話啟動連線程序。
50 當重新連線的次數大於等於十次的時候直接重設這塊板子。
56 嘗試向設定的 wifi 發出連線請求。
72 讀取溫度計目前量測到的濕度。
73 讀取溫度計目前量測到的溫度。
75~76 設定要將哪筆資料放到哪個表格內。
79 測試是否能夠連線到 ThingSpeak 這個網站。
82 向 ThingSpeak 網站發出資料寫入請求。
83~84 向序列埠寫入最終執行結果,我們可以在監控視窗查看到相關結果。
87 ThingSpeak 不允許我們太過頻繁的寫入資料,其限制為每20秒得寫入一筆,所以這邊的數字不能小於 20000。

 

Step5. 在 ThingSpeak 上察看結果

ThingSpeak 會自動將收集的點繪製成表格,我們直接打開那個網頁就可以看到最終結果了。

如果沒有看到點的話請先確認監控視窗有出現以下的畫面:

如果有出現以上畫面,那可以將滑鼠移至網頁上的圖上,如果出現 NaN 的資料,那就是溫度計的線沒有接好,將線重新壓緊然後再次等待看看是否能正常讀取到資料。

 

 

 

後記

小編想寫這篇也拖了好久,趕快把幾個月前學到的基礎用法拿出來筆記一下,趕快一鼓作氣解決它。

或是......拿 Arduino Uno 出來做示範?好像也不是不行,應該除了 50 行之外都不需要做修改。

END

你可能感興趣的文章

【Linux】[CentOS 8] How to update sudo instruction The last time I wanted to update the sudo command should be 2017, right? It's 2021 in a blink of an

【PaperMC】從 Waterfall 切換至 Velocity waterfall 已經停止支援,最後停留在支援 Minecraft 1.21.6,之後的 Minecraft 版本便不再支援

【Discord bot】(ERROR)await self.bot.wait_for() 大坑 今天真的是採到大坑,只找到解決方法,具體原因不明

【JDA/discord bot】刪除事件或slash(斜槓)指令的reply訊息 如何正確的等待 Async 的結束,在進行接下來的刪除訊息動作

【C++】使用SFML製作讓方塊落下的畫面 從開啟新視窗延伸過來的應用(?),配合上一篇所使用到開啟一個可渲染視窗的那堆程式碼的延伸。

【教程】[HTML](進階版)如何在手機上編輯電子書(epub)預覽介面 可能會有人認為電子書(epub)只能用電腦來開啟、編輯,其實不是的,手機也可以編輯喔!

隨機好文

【手遊介紹】小品手遊─寶箱是我的!(SUMMONER'S GREED) 輕鬆無腦的塔防遊戲,殺時間本小編推薦的遊戲之一

【開箱】高捷少女collection總集篇1 由希萌創意寄來的大包裹!裡面究竟有什麼呢?小編就帶大家來看看!

高捷少女:美麗島的守護者③ 小雅閉上眼睛,思索在高捷發生的點點滴滴。她心意已決,在高捷的日子的確也有快樂的部分,不過她相信換個方向是更好的決定。有關高捷的所有美好回憶,小雅決定保留在心裡就好,繼續在高捷工作只會讓自己更痛苦而已,

高捷少女:美麗島的守護者④ 光之穹頂的某處垃圾桶底,一個四方形的機器持續發出聲音,機器的儀表板上顯示著「1:25:10」的字樣,外表被一層鞭炮所掩蓋。儀表板的數字每秒不斷減少,細微的嗶嗶聲也隨著數字的改變發出,但在熙來攘往的美麗

婕兒──她的青春④ 「投降吧,耐耐!這回合妳將不會再有獲勝的機會了!哈哈哈哈!」 「妳確定?」耐耐臉上泛起一絲微笑,並將手中的牌展示給婕兒看 婕兒的笑容僵住了。恐懼浮現在她的臉。