[精讚] [會員登入]
822

【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

你可能感興趣的文章

【Kali Linux】[history -c]如何清除歷史記錄 非bash環境會使history部分功能變的非法

【CoreProtect】自行升級至 Minecraft 1.21.x、1.22.x 或更高版本 不知道為什麼,官方竟然無預警停止更新,我們只好自行救濟

【SeaChest & Synology】512e(Advanced Format / AF) 轉換至 4Kn 好不容易入手了一顆硬碟,但是卻無法使用,除了賣掉還有更好的方法嗎?

【Wicket】[Cookie]如何讀取和設定客戶端的Cookie 對於某些參數需要給予使用者,我們可以使用 Cookie 來讓客戶端記著,之後再跟伺服器裡的比對來達到驗證的目的

【MySQL】每個類別中取前三高 一個由多層次所組成的SELECT述句

【Docker&Wildfly】(bitnami/wildfly)如何從零開始創建網頁伺服器 使用他人的 docker image 來架設我們的 wildfly web server

隨機好文

高捷少女:小穹與果仁巧克力㊤ 阿敏突然輕笑一聲,從櫃臺拿來一個塑膠餐盒,打開給大家看。「這是小穹烤的餅乾,妳們吃吃看就知道她為什麼不想講了。」小穹變得緊張起來。「阿敏,妳怎麼還留著呀?」艾米莉亞、婕兒與耐耐各自拿了一塊,把夾著奶油

高捷少女:小穹與果仁巧克力㊥ 艾咪臉上泛起笑容說:「妳知道嗎?就跟花語一樣,每一種巧克力也都有各自的涵義:薄荷巧克力代表初戀;卡通巧克力代表天真爛漫;而果仁巧克力代表的是窩心,還有想陪伴對方的心情,這在德國是女生之間在慶生時會彼此

高捷少女:地下城的探險少女(終)  小穹眨眨眼睛,然後說了出來。「其實,從剛剛開始,我就在想了……是在看過這本日記之後。」她拿出日記。「我想……我們尋找寶藏的想法,是不是真的正確的?」「怎麼說呢?」耐耐好奇地問。「這個埋藏寶藏的人,在

高捷少女:購票大作戰(終) 完了。 這下真的完了! 艾米腦內所有的思考中樞,同時發出了淒厲的吶喊。完蛋啦!這下真的被揭穿了啦!! 「那……那是因為……」艾米結結巴巴的說:「因為……

高捷少女:美麗島的守護者⑤  雖然暫時不用怕牠們了,可是一直躲在這裡終究不是辦法,小雅心想。她看看四周,這間更衣室沒有窗戶或後門,她不禁著急起來,不可能一直躲在這裡面,但從門出去只會被群貓圍攻而已。小雅低下頭苦思該怎麼辦,過了不