[精讚] [會員登入]
28

【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

【Wildfly/jBoss】[Linux](Connection Datasource)如何與MySQL資料庫建立連線 網頁瀏覽器和資料庫的關係密不可分,而通常會將兩者分開架設在不同的伺服器上面來提供服務,這時要如何進行連線呢?

【PaperMC - API】如何發送指令到伺服器內 How to sending or executing commands to server

【C++】class練習 — 檢測該字串是否為迴圈 第一次的C++結構式寫法,雖然以後應該會見怪不怪,但畢竟是第一次所以還是想保存下來

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

【Wickct】(link) <a> 如何新增超連結 簡單來說有兩種方式,小編個人比較偏好 的方法

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

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

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

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

婕兒──她的青春② 艾米直搖頭。「我真不敢相信,小穹妳都二十幾歲了,為什麼能想出這種故事呀?」「婕兒也是二十幾歲啊,妳想想她現在是什麼樣子?」小穹不滿地指向火車的方向。

【數學】徐氏數學簡明講義(三) 第二章 直線與園 P2.1-17 Q28 28.若X、Y∈R,試求之最小值___ 解: 配方 畫圖 做對稱點 求其直線長度 解