Máy chủ web điều nhiệt ESP32 ESP8266 Kiểm soát đầu ra dựa trên nhiệt độ

19 1 0
Máy chủ web điều nhiệt ESP32  ESP8266  Kiểm soát đầu ra dựa trên nhiệt độ

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Trong dự án này, bạn sẽ xây dựng Máy chủ web điều nhiệt ESP32 ESP8266 với trường đầu vào để đặt giá trị ngưỡng nhiệt độ. Điều này cho phép bạn tự động điều khiển đầu ra dựa trên chỉ số nhiệt độ hiện tại. Đầu ra sẽ được đặt thành bật nếu nhiệt độ cao hơn hoặc đặt thành tắt nếu nó dưới ngưỡng điều này có thể được sử dụng để xây dựng một dự án điều chỉnh nhiệt đơn giản.

Máy chủ web điều nhiệt ESP32 / ESP8266 - Kiểm soát đầu dựa nhiệt độ Trong dự án này, bạn xây dựng Máy chủ web điều nhiệt ESP32 / ESP8266 với trường đầu vào để đặt giá trị ngưỡng nhiệt độ Điều cho phép bạn tự động điều khiển đầu dựa số nhiệt độ Đầu đặt thành bật nhiệt độ cao đặt thành tắt ngưỡng - điều sử dụng để xây dựng dự án điều chỉnh nhiệt đơn giản 1/19 Ví dụ, đọc nhiệt độ cảm biến nhiệt độ DS18B20 Bạn sử dụng cảm biến nhiệt độ khác DHT11 / DHT22, BME280 LM35 Để hiểu rõ cách thức hoạt động dự án này, khuyên bạn nên đọc hướng dẫn sau: Nhập liệu máy chủ web HTML Form ESP32 / ESP8266 (Arduino IDE) ESP32 với DS18B20 (một cảm biến, nhiều cảm biến, máy chủ web) ESP8266 NodeMCU với DS18B20 (một cảm biến, nhiều cảm biến, máy chủ web) Máy chủ Web ESP32 Máy chủ Web ESP8266 NodeMCU Tổng quan dự án Hình ảnh sau cho thấy tổng quan cấp cao dự án mà xây dựng ESP32 / ESP8266 lưu trữ máy chủ web hiển thị đọc nhiệt độ từ cảm biến nhiệt độ DS18B20 Có trường đầu vào để thiết lập giá trị ngưỡng nhiệt độ Khi nhiệt độ vượt ngưỡng, đầu tự động bật Bạn đảo ngược logic tùy thuộc vào ứng dụng dự án bạn Khi nhiệt độ xuống ngưỡng, đầu bị tắt Hệ thống kích hoạt hủy kích hoạt thơng qua máy chủ web Nếu bạn chọn hủy kích hoạt hệ thống, đầu giữ trạng thái nó, giá trị nhiệt độ 2/19 Hình ảnh sau cho thấy trang máy chủ web trông Điều kiện tiên Hãy chắn bạn kiểm tra điều kiện tiên sau trước tiếp tục dự án Tiện ích bổ sung ESP32 ESP8266 Arduino IDE Dự án tương thích với bảng ESP32 ESP8266 Chúng tơi lập trình bo mạch Arduino IDE, đảm bảo bạn cài đặt tiện ích bổ sung cần thiết: Thư viện máy chủ web không đồng Để xây dựng máy chủ web không đồng bộ, bạn cần cài đặt thư viện ESP32: cài đặt ESPAsyncWebServer thư viện AsyncTCP ESP8266: cài đặt ESPAsyncWebServer thư viện ESPAsyncTCP Các thư viện khơng có sẵn để cài đặt thơng qua Trình quản lý thư viện Arduino, bạn cần chép tệp thư viện vào thư mục Thư viện cài đặt Arduino Ngoài ra, Arduino IDE, bạn vào Sketch > Include Library > Add zip Library chọn thư viện bạn vừa tải xuống Các phận cần thiết 3/19 Để làm theo hướng dẫn này, bạn cần phần sau: ESP32 ( đọc bảng ESP32 tốt nhất) ESP8266 (đọc bảng ESP8266 tốt ) DẪN Điện trở 220 Ohm Điện trở 4.7k Ohm Dây nhảy Breadboard Sơ đồ Trước tiếp tục, nối cảm biến nhiệt độ DS18B20 vào bảng bạn ESP32 với DS18B20 LED Nếu bạn sử dụng ESP32, nối dây cảm biến nhiệt độ DS18B20 thể sơ đồ sau, với chân liệu kết nối với GPIO 4/19 ESP8266 với DS18B20 LED Nếu bạn sử dụng ESP8266, nối dây cảm biến nhiệt độ DS18B20 thể sơ đồ sau, với chân liệu kết nối với GPIO (D2) 5/19 Mã - Máy chủ web điều nhiệt với đầu vào ngưỡng Sao chép mã sau vào Arduino IDE bạn, chưa tải lên Bạn cần thực số thay đổi để làm cho hoạt động cho bạn Bạn cần chèn thông tin đăng nhập mạng giá trị ngưỡng mặc định 6/19 /********* Rui Santos Complete project details at https://RandomNerdTutorials.com/esp32-esp8266- thermostat-webserver/ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software *********/ #ifdef ESP32 #include #include #else #include #include #endif #include #include #include #include // REPLACE WITH YOUR NETWORK CREDENTIALS const char* ssid = "REPLACE_WITH_YOUR_SSID"; const char* password = "REPLACE_WITH_YOUR_PASSWORD"; // Default Threshold Temperature Value String inputMessage = "25.0"; String lastTemperature; String enableArmChecked = "checked"; String inputMessage2 = "true"; // HTML web page to handle input fields (threshold_input, enable_arm_input) const char index_html[] PROGMEM = R"rawliteral( Temperature Threshold Output Control DS18B20 Temperature %TEMPERATURE% °C ESP Arm Trigger Temperature Threshold Arm Trigger )rawliteral"; void notFound(AsyncWebServerRequest *request) { request>send(404, "text/plain", "Not found"); } 7/19 AsyncWebServer server(80); // Replaces placeholder with DS18B20 values String processor(const String& var){ //Serial.println(var); if(var == "TEMPERATURE"){ return lastTemperature; } else if(var == "THRESHOLD"){ return inputMessage; } else if(var == "ENABLE_ARM_INPUT"){ return enableArmChecked; } return String(); } // Flag variable to keep track if triggers was activated or not bool triggerActive = false; const char* PARAM_INPUT_1 = "threshold_input"; const char* PARAM_INPUT_2 = "enable_arm_input"; // Interval between sensor readings Learn more about ESP32 timers: https://RandomNerdTutorials.com/esp32-pir-motion-sensor-interrupts-timers/ unsigned long previousMillis = 0; const long interval = 5000; // GPIO where the output is connected to const int output = 2; // GPIO where the DS18B20 is connected to const int oneWireBus = 4; // Setup a oneWire instance to communicate with any OneWire devices OneWire oneWire(oneWireBus); // Pass our oneWire reference to Dallas Temperature sensor DallasTemperature sensors(&oneWire); void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); if (WiFi.waitForConnectResult() != WL_CONNECTED) { Serial.println("WiFi Failed!"); return; } Serial.println(); Serial.print("ESP IP Address: http://"); Serial.println(WiFi.localIP()); pinMode(output, OUTPUT); digitalWrite(output, LOW); // Start the DS18B20 sensor sensors.begin(); 8/19 // Send web page to client server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request>send_P(200, "text/html", index_html, processor); }); // Receive an HTTP GET request at /get?threshold_input= &enable_arm_input= server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) { // GET threshold_input value on /get?threshold_input= if (request>hasParam(PARAM_INPUT_1)) { inputMessage = request->getParam(PARAM_INPUT_1)->value(); // GET enable_arm_input value on /get?enable_arm_input= if (request->hasParam(PARAM_INPUT_2)) { inputMessage2 = request->getParam(PARAM_INPUT_2)->value(); enableArmChecked = "checked"; } else { inputMessage2 = "false"; enableArmChecked = ""; } } Serial.println(inputMessage); Serial.println(inputMessage2); request->send(200, "text/html", "HTTP GET request sent to your ESP.Return to Home Page"); }); server.onNotFound(notFound); server.begin(); } void loop() { unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; sensors.requestTemperatures(); // Temperature in Celsius degrees float temperature = sensors.getTempCByIndex(0); Serial.print(temperature); Serial.println(" *C"); // Temperature in Fahrenheit degrees /*float temperature = sensors.getTempFByIndex(0); Serial.print(temperature); Serial.println(" *F");*/ lastTemperature = String(temperature); // Check if temperature is above threshold and if it needs to trigger output if(temperature > inputMessage.toFloat() && inputMessage2 == "true" && !triggerActive){ String message = String("Temperature above threshold Current temperature: ") + String(temperature) + String("C"); Serial.println(message); triggerActive = true; 9/19 digitalWrite(output, HIGH); } // Check if temperature is below threshold and if it needs to trigger output else if((temperature < inputMessage.toFloat()) && inputMessage2 == "true" && triggerActive) { String message = String("Temperature below threshold Current temperature: ") + String(temperature) + String(" C"); Serial.println(message); triggerActive = false; digitalWrite(output, LOW); } } } Xem mã thô Mã hoạt động Tiếp tục đọc để tìm hiểu cách mã hoạt động chuyển đến phần Trình diễn Thư viện Bắt đầu cách nhập thư viện cần thiết WiFi (hoặc ESP8266WiFi), AsyncTCP (hoặc ESPAsyncTCP) ESPAsyncWebServer yêu cầu để xây dựng máy chủ web OneWire DallasTemperature yêu cầu để giao tiếp với DS18B20 Mã tự động nhập thư viện phù hợp với bảng chọn (ESP32 ESP8266) #ifdef ESP32 #include #include #else #include #include #endif #include #include #include #include Thông tin đăng nhập mạng Chèn thông tin đăng nhập mạng bạn vào dòng sau: // REPLACE WITH YOUR NETWORK CREDENTIALS const char* ssid = "REPLACE_WITH_YOUR_SSID"; const char* password = "REPLACE_WITH_YOUR_PASSWORD"; Giá trị ngưỡng nhiệt độ mặc định 10/1 Trong biến inputMessage, chèn giá trị ngưỡng nhiệt độ mặc định bạn Chúng đặt thành 25.0, bạn đặt yo giá trị khác String inputMessage = "25.0"; Biến phụ trợ Biến lastTemperature giữ số đọc nhiệt độ để so sánh với giá trị ngưỡng String lastTemperature; Biến enableArmChecked cho biết hộp kiểm để tự động kiểm sốt đầu có chọn hay không String enableArmChecked = "checked"; Trong trường hợp chọn, giá trị lưu inputMessage2 phải đặt thành true String inputMessage2 = "true"; Văn HTML Sau đó, chúng tơi có số văn HTML để xây dựng trang với hai trường đầu vào: trường nhập ngưỡng nhiệt độ hộp kiểm để bật tắt tự động kiểm soát đầu Trang web hiển thị số đọc nhiệt độ từ cảm biến nhiệt độ DS18B20 Các dòng sau hiển thị nhiệt độ: DS18B20 Temperature %TEMPERATURE% °C %TEMPERATURE% trình giữ chỗ thay giá trị nhiệt độ thực tế ESP32/ESP8266 phân phối trang Sau đó, chúng tơi có biểu mẫu với hai trường nhập liệu nút "Gửi" Khi người dùng nhập số liệu nhấp vào nút "Gửi", giá trị gửi đến ESP để cập nhật biến Temperature Threshold Arm Trigger Trường nhập số loại trường nhập thứ hai hộp kiểm Để tìm hiểu thêm trường đầu vào, khuyên bạn nên xem tài nguyên sau trang web w3schools: 11/19 Thuộc tính hành động biểu mẫu định nơi gửi liệu chèn vào biểu mẫu sau nhấn gửi Trong trường hợp này, thực yêu cầu HTTP GET để: /get?threshold_input=value&enable_arm_input=value Giá trị đề cập đến văn bạn nhập vào trường nhập Để tìm hiểu thêm cách xử lý trường đầu vào với ESP32 / ESP8266, đọc: Nhập liệu Máy chủ Web HTML Form ESP32 / ESP8266 Arduino IDE xử lý() Hàm processor() thay tất chỗ dành sẵn văn HTML giá trị thực tế % NHIỆT ĐỘ » lastNhiệt độ %THRESHOLD% » inputMessage String processor(const String& var){ //Serial.println(var); if(var == "TEMPERATURE"){ return lastTemperature; } else if(var == "THRESHOLD"){ return inputMessage; } else if(var == "ENABLE_ARM_INPUT"){ return enableArmChecked; } return String(); } Tham số trường đầu vào Các biến sau sử dụng để kiểm tra xem nhận yêu cầu HTTP GET từ trường đầu vào hay chưa lưu giá trị thành biến tương ứng const char* PARAM_INPUT_1 = "threshold_input"; const char* PARAM_INPUT_2 = "enable_arm_input"; Khoảng thời gian đọc Cứ sau 5000 mili giây (5 giây), nhận kết đọc nhiệt độ từ cảm biến nhiệt độ DS18B20 so sánh với giá trị ngưỡng Để theo dõi thời gian, sử dụng hẹn Thay đổi biến khoảng thời gian bạn muốn thay đổi thời gian lần đọc cảm biến unsigned long previousMillis = 0; const long interval = 5000; 12/19 Đầu GPIO Trong ví dụ này, kiểm soát GPIO GPIO kết nối với đèn LED tích hợp ESP32 ESP8266, cho phép chúng tơi dễ dàng kiểm tra xem dự án có hoạt động mong đợi hay khơng Bạn kiểm sốt đầu khác nhiều ứng dụng, bạn muốn điều khiển mô-đun chuyển tiếp // GPIO where the output is connected to const int output = 2; Cảm biến nhiệt độ DS18B20 Init Khởi tạo cảm biến nhiệt độ DS18B20 // GPIO where the DS18B20 is connected to const int oneWireBus = 4; // Setup a oneWire instance to communicate with any OneWire devices OneWire oneWire(oneWireBus); // Pass our oneWire reference to Dallas Temperature sensor DallasTemperature sensors(&oneWire); Để tìm hiểu thêm cách giao tiếp cảm biến nhiệt độ DS18B20 với bảng ESP, đọc: Cảm biến nhiệt độ ESP32 DS18B20 Cảm biến nhiệt độ ESP8266 NodeMCU DS18B20 Thiết lập() Trong setup(), kết nối với Wi-Fi chế độ trạm in địa IP ESP: Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); if (WiFi.waitForConnectResult() != WL_CONNECTED) { Serial.println("WiFi Failed!"); return; } Serial.println(); Serial.print("ESP IP Address: http://"); Serial.println(WiFi.localIP()); Đặt GPIO làm đầu đặt thành THẤP ESP khởi động lần pinMode(output, OUTPUT); digitalWrite(output, LOW); Khởi tạo cảm biến nhiệt độ DS18B20: sensors.begin(); Xử lý máy chủ web 13/19 Sau đó, xác định điều xảy ESP32 ESP8266 nhận yêu cầu HTTP Khi nhận yêu cầu thư mục gốc / url, gửi văn HTML với xử lý (để trình giữ chỗ thay giá trị nhất) server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request>send_P(200, "text/html", index_html, processor); }); Khi biểu mẫu gửi, ESP nhận yêu cầu URL sau: /get?threshold_input=&enable_arm_input= Vì vậy, chúng tơi kiểm tra xem u cầu có chứa tham số đầu vào hay khơng lưu tham số thành biến: server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) { // GET threshold_input value on /get?threshold_input= if (request>hasParam(PARAM_INPUT_1)) { inputMessage = request->getParam(PARAM_INPUT_1)->value(); // GET enable_arm_input value on /get?enable_arm_input= if (request>hasParam(PARAM_INPUT_2)) { inputMessage2 = request->getParam(PARAM_INPUT_2)->value(); enableArmChecked = "checked"; } else { inputMessage2 = "false"; enableArmChecked = ""; } } Đây phần mã nơi biến thay giá trị gửi biểu mẫu Biến inputMessage lưu giá trị ngưỡng nhiệt độ inputMessage2 lưu xem hộp kiểm có đánh dấu hay khơng (chúng ta có nên kiểm sốt GPIO hay không) Sau gửi giá trị biểu mẫu, hiển thị trang cho biết yêu cầu gửi thành công đến bảng bạn với liên kết để quay lại trang chủ request->send(200, "text/html", "HTTP GET request sent to your ESP.Return to Home Page"); }); Cuối cùng, khởi động máy chủ: server.begin(); vịng lặp() Trong loop(), chúng tơi sử dụng hẹn để nhận số nhiệt độ sau giây 14/19 unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; sensors.requestTemperatures(); // Temperature in Celsius degrees float temperature = sensors.getTempCByIndex(0); Serial.print(temperature); Serial.println(" *C"); // Temperature in Fahrenheit degrees /*float temperature = sensors.getTempFByIndex(0); Serial.print(temperature); Serial.println(" *F");*/ lastTemperature = String(temperature); Sau nhận kết đọc nhiệt độ mới, kiểm tra xem hay ngưỡng bật tắt đầu cho phù hợp Trong ví dụ này, đặt trạng thái đầu thành CAO, tất điều kiện đáp ứng: Nhiệt độ ngưỡng; Điều khiển đầu tự động bật (hộp kiểm đánh dấu trang web); Nếu đầu chưa kích hoạt // Check if temperature is above threshold and if it needs to trigger output if(temperature > inputMessage.toFloat() && inputMessage2 == "true" && !triggerActive){ String message = String("Temperature above threshold Current temperature: ") + String(temperature) + String("C"); Serial.println(message); triggerActive = true; digitalWrite(output, HIGH); } Sau đó, nhiệt độ xuống ngưỡng, đặt đầu thành THẤP else if((temperature < inputMessage.toFloat()) && inputMessage2 == "true" && triggerActive) { String message = String("Temperature below threshold Current temperature: ") + String(temperature) + String(" C"); Serial.println(message); triggerActive = false; digitalWrite(output, LOW); } Tùy thuộc vào ứng dụng bạn, bạn muốn thay đổi đầu thành THẤP, nhiệt độ ngưỡng CAO đầu ngưỡng Trình diễn - Bộ điều nhiệt ESP 15/19 Tải mã lên bảng ESP bạn (với DS18B20 có dây với bảng ESP32 ESP8266 bạn) Mở Màn hình nối tiếp với tốc độ truyền 115200 nhấn nút RST / EN bo mạch ESP in địa IP bắt đầu hiển thị giá trị nhiệt độ sau giây Mở trình duyệt nhập địa IP ESP Một trang web tương tự tải với giá trị mặc định (được xác định mã bạn): 16/19 Nếu kích hoạt cánh tay bật (hộp kiểm chọn) nhiệt độ vượt ngưỡng, đèn LED bật (đầu đặt thành CAO) Sau đó, nhiệt độ xuống ngưỡng, đầu tắt 17/19 Bạn sử dụng trường nhập trang web để thay đổi giá trị ngưỡng để cánh tay vơ hiệu hóa việc kiểm sốt đầu Để thay đổi có hiệu lực, bạn cần nhấn nút "Gửi" Đồng thời, bạn nhận trường đầu vào Serial Monitor Tổng kết Trong dự án này, bạn tìm hiểu cách tạo máy chủ web với giá trị ngưỡng để tự động kiểm soát đầu phù hợp với máy chủ web điều nhiệt đọc nhiệt độ tại) Ví dụ, điều khiển đèn LED Đối với ứng dụng giới thực, có 18/19 thể bạn muốn điều khiển mô-đun chuyển tiếp Bạn đọc hướng dẫn sau để tìm hiểu cách điều khiển rơle ESP: Mô-đun rơle ESP32 - Thiết bị AC điều khiển (Máy chủ web) ESP8266 Mô-đun chuyển tiếp NodeMCU - Thiết bị AC điều khiển (Máy chủ Web) Chúng sử dụng văn HTML thô, để làm cho dự án dễ theo dõi Chúng khuyên bạn nên thêm số CSS để tạo kiểu cho trang web bạn để làm cho trơng đẹp Bạn muốn thêm thông báo qua email vào dự án Nếu bạn muốn tìm hiểu thêm ESP32 ESP8266, thử dự án tài nguyên chúng tôi: Học ESP32 với Arduino IDE Tự động hóa gia đình sử dụng ESP8266 Lập trình MicroPython với ESP32 ESP8266 Thêm tài nguyên ESP32 Thêm tài nguyên ESP8266 Cảm ơn bạn đọc 19/19

Ngày đăng: 09/04/2023, 20:45

Tài liệu cùng người dùng

Tài liệu liên quan