ESP8266 NodeMCU Web Server với thanh trượt: Điều khiển độ sáng LED (PWM) Hướng dẫn này chỉ ra cách xây dựng máy chủ web ESP8266 NodeMCU bằng thanh trượt để kiểm soát độ sáng LED. Bạn sẽ học cách thêm thanh trượt vào các dự án máy chủ web của mình, lấy giá trị của nó và lưu nó vào một biến mà ESP8266 có thể sử dụng. Chúng tơi sẽ sử dụng giá trị đó để kiểm sốt chu kỳ hoạt động của tín hiệu PWM và thay đổi độ sáng của đèn LED. Thay vì đèn LED, bạn có thể điều khiển động cơ servo chẳng hạn.
Ngồi ra, bạn cũng có thể sửa đổi mã trong hướng dẫn này để thêm thanh trượt vào các dự án của mình để đặt giá trị ngưỡng hoặc bất kỳ giá trị nào khác mà bạn cần sử dụng trong mã của mình.
Tổng quan dự án
1/14
ESP8266 lưu trữ một máy chủ web hiển thị một trang web với một thanh trượt; Khi bạn di chuyển thanh trượt, bạn thực hiện một yêu cầu HTTP ESP8266 với giá trị thanh trượt mới; Yêu cầu HTTP có định dạng sau: GET/slider?value=SLIDERVALUE, trong đó SLIDERVALUE là một số từ 0 đến 1023. Bạn có thể sửa đổi thanh trượt của mình để bao gồm bất kỳ phạm vi nào khác; Từ yêu cầu HTTP, ESP8266 nhận giá trị hiện tại của thanh trượt; ESP8266 điều chỉnh chu kỳ nhiệm vụ PWM phù hợp với giá trị thanh trượt; Điều này có thể hữu ích để kiểm soát độ sáng của đèn LED (như chúng ta sẽ làm trong ví dụ này), động cơ servo, thiết lập giá trị ngưỡng hoặc các ứng dụng khác.
Điều kiện tiên quyết Trước khi tiến hành dự án này, hãy đảm bảo bạn kiểm tra các điều kiện tiên quyết sau.
Arduino IDE Chúng tôi sẽ lập trình bo mạch ESP8266 NodeMCU bằng Arduino IDE, vì vậy trước khi tiếp tục với hướng dẫn này, hãy đảm bảo rằng bạn đã cài đặt bảng ESP8266 trong Arduino IDE của mình. Cài đặt bảng mạch ESP8266 NodeMCU trong Arduino IDE (Windows, Mac OS X và Linux)
Thư viện máy chủ web không đồng bộ 2/14
Chúng ta sẽ xây dựng máy chủ web bằng các thư viện sau: ESPAsyncWebServer ESPAsyncTCP Các thư viện này khơng có sẵn để cài đặt thơng qua Trình quản lý thư viện Arduino, vì vậy bạn cần sao chép các tệp thư viện vào thư mục Thư viện cài đặt Arduino. Ngoài ra, trong Arduino IDE, bạn có thể vào Sketch > Include Library > Add .zip Library và chọn các thư viện bạn vừa tải xuống.
Mã Đoạn mã sau đây kiểm soát độ sáng của đèn LED tích hợp ESP8266 bằng cách sử dụng thanh trượt trên máy chủ web. Nói cách khác, bạn có thể thay đổi chu kỳ nhiệm vụ PWM bằng thanh trượt. Điều này có thể hữu ích để kiểm sốt độ sáng LED hoặc điều khiển động cơ servo chẳng hạn. Sao chép mã vào Arduino IDE của bạn. Chèn thông tin đăng nhập mạng của bạn và mã sẽ hoạt động thẳng.
3/14
/*********
Rui Santos
Complete project details at /> 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.
Mã hoạt động như thế nào Tiếp tục đọc để tìm hiểu cách mã hoạt động hoặc chuyển sang phần tiếp theo.
Nhập thư viện
Đầu tiên, nhập các thư viện cần thiết. ESP8266WiFi, ESPAsyncWebServer và ESPAsyncTCP là cần thiết để xây dựng máy chủ web. #include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
Đặt thông tin đăng nhập mạng của bạn Chèn thông tin đăng nhập mạng của bạn vào các biến sau, để ESP8266 có thể kết nối với mạng cục bộ của bạn. const char* ssid = "REPLACE_WITH_YOUR_SSID";
Định nghĩa biến Chúng tơi sẽ kiểm sốt độ sáng của đèn LED tích hợp ESP8266. Đèn LED tích hợp tương ứng với GPIO 2. Lưu GPIO mà chúng ta muốn kiểm soát trên biến đầu ra. const int output = 2;
Biến sliderValue sẽ giữ giá trị thanh trượt. Khi bắt đầu, nó được đặt thành không. String sliderValue = "0";
Thông số đầu vào Biến PARAM_INPUT sẽ được sử dụng để "tìm kiếm" giá trị thanh trượt theo yêu cầu mà ESP8266 nhận được khi thanh trượt được di chuyển. (Hãy nhớ rằng: ESP8266 sẽ nhận được một yêu cầu như thế này GET/slider?value=SLIDERVALUE) const char* PARAM_INPUT = "value";
Nó sẽ tìm kiếm giá trị trên URL và nhận được giá trị được gán cho nó.
6/14
Xây dựng trang Web Bây giờ chúng ta hãy tiến hành trang máy chủ web.
Trang web cho dự án này khá đơn giản. Nó chứa một tiêu đề, một đoạn văn và một đầu vào của phạm vi kiểu. Hãy xem cách trang web được tạo. Tất cả văn bản HTML với các kiểu được bao gồm được lưu trữ trong biến index_html. Bây giờ chúng ta sẽ đi qua văn bản HTML và xem mỗi phần làm gì. Thẻ <meta> sau đây làm cho trang web của bạn đáp ứng trong bất kỳ trình duyệt nào. <meta name="viewport" content="width=device-width, initial-scale=1">
Giữa các thẻ <title> </title> là tiêu đề của máy chủ web của chúng tôi. Tiêu đề là văn bản hiển thị trên tab trình duyệt web. Phong cách Giữa các thẻ <style></style>, chúng tôi thêm một số CSS để tạo kiểu cho trang web.
7/14
<style>
html {font-family: Arial; display: inline-block; text-align: center;}
h2 {font-size: 2.3rem;}
p {font-size: 1.9rem;}
body {max-width: 400px; margin:0px auto; padding-bottom: 25px;}
Về cơ bản, chúng tôi đang thiết lập trang HTML để hiển thị văn bản với phông chữ Arial trong khối khơng có lề và được căn chỉnh ở giữa. html {font-family: Arial; display: inline-block; text-align: center;}
Các dòng sau đây đặt kích thước phơng chữ cho tiêu đề (h2) và đoạn (p). h2 {font-size: 2.3rem;}
p {font-size: 1.9rem;}
Đặt thuộc tính nội dung HTML. body {max-width: 400px; margin:0px auto; padding-bottom: 25px;}
Các dòng sau đây tùy chỉnh thanh trượt: .slider { -webkit-appearance: none; margin: 14px; width: 360px; height: 25px; background: #FFD65C;
Nội dung HTML Bên trong thẻ <body></body> là nơi chúng tôi thêm nội dung trang web. Thẻ thêm tiêu đề vào trang web. Trong trường hợp này, văn bản "Máy chủ web ESP", nhưng bạn có thể thêm bất kỳ văn bản nào khác.
ESP Web Server
Đoạn đầu tiên sẽ chứa giá trị thanh trượt hiện tại. Thẻ HTML cụ thể đó có id textSliderValue gán cho nó, để chúng ta có thể tham chiếu nó sau này.
<span id="textSliderValue">%SLIDERVALUE%</span>
8/14
%SLIDERVALUE% là chỗ dành sẵn cho giá trị thanh trượt. Điều này sẽ được thay thế bằng ESP8266 bằng một giá trị thực tế khi nó gửi nó đến trình duyệt. Điều này rất hữu ích để hiển thị giá trị hiện tại khi bạn truy cập trình duyệt lần đầu tiên.
Tạo thanh trượt Để tạo thanh trượt trong HTML, bạn sử dụng thẻ <input>. Thẻ <input> chỉ định một trường nơi người dùng có thể nhập dữ liệu. Có rất nhiều loại đầu vào. Để xác định thanh trượt, hãy sử dụng thuộc tính "type" với giá
trị "range". Trong thanh trượt, bạn cũng cần xác định phạm vi tối thiểu và tối đa bằng cách sử dụng các thuộc tính "min" và "max" (trong trường hợp này lần lượt là 0 và 1023).
Bạn cũng cần xác định các thuộc tính khác như: Thuộc tính STEP chỉ định khoảng thời gian giữa các số hợp lệ. Trong trường hợp của chúng tôi, nó được đặt thành 1; lớp để tạo kiểu cho thanh trượt (class = "thanh trượt"); ID để cập nhật vị trí hiện tại được hiển thị trên trang web; thuộc tính onchange để gọi một hàm (updateSliderPWM(this)) để gửi yêu cầu HTTP đến ESP8266 khi thanh trượt di chuyển. Từ khóa này đề cập đến giá trị hiện tại của thanh trượt.
Thêm JavaScript vào tệp HTML Tiếp theo, bạn cần thêm một số mã JavaScript vào tệp HTML của mình bằng cách sử dụng thẻ <script> và </script>. Bạn cần thêm hàm updateSliderPWM() sẽ đưa ra yêu cầu đến ESP8266 với giá trị thanh trượt hiện tại. <script>
function updateSliderPWM(element) {
var sliderValue = document.getElementById("pwmSlider").value;
Dòng tiếp theo này lấy giá trị thanh trượt hiện tại bằng id của nó và lưu nó vào biến JavaScript sliderValue. Trước đây, chúng ta đã gán id của thanh trượt cho pwmSlider. Vì vậy, chúng tơi nhận được nó như sau: var sliderValue = document.getElementById("pwmSlider").value;
9/14
Sau đó, chúng tơi đặt nhãn thanh trượt (có id là textSliderValue) thành giá trị được lưu trên biến sliderValue. Cuối cùng, thực hiện một yêu cầu HTTP GET. var xhr = new XMLHttpRequest();
Ví dụ: khi thanh trượt là 0, bạn thực hiện một yêu cầu HTTP GET trên URL sau: http://ESP-IP-ADDRESS/slider?value=0
Và khi giá trị thanh trượt là 200, bạn sẽ có một yêu cầu trên URL theo dõi.
http://ESP-IP-ADDRESS/slider?value=200
Bằng cách này, khi ESP8266 nhận được yêu cầu GET, nó có thể truy xuất tham số giá trị trong URL và kiểm sốt tín hiệu PWM tương ứng như chúng ta sẽ se trong các phần tiếp theo
Xử lý Bây giờ, chúng ta cần tạo hàm processor(), hàm này sẽ thay thế các trình giữ chỗ trong văn bản HTML của chúng ta bằng giá trị thanh trượt hiện tại khi bạn truy cập nó lần đầu tiên trong trình duyệt. // Replaces placeholder with button section in your web page
String processor(const String& var){
//Serial.println(var);
if (var == "SLIDERVALUE"){
return sliderValue;
}
return String();
}
Khi trang web được yêu cầu, chúng tôi sẽ kiểm tra xem HTML có bất kỳ trình giữ chỗ nào khơng. Nếu nó tìm thấy chỗ dành sẵn %SLIDERVALUE%, chúng ta trả về giá trị đã lưu trên biến sliderValue.
Thiết lập() Trong setup(), khởi tạo Serial Monitor cho mục đích gỡ lỗi. Serial.begin(115200);
Đặt chu kỳ nhiệm vụ của tín hiệu PWM thành giá trị được lưu trên thanh trượt (khi ESP8266 khởi động, nó được đặt thành 0). analogWrite(output, sliderValue.toInt());
10/14
Để tìm hiểu thêm về PWM với ESP8266 , hãy đọc hướng dẫn của chúng tôi: ESP8266 PWM với Arduino IDE (Đầu ra tương tự). Kết nối với mạng cục bộ của bạn và in địa chỉ IP ESP8266. // Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
// Print ESP Local IP Address
Serial.println(WiFi.localIP());
Xử lý yêu cầu Cuối cùng, thêm các dòng mã tiếp theo để xử lý máy chủ web. // Route for root / web page
Khi chúng tôi thực hiện một yêu cầu trên URL gốc, chúng tôi gửi văn bản HTML được lưu trữ trên biến index_html. Chúng ta cũng cần truyền hàm processor(), hàm này sẽ thay thế tất cả các placeholder bằng các giá trị phù hợp. // Route for root / web page
Sau đó, cập nhật độ sáng LED (chu kỳ nhiệm vụ PWM) bằng cách sử dụng hàm ledcWrite() chấp nhận làm đối số kênh bạn muốn điều khiển và giá trị. ledcWrite(ledChannel, sliderValue.toInt());
Cuối cùng, khởi động máy chủ. server.begin();
Bởi vì đây là một máy chủ web khơng đồng bộ, chúng ta khơng cần phải viết bất cứ điều gì trong loop(). void loop(){
}
Đó là khá nhiều cách mã hoạt động.
Tải mã lên Bây giờ, hãy tải mã lên ESP8266 của bạn. Đảm bảo rằng bạn đã chọn đúng bo mạch và cổng COM. Sau khi tải lên, hãy mở Màn hình nối tiếp với tốc độ truyền là 115200. Nhấn nút đặt lại ESP8266. Địa chỉ IP ESP8266 phải được in trong màn hình nối tiếp.
12/14
Trình diễn máy chủ web Mở trình duyệt và nhập địa chỉ IP ESP8266. Máy chủ web của bạn sẽ hiển thị thanh trượt và giá trị hiện tại của nó.
Di chuyển thanh trượt và xem đèn LED tích hợp ESP8266 tăng và giảm độ sáng của nó.
Tổng kết
13/14
Với hướng dẫn này, bạn đã học cách thêm thanh trượt vào các dự án máy chủ web của mình và nhận và lưu giá trị của nó trên một biến mà ESP8266 có thể sử dụng. Ví dụ: chúng tơi đang điều khiển tín hiệu PWM để kiểm sốt độ sáng của đèn LED. Thay vì đèn LED, bạn có thể điều khiển động cơ servo chẳng hạn. Ngoài ra, thanh trượt cũng có thể được sử dụng để thiết lập ngưỡng hoặc bất kỳ giá trị nào khác mà bạn cần thiết lập và sau đó được ESP8266 sử dụng để quyết định điều gì đó. Nếu bạn đang sử dụng bảng ESP32, hãy đọc Máy chủ web ESP32 với Độ sáng LED điều khiển thanh trượt (PWM). Chúng tôi hy vọng bạn thấy dự án này hữu ích. Bạn cũng có thể thích các hướng dẫn sau: ESP-NOW Giao tiếp hai chiều giữa các bo mạch ESP8266 NodeMCU Máy chủ web ESP - Kiểm soát đầu ra bằng bộ hẹn giờ Máy chủ Web ESP8266 DHT11 / DHT22 - Nhiệt độ và Độ ẩm Tìm hiểu thêm về ESP8266 với các tài ngun của chúng tơi: Tự động hóa gia đình bằng ESP8266 (sách điện tử) Các dự án và hướng dẫn khác của ESP8266 NodeMCU... Cảm ơn bạn đã đọc.