在本教程中,我們將探索有關這個有趣的MCU的更多信息,并通過將NodeMCU與互聯網連接來慢慢地潛入物聯網世界。在這里,我們將使用此模塊在Web瀏覽器上獲取室溫,即我們將制作一個Web服務器以LM35作為溫度傳感器顯示溫度。
所需組件:
節點單片機 - ESP12
LM35 溫度傳感器
面包板
公母連接器
LM35 溫度傳感器:
LM35是一款模擬線性溫度傳感器。其輸出與溫度成正比(以攝氏度為單位)。工作溫度范圍為 -55°C 至 150°C。 輸出電壓變化 10mV 以響應oC 溫度升高或下降。它可以采用 5V 和 3.3 V 電源供電,待機電流小于 60uA。
請注意,LM35 有 3 個系列變體,即 LM35A、LM35C 和 LM35D 系列。主要區別在于它們的溫度測量范圍。LM35D 系列設計用于測量 0 至 100 攝氏度,而 LM35A 系列設計用于測量 -55 至 155 攝氏度的更寬范圍。LM35C 系列設計用于測量 -40 至 110 攝氏度。
將 LM35 與 NodeMCU 連接:
下面給出了將LM35與NodeMCU連接的電路圖:
LM35 是一個模擬傳感器,因此我們必須將此模擬輸出轉換為數字輸出。為此,我們使用定義為A0的NodeMCU的ADC引腳。我們將 LM35 的輸出連接到 A0。
我們在NodeMCU的引腳上有3.3 V作為輸出電壓。因此,我們將使用 3.3V 作為 LM35 的 Vcc。
代碼說明:
本文末尾提供了帶有演示視頻的完整代碼。在這里,我們將解釋代碼的幾個部分。
首先,我們必須包含 ESP8266wifi 庫才能訪問 Wi-Fi 功能。
#include
然后在 ssid 和密碼字段中輸入您的 Wi-Fi 名稱和密碼。還初始化了變量并在波特率為 115200 的端口 80 上啟動服務器。
const char* ssid = "*********"; // Your ssid
const char* password = "***********"; // Your Password
float temp_celsius = 0;
float temp_fahrenheit = 0;
WiFiServer server(80);
void setup() {
Serial.begin(115200);
通過調用這些函數建立 Wi-Fi 連接。
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
連接可能需要幾秒鐘才能建立,因此請繼續顯示“...”直到連接不會建立。然后系統將繼續等待并檢查客戶端連接...
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi is connected");
server.begin();
Serial.println("Server started");
Serial.println(WiFi.localIP());
}
在循環部分中,讀取傳感器值并將其轉換為攝氏度和華氏度,并在串行監視器上顯示這些值。
void loop() {
temp_celsius = (analogRead(A0) * 330.0) / 1023.0; // To convert analog values to Celsius We have 3.3 V on our board and we know that output voltage of LM35 varies by 10 mV to every degree Celsius rise/fall. So , (A0*3300/10)/1023 = celsius
temp_fahrenheit = celsius * 1.8 + 32.0;
Serial.print(" Temperature = ");
Serial.print(temp_celsius);
Serial.print(" Celsius, ");
在網頁上顯示溫度的 HTML 代碼:
我們在網頁上顯示溫度,以便可以通過互聯網從世界任何地方訪問它。HTML代碼非常簡單;我們只需要使用 client.println 函數來回顯 HTML 代碼的每一行,以便瀏覽器可以執行它。
這部分顯示用于創建顯示溫度值的網頁的HTML代碼。
WiFiClient client = server.available();
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 10"); // update the page after 10 sec
client.println();
client.println("");
client.println("
");
client.print("
Digital Thermometer
");
client.print("
Temperature (*C)= ");
client.println(temp_celsius);
client.print("
Temperature (F) = ");
client.println(temp_fahrenheit);
client.print("
");
client.println("");
delay(5000);
}
加工:
使用 Arduino IDE 上傳代碼后,打開串行監視器并按 NodeMCU 上的重置按鈕。
現在,您可以看到該板已連接到您在代碼中定義的Wi-Fi網絡,并且還獲得了IP。復制此 IP 并將其粘貼到任何 Web 瀏覽器中。確保運行 Web 瀏覽器的系統應連接到同一網絡。
您的數字溫度計已準備就緒,溫度將在每 10 秒后在網絡瀏覽器中自動刷新。
#include
const char* ssid = "*********"; // Your ssid
const char* password = "***********"; // Your Password
float temp_celsius = 0;
float temp_fahrenheit = 0;
WiFiServer server(80);
void setup() {
Serial.begin(115200);
pinMode(A0, INPUT);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi is connected");
server.begin();
Serial.println("Server started");
Serial.println(WiFi.localIP());
}
void loop() {
temp_celsius = (analogRead(A0) * 330.0) / 1023.0; // To convert analog values to Celsius We have 3.3 V on our board and we know that output voltage of LM35 varies by 10 mV to every degree Celsius rise/fall. So , (A0*3300/10)/1023 = celsius
temp_fahrenheit = celsius * 1.8 + 32.0;
Serial.print(" Temperature = ");
Serial.print(temp_celsius);
Serial.print(" Celsius, ");
Serial.print(temp_fahrenheit);
Serial.println(" Fahrenheit");
WiFiClient client = server.available();
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 10"); // update the page after 10 sec
client.println();
client.println("");
client.println("");
client.print("
Digital Thermometer
");
client.print("
Temperature (*C)= ");
client.println(temp_celsius);
client.print("
Temperature (F) = ");
client.println(temp_fahrenheit);
client.print("
");
client.println("");
delay(5000);
}
-
溫度傳感器
+關注
關注
48文章
2974瀏覽量
156309 -
LM35
+關注
關注
2文章
83瀏覽量
18160 -
Web服務器
+關注
關注
0文章
138瀏覽量
24454
發布評論請先 登錄
相關推薦
評論