Trong dự án này, bạn sẽ tạo một máy chủ web độc lập với ESP8266 hiển thị nhiệt độ và độ ẩm bằng cảm biến DHT11 hoặc DHT22 bằng Arduino IDE. Máy chủ web bạn sẽ xây dựng có thể được truy cập bằng bất kỳ thiết bị nào có trình duyệt trên mạng cục bộ của bạn.Trong suốt hướng dẫn này, chúng tôi sẽ chỉ ra cách xây dựng hai máy chủ web khác nhau:Máy chủ web 1: Máy chủ web không đồng bộ tự động cập nhật nhiệt độ và độ ẩm mà không cần làm mới trang web và với CSS tùy chỉnh để tạo kiểu cho trang web.Máy chủ web 2: Máy chủ web HTTP đơn giản hiển thị các bài đọc cảm biến mới nhất khi trang được cập nhật trong trang HTML thô.
ESP8266 DHT11 / DHT22 Nhiệt độ Độ ẩm Máy chủ Web với Arduino IDE Trong dự án này, bạn tạo máy chủ web độc lập với ESP8266 hiển thị nhiệt độ độ ẩm cảm biến DHT11 DHT22 Arduino IDE Máy chủ web bạn xây dựng truy cập thiết bị có trình duyệt mạng cục bạn Trong suốt hướng dẫn này, cách xây dựng hai máy chủ web khác nhau: Máy chủ web #1: Máy chủ web không đồng tự động cập nhật nhiệt độ độ ẩm mà không cần làm trang web với CSS tùy chỉnh để tạo kiểu cho trang web Máy chủ web #2: Máy chủ web HTTP đơn giản hiển thị đọc cảm biến trang cập nhật trang HTML thô Tài nguyên đề xuất: Tìm hiểu thêm ESP8266 với khóa học chúng tơi: Tự động hóa gia đình ESP8266 Các phận cần thiết 1/31 Để xây dựng dự án này, bạn cần phần sau: Bảng phát triển ESP8266 (đọc so sánh bảng phát triển ESP8266 ) Cảm biến nhiệt độ độ ẩm DHT22 DHT11 Điện trở 4.7k Ohm Breadboard Dây nhảy Sơ đồ ESP8266 DHT11 / DHT22 Trước tiếp tục hướng dẫn, nối dây cảm biến nhiệt độ độ ẩm DHT11 DHT22 với ESP8266 thể sơ đồ sau 2/31 Trong ví dụ này, chúng tơi nối chân liệu DHT với GPIO5 (D1), bạn sử dụng GPIO phù hợp khác Đọc Hướng dẫn tham khảo GPIO ESP8266 để tìm hiểu thêm GPIO ESP8266 Nếu bạn sử dụng ESP-01, GPIO chân phù hợp để kết nối với chân liệu DHT, thể sơ đồ 3/31 Cài đặt thư viện DHT cho ESP8266 Để đọc từ cảm biến DHT, sử dụng thư viện DHT từ Adafruit Để sử dụng thư viện này, bạn cần cài đặt thư viện Adafruit Unified Sensor Làm theo bước để cài đặt thư viện Mở Arduino IDE bạn tới Sketch > Include Library > Manage Libraries Trình quản lý thư viện mở Tìm kiếm "DHT" hộp Tìm kiếm cài đặt thư viện DHT từ Adafruit 4/31 Sau cài đặt thư viện DHT từ Adafruit, gõ "Adafruit Unified Sensor" vào hộp tìm kiếm Cuộn xuống để tìm thư viện cài đặt Sau cài đặt thư viện, khởi động lại Arduino IDE bạn Máy chủ Web không đồng ESP8266 Để xây dựng máy chủ web, sử dụng thư viện ESPAsyncWebServer cung cấp cách dễ dàng để xây dựng máy chủ web không đồng Xây dựng máy chủ web không đồng có số lợi Chúng tơi khun bạn nên xem nhanh tài liệu thư viện trang GitHub 5/31 Cài đặt thư viện ESPAsyncWebServer Thư viện ESPAsyncWebServer khơng có sẵn để cài đặt Trình quản lý thư viện Arduino IDE Vì vậy, bạn cần cài đặt tay Làm theo bước để cài đặt thư viện ESPAsyncWebServer: Bấm vào để tải xuống thư viện ESPAsyncWebServer Bạn có thư mục zip thư mục Tải xuống Giải nén thư mục zip bạn nhận thư mục ESPAsyncWebServer-master Đổi tên thư mục bạn từ ESPAsyncWebServer-master thành ESPAsyncWebServer Di chuyển thư mục ESPAsyncWebServer vào thư mục thư viện cài đặt Arduino IDE bạn Cài đặt Thư viện TCP ESPAsync Thư viện ESPAsyncWebServer yêu cầu thư viện ESPAsyncTCP hoạt động Làm theo bước để cài đặt thư viện đó: Bấm vào để tải xuống thư viện ESPAsyncTCP Bạn có thư mục zip thư mục Tải xuống Giải nén thư mục zip bạn nhận thư mục ESPAsyncTCP-master Đổi tên thư mục bạn từ ESPAsyncTCP-master thành ESPAsyncTCP Di chuyển thư mục ESPAsyncTCP vào thư mục thư viện cài đặt Arduino IDE bạn Cuối cùng, mở lại Arduino IDE bạn Mã Chúng tơi lập trình ESP8266 Arduino IDE, bạn phải cài đặt tiện ích bổ sung ESP8266 Arduino IDE Nếu bạn chưa có, làm theo hướng dẫn trước: Cài đặt bảng ESP8266 Arduino IDE Mở Arduino IDE bạn chép mã sau 6/31 /********* Rui Santos Complete project details at https://randomnerdtutorials.com/esp8266-dht11dht22temperature-and-humidity-web-server-with-arduino-ide/ *********/ // Import required libraries #include #include #include #include #include #include #include // Replace with your network credentials const char* ssid = "REPLACE_WITH_YOUR_SSID"; const char* password = "REPLACE_WITH_YOUR_PASSWORD"; #define DHTPIN // Digital pin connected to the DHT sensor // Uncomment the type of sensor in use: //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) DHT dht(DHTPIN, DHTTYPE); // current temperature & humidity, updated in loop() float t = 0.0; float h = 0.0; // Create AsyncWebServer object on port 80 AsyncWebServer server(80); // Generally, you should use "unsigned long" for variables that hold time // The value will quickly become too large for an int to store unsigned long previousMillis = 0; // will store last time DHT was updated // Updates DHT readings every 10 seconds const long interval = 10000; const char index_html[] PROGMEM = R"rawliteral( html { font-family: Arial; display: inline-block; margin: 0px auto; text-align: center; 7/31 } h2 { font-size: 3.0rem; } p { font-size: 3.0rem; } units { font-size: 1.2rem; } dht-labels{ font-size: 1.5rem; vertical-align:middle; padding-bottom: 15px; } ESP8266 DHT ServerTemperature %TEMPERATURE% °C
Humidity %HUMIDITY% %
setInterval(function ( ) { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == && this.status == 200) { document.getElementById("temperature").innerHTML = this.responseText; } }; xhttp.open("GET", "/temperature", true); xhttp.send(); }, 10000 ) ; setInterval(function ( ) { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == && this.status == 200) { document.getElementById("humidity").innerHTML = this.responseText; } }; xhttp.open("GET", "/humidity", true); xhttp.send(); }, 10000 ) ; )rawliteral"; // Replaces placeholder with DHT values String processor(const String& var){ //Serial.println(var); if(var == "TEMPERATURE"){ return String(t); 8/31 } else if(var == "HUMIDITY"){ return String(h); } return String(); } void setup(){ // Serial port for debugging purposes Serial.begin(115200); dht.begin(); // Connect to Wi-Fi WiFi.begin(ssid, password); Serial.println("Connecting to WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("."); } // Print ESP8266 Local IP Address Serial.println(WiFi.localIP()); // Route for root / web page server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/html", index_html, processor); }); server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/plain", String(t).c_str()); }); server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/plain", String(h).c_str()); }); // Start server server.begin(); } void loop(){ unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { // save the last time you updated the DHT values previousMillis = currentMillis; // Read temperature as Celsius (the default) float newT = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) //float newT = dht.readTemperature(true); // if temperature read failed, don't change t value if (isnan(newT)) { Serial.println("Failed to read from DHT sensor!"); } else { t = newT; Serial.println(t); } // Read Humidity 9/31 float newH = dht.readHumidity(); // if humidity read failed, don't change h value if (isnan(newH)) { Serial.println("Failed to read from DHT sensor!"); } else { h = newH; Serial.println(h); } } } Xem mã thô Chèn thông tin đăng nhập mạng bạn vào biến sau mã hoạt động const char* ssid = "REPLACE_WITH_YOUR_SSID"; const char* password = "REPLACE_WITH_YOUR_PASSWORD"; Mã hoạt động Trong đoạn sau, chúng tơi giải thích cách mã hoạt động Hãy tiếp tục đọc bạn muốn tìm hiểu thêm chuyển đến phần Trình diễn để xem kết cuối Nhập thư viện Đầu tiên, nhập thư viện cần thiết #include #include #include #include #include #include #include Đặt thông tin đăng nhập mạng bạn Chèn thông tin đăng nhập mạng bạn vào biến sau, để ESP8266 kết nối với mạng cục bạn const char* ssid = "REPLACE_WITH_YOUR_SSID"; const char* password = "REPLACE_WITH_YOUR_PASSWORD"; Định nghĩa biến Xác định GPIO mà chân liệu DHT kết nối Trong trường hợp này, kết nối với GPIO5 (D1) #define DHTPIN // Digital pin connected to the DHT sensor 10/31 setInterval(function ( ) { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == && this.status == 200) { document.getElementById("temperature").innerHTML = this.responseText; } }; xhttp.open("GET", "/temperature", true); xhttp.send(); }, 10000 ) ; setInterval(function ( ) { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == && this.status == 200) { document.getElementById("humidity").innerHTML = this.responseText; } }; xhttp.open("GET", "/humidity", true); xhttp.send(); }, 10000 ) ; Để cập nhật nhiệt độ nền, có hàm setInterval() chạy sau 10 giây Về bản, thực yêu cầu URL / temperature để có kết đọc nhiệt độ xhttp.open("GET", "/temperature", true); xhttp.send(); }, 10000 ) ; Khi nhận giá trị đó, cập nhật phần tử HTML có id nhiệt độ if (this.readyState == && this.status == 200) { document.getElementById("temperature").innerHTML = this.responseText; } Tóm lại, phần trước chịu trách nhiệm cập nhật nhiệt độ khơng đồng Q trình tương tự lặp lại cho đọc độ ẩm Quan trọng: cảm biến DHT chậm để đọc kết quả, bạn định kết nối nhiều máy khách với ESP8266 lúc, khuyên bạn nên tăng khoảng thời gian yêu cầu xóa cập nhật tự động Xử lý Bây giờ, cần tạo hàm processor(), hàm thay trình giữ chỗ văn HTML giá trị nhiệt độ độ ẩm thực tế 17/31 String processor(const String& var){ //Serial.println(var); if(var == "TEMPERATURE"){ return String(t); } else if(var == "HUMIDITY"){ return String(h); } return String(); } Khi trang web yêu cầu, kiểm tra xem HTML có trình giữ chỗ khơng Nếu tìm thấy trình giữ chỗ %TEMPERATURE%, trả nhiệt độ lưu trữ biến t if(var == "TEMPERATURE"){ return String(t); } Nếu chỗ dành sẵn %HUMIDITY%, trả giá trị độ ẩm else if(var == "HUMIDITY"){ return String(h); } Thiết lập() Trong setup(), khởi tạo Serial Monitor cho mục đích gỡ lỗi Serial.begin(115200); Khởi tạo cảm biến DHT dht.begin(); Kết nối với mạng cục bạn in địa IP ESP8266 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi "); } Cuối cùng, thêm dòng mã để xử lý máy chủ web server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/html", index_html, processor); }); server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/plain", String(t).c_str()); }); server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/plain", String(h).c_str()); }); 18/31 Khi thực yêu cầu URL gốc, gửi văn HTML lưu trữ biến index_html Chúng ta cần vượt qua chức xử lý, chức thay tất trình giữ chỗ giá trị phù hợp server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/html", index_html, processor); }); Chúng cần thêm hai trình xử lý bổ sung để cập nhật số nhiệt độ độ ẩm Khi nhận yêu cầu URL /temperature, cần gửi giá trị nhiệt độ cập nhật Nó văn túy nên gửi dạng ký tự, vậy, sử dụng phương thức c_str() server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/plain", String(t).c_str()); }); Quá trình tương tự lặp lại cho độ ẩm server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/plain", String(h).c_str()); }); Cuối cùng, khởi động máy chủ server.begin(); Trong loop() nơi nhận số nhiệt độ từ cảm biến sau 10 giây Về bản, kiểm tra xem đến lúc đọc cảm biến chưa: if (currentMillis - previousMillis >= interval) { Nếu có, chúng tơi lưu trữ số đọc nhiệt độ biến newT float newT = dht.readTemperature(); Nếu biến newT số đọc nhiệt độ hợp lệ, cập nhật biến t else { t = newT; Serial.println(t); } Quá trình tương tự lặp lại cho độ ẩm 19/31 // Read Humidity float newH = dht.readHumidity(); // if humidity read failed, don't change h value if (isnan(newH)) { Serial.println("Failed to read from DHT sensor!"); } else { h = newH; Serial.println(h); } Đó nhiều cách mã hoạt động Tải mã lên Sau sửa đổi phác thảo với thay đổi cần thiết, cần, tải mã lên ESP8266 bạn (nếu bạn tải mã lên ESP8266 mình, đọc hướng dẫn khắc phục cố này) Hãy chắn bạn có bo mạch cổng COM lựa chọn Đi tới Bảng > Cơng cụ chọn mơ hình ESP8266 bạn sử dụng Trong trường hợp chúng tôi, sử dụng ESP8266 12-E NodeMCU Kit 20/31 Đi tới Tools > Port chọn cổng COM mà ESP8266 kết nối 21/31 Nhấn nút tải lên Arduino IDE Lưu ý: bạn sử dụng ESP-01, bạn cần điều hợp nối tiếp lập trình viên FTDI để tải mã lên Địa IP ESP8266 Sau tải mã lên, mở Màn hình nối tiếp với tốc độ truyền 115200 Nhấn nút đặt lại ESP8266 Địa IP ESP8266 in hình nối tiếp hình sau 22/31 Cuộc biểu tình Trong mạng cục bạn, truy cập trình duyệt nhập địa IP ESP8266 Nó hiển thị trang web sau với đọc cảm biến Chỉ số nhiệt độ độ ẩm tự động cập nhật 10 giây lần mà không cần làm trang web ESP8266 Máy chủ web HTTP đơn giản 23/31 Trong phần này, cho bạn cách xây dựng máy chủ web HTTP đơn giản hiển thị nhiệt độ độ ẩm trang HTML thô Máy chủ web gửi phản hồi HTTP trình duyệt bạn thực yêu cầu địa IP ESP8266 Video trình diễn Đầu tiên, bạn xem video trình diễn dự án máy chủ web ESP8266 bên Mã Chúng tơi lập trình ESP8266 Arduino IDE, bạn phải cài đặt tiện ích bổ sung ESP8266 Arduino IDE Nếu bạn chưa làm theo hướng dẫn trước Cài đặt bảng ESP8266 Arduino IDE Mở Arduino IDE bạn chép mã sau 24/31 /********* Rui Santos Complete project details at https://randomnerdtutorials.com *********/ // Including the ESP8266 WiFi library #include #include "DHT.h" // Uncomment one of the lines below for whatever DHT sensor type you're using! #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT21 // DHT 21 (AM2301) //#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 // Replace with your network details const char* ssid = "YOUR_NETWORK_NAME"; const char* password = "YOUR_NETWORK_PASSWORD"; // Web Server on port 80 WiFiServer server(80); // DHT Sensor const int DHTPin = 5; // Initialize DHT sensor DHT dht(DHTPin, DHTTYPE); // Temporary variables static char celsiusTemp[7]; static char fahrenheitTemp[7]; static char humidityTemp[7]; // only runs once on boot void setup() { // Initializing serial port for debugging purposes Serial.begin(115200); delay(10); dht.begin(); // Connecting to WiFi network 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 connected"); // Starting the web server server.begin(); Serial.println("Web server running Waiting for the ESP IP "); 25/31 delay(10000); // Printing the ESP IP address Serial.println(WiFi.localIP()); } // runs over and over again void loop() { // Listenning for new clients WiFiClient client = server.available(); if (client) { Serial.println("New client"); // bolean to locate when the http request ends boolean blank_line = true; while (client.connected()) { if (client.available()) { char c = client.read(); if (c == '\n' && blank_line) { // Sensor readings may also be up to 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!"); strcpy(celsiusTemp,"Failed"); strcpy(fahrenheitTemp, "Failed"); strcpy(humidityTemp, "Failed"); } else{ // Computes temperature values in Celsius + Fahrenheit and Humidity float hic = dht.computeHeatIndex(t, h, false); dtostrf(hic, 6, 2, celsiusTemp); float hif = dht.computeHeatIndex(f, h); dtostrf(hif, 6, 2, fahrenheitTemp); dtostrf(h, 6, 2, humidityTemp); // You can delete the following Serial.print's, it's just for debugging purposes Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t Temperature: "); Serial.print(t); Serial.print(" *C "); Serial.print(f); Serial.print(" *F\t Heat index: "); Serial.print(hic); Serial.print(" *C "); Serial.print(hif); Serial.print(" *F"); Serial.print("Humidity: "); Serial.print(h); 26/31 Serial.print(" %\t Temperature: "); Serial.print(t); Serial.print(" *C "); Serial.print(f); Serial.print(" *F\t Heat index: "); Serial.print(hic); Serial.print(" *C "); Serial.print(hif); Serial.println(" *F"); } client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(); // your actual web page that displays temperature and humidity client.println(""); client.println(""); client.println("ESP8266 - Temperature and HumidityTemperature in Celsius: "); client.println(celsiusTemp); client.println("*CTemperature in Fahrenheit: "); client.println(fahrenheitTemp); client.println("*FHumidity: "); client.println(humidityTemp); client.println("%"); client.println(""); break; } if (c == '\n') { // when starts reading a new line blank_line = true; } else if (c != '\r') { // when finds a character on the current line blank_line = false; } } } // closing the client connection delay(1); client.stop(); Serial.println("Client disconnected."); } } Xem mã thô Chèn thông tin đăng nhập mạng bạn vào biến sau mã hoạt động const char* ssid = "REPLACE_WITH_YOUR_SSID"; const char* password = "REPLACE_WITH_YOUR_PASSWORD"; Mã hoạt động 27/31 Chúng tơi giải thích chi tiết cách máy chủ web giống hoạt động hướng dẫn trước Hãy xem hướng dẫn folowing để giải thích chun sâu dịng mã: Xây dựng Máy chủ Web ESP8266 Trong phần này, xem xét phần có liên quan cho ví dụ Nhập thư viện Nhập thư viện DHT để đọc từ cảm biến DHT thư viện ESP8266WiFi để xây dựng máy chủ web: #include #include Loại cảm biến DHT Bỏ ghi dòng sau cho loại cảm biến bạn sử dụng Nếu bạn sử dụng cảm biến DHT22, bạn không cần phải sửa đổi điều //#define DHTTYPE DHT11 //#define DHTTYPE DHT21 #define DHTTYPE DHT22 // DHT 11 // DHT 21 (AM2301) // DHT 22 (AM2302), AM2321 Đặt thông tin đăng nhập mạng bạn Chèn thông tin đăng nhập mạng bạn vào biến sau, để ESP8266 kết nối với mạng cục bạn const char* ssid = "REPLACE_WITH_YOUR_SSID"; const char* password = "REPLACE_WITH_YOUR_PASSWORD"; Khởi tạo cảm biến DHT Xác định GPIO mà chân liệu DHT kết nối Trong trường hợp này, kết nối với GPIO5 (D1) #define DHTPIN // Digital pin connected to the DHT sensor Khởi tạo đối tượng DHT với kiểu mã pin xác định trước DHT dht(DHTPIN, DHTTYPE); Thiết lập() Trong setup(), khởi tạo cảm biến DHT dht.begin(); vịng lặp() Trong loop(), chúng tơi kiểm tra xem có máy khách thực yêu cầu hay không: 28/31 if (client) { Serial.println("New client"); // bolean to locate when the http request ends boolean blank_line = true; while (client.connected()) { if (client.available()) { char c = client.read(); Khi khách hàng đưa yêu cầu, chúng tơi đọc độ ẩm, nhiệt độ tính C Fahrenheit lưu chúng vào biến h, t f: float h // Read float t // Read float f = dht.readHumidity(); temperature as Celsius (the default) = dht.readTemperature(); temperature as Fahrenheit (isFahrenheit = true) = dht.readTemperature(true); Cuối cùng, bạn gửi phản hồi cho client văn HTML để build trang nhiệt độ độ ẩm: client.println(""); client.println(""); client.println("ESP8266 - Temperature and Humidity Temperature in Celsius: "); client.println(celsiusTemp); client.println("*CTemperature in Fahrenheit: "); client.println(fahrenheitTemp); client.println("*FHumidity: "); client.println(humidityTemp); client.println("%"); client.println(""); Nhiệt độ độ ẩm gửi đến máy khách biến sau: celsiusTemp, fahrenheitTemp humidityTemp Cuộc biểu tình Sau thực thay đổi cần thiết nào, tải mã lên ESP8266 mơ tả phần trước Mở hình nối tiếp Arduino IDE với tốc độ truyền 115200 Sau vài giây, địa IP bạn hiển thị Trong trường hợp chúng tơi, 192.168.1.95 29/31 Mở trình duyệt từ thiết bị kết nối với định tuyến mà ESP bạn Sau nhập địa IP nhấp vào Enter! Bây bạn thấy đọc nhiệt độ độ ẩm Để cập nhật đọc, bạn cần làm trang web Troubleshooting Nếu cảm biến DHT bạn không nhận kết đọc, đọc Hướng dẫn khắc phục cố DHT để giúp bạn khắc phục cố Tổng kết 30/31 Trong dự án này, cho bạn cách hiển thị số đọc cảm biến từ cảm biến DHT trang web Chúng tơi cung cấp hai ví dụ: máy chủ web đơn giản máy chủ web không đồng với tính tự động cập nhật Bây giờ, bạn dễ dàng sửa đổi ví dụ cung cấp để hiển thị đọc từ cảm biến khác Nếu bạn thích dự án ESP8266 IoT, xem số tài nguyên chúng tơi: Tự động hóa gia đình với ESP8266 (Khóa học) Học ESP32 với Arduino IDE (Khóa học) Lập trình MicroPython với ESP32 ESP8266 (ebook) Bạn thích số dự án phổ biến với ESP8266: Hack cảm biến chuyển động PIR với ESP8266 Xây dựng chắn đa cảm biến cho ESP8266 Nút Wi-Fi ESP8266 - Tự chép nút Amazon Dash 30+ Dự án ESP8266 Cảm ơn bạn đọc 31/31