Xây dựng Máy chủ Web ESP8266 - Code and Schematics (NodeMCU)

 Hướng dẫn này là hướng dẫn từng bước chỉ ra cách xây dựng Máy chủ Web ESP8266 độc lập điều khiển hai đầu ra (hai đèn LED). Máy chủ Web ESP8266 NodeMCU này đáp ứng trên thiết bị di động và nó có thể được truy cập bằng bất kỳ thiết bị nào có trình duyệt trong mạng cục bộ của bạn.

Xây dựng Máy chủ Web ESP8266 - Mã và Sơ đồ (NodeMCU)

Nếu bạn muốn tìm hiểu thêm về mô-đun ESP8266, trước tiên hãy đọc Hướng dẫn Bắt đầu của tôi cho Mô-đun WiFi ESP8266 . 

Hướng dẫn này bao gồm hai phương pháp khác nhau để xây dựng máy chủ web:

  • Phần 1 : Tạo máy chủ web bằng Arduino IDE
  • Phần 2 : Tạo máy chủ web bằng phần mềm NodeMCU

PHẦN 1: TẠO MÁY CHỦ WEB SỬ DỤNG ARDUINO IDE

Phần này hướng dẫn bạn cách tạo một máy chủ web để điều khiển hai đầu ra bằng Arduino IDE. Bạn có thể sử dụng phương pháp này để tạo một máy chủ web khác nhằm đáp ứng nhu cầu của mình.

Hướng dẫn này có sẵn ở định dạng video (xem bên dưới) và ở định dạng văn bản (tiếp tục đọc trang này).

Chuẩn bị Arduino IDE

1. Tải xuống và cài đặt Arduino IDE trên hệ điều hành của bạn (một số phiên bản cũ hơn sẽ không hoạt động).

2.  Sau đó, bạn cần cài đặt tiện ích bổ sung ESP8266 cho Arduino IDE. Để làm điều đó, hãy đi tới File > Preferences. .

3.  Nhậphttp://arduino.esp8266.com/stable/package_esp8266com_index.jsonvào trường " Additional Board Manager URLs " như được hiển thị trong hình bên dưới. Sau đó, nhấp vào nút “ OK ”.

Cài đặt Bo mạch ESP8266 URL trình quản lý Bo mạch bổ sung Arduino IDE

4.  Đi tới Tools > Board > Boards Manager

Cài đặt Bo mạch ESP8266 Trình quản lý Bo mạch Arduino IDE

5.  Cuộn xuống, chọn menu board ESP8266 và cài đặt “e sp8266 by ESP8266 Community ”, như trong hình bên dưới.

Cài đặt Bo mạch ESP8266 Arduino IDE

6. Đi tới Tools > Board và board ESP8266 của bạn. Sau đó, mở lại Arduino IDE của bạn.

Code

Sao chép mã sau vào Arduino IDE của bạn, nhưng chưa tải lên. Bạn cần thực hiện một số thay đổi để làm cho nó hoạt động cho bạn.

/*********
  Rui Santos
  Complete project details at https://randomnerdtutorials.com  
*********/

// Load Wi-Fi library
#include <ESP8266WiFi.h>

// Replace with your network credentials
const char* ssid     = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// Set web server port number to 80
WiFiServer server(80);

// Variable to store the HTTP request
String header;

// Auxiliar variables to store the current output state
String output5State = "off";
String output4State = "off";

// Assign output variables to GPIO pins
const int output5 = 5;
const int output4 = 4;

// Current time
unsigned long currentTime = millis();
// Previous time
unsigned long previousTime = 0; 
// Define timeout time in milliseconds (example: 2000ms = 2s)
const long timeoutTime = 2000;

void setup() {
  Serial.begin(115200);
  // Initialize the output variables as outputs
  pinMode(output5, OUTPUT);
  pinMode(output4, OUTPUT);
  // Set outputs to LOW
  digitalWrite(output5, LOW);
  digitalWrite(output4, LOW);

  // Connect to Wi-Fi network with SSID and password
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Print local IP address and start web server
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();
}

void loop(){
  WiFiClient client = server.available();   // Listen for incoming clients

  if (client) {                             // If a new client connects,
    Serial.println("New Client.");          // print a message out in the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    currentTime = millis();
    previousTime = currentTime;
    while (client.connected() && currentTime - previousTime <= timeoutTime) { // loop while the client's connected
      currentTime = millis();         
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        header += c;
        if (c == '\n') {                    // if the byte is a newline character
          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
            
            // turns the GPIOs on and off
            if (header.indexOf("GET /5/on") >= 0) {
              Serial.println("GPIO 5 on");
              output5State = "on";
              digitalWrite(output5, HIGH);
            } else if (header.indexOf("GET /5/off") >= 0) {
              Serial.println("GPIO 5 off");
              output5State = "off";
              digitalWrite(output5, LOW);
            } else if (header.indexOf("GET /4/on") >= 0) {
              Serial.println("GPIO 4 on");
              output4State = "on";
              digitalWrite(output4, HIGH);
            } else if (header.indexOf("GET /4/off") >= 0) {
              Serial.println("GPIO 4 off");
              output4State = "off";
              digitalWrite(output4, LOW);
            }
            
            // Display the HTML web page
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            // CSS to style the on/off buttons 
            // Feel free to change the background-color and font-size attributes to fit your preferences
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
            client.println(".button { background-color: #195B6A; border: none; color: white; padding: 16px 40px;");
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: #77878A;}</style></head>");
            
            // Web Page Heading
            client.println("<body><h1>ESP8266 Web Server</h1>");
            
            // Display current state, and ON/OFF buttons for GPIO 5  
            client.println("<p>GPIO 5 - State " + output5State + "</p>");
            // If the output5State is off, it displays the ON button       
            if (output5State=="off") {
              client.println("<p><a href=\"/5/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/5/off\"><button class=\"button button2\">OFF</button></a></p>");
            } 
               
            // Display current state, and ON/OFF buttons for GPIO 4  
            client.println("<p>GPIO 4 - State " + output4State + "</p>");
            // If the output4State is off, it displays the ON button       
            if (output4State=="off") {
              client.println("<p><a href=\"/4/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/4/off\"><button class=\"button button2\">OFF</button></a></p>");
            }
            client.println("</body></html>");
            
            // The HTTP response ends with another blank line
            client.println();
            // Break out of the while loop
            break;
          } else { // if you got a newline, then clear currentLine
            currentLine = "";
          }
        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }
      }
    }
    // Clear the header variable
    header = "";
    // Close the connection
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

View raw code

Bạn cần sửa đổi hai biến sau với thông tin đăng nhập mạng của mình để ESP8266 có thể thiết lập kết nối với bộ định tuyến của bạn.

// Replace with your network credentials
const char* ssid = "";
const char* password = "";

Uploading the Sketch

Tải Sketch xuống ESP-12E

Nếu bạn đang sử dụng Bộ công cụ ESP-12E NodeMCU, việc tải lên bản phác thảo rất đơn giản vì nó đã có trình lập trình tích hợp sẵn. Cắm bo mạch của bạn vào máy tính của bạn. Đảm bảo rằng bạn đã chọn đúng bo mạch và cổng COM.

Sau đó, nhấp vào nút Upload trong Arduino IDE và đợi vài giây cho đến khi bạn thấy thông báo “Done uploading”. ở góc dưới cùng bên trái.

Tải lên mã máy chủ web phác thảo Arduino IDE ESP8266 NodeMCU

Tải Sketch xuống ESP-01

Việc tải mã xuống ESP-01 yêu cầu thiết lập giao tiếp nối tiếp giữa ESP8266 của bạn và Bộ lập trình FTDI như được hiển thị trong sơ đồ bên dưới.

Mạch phần mềm nhấp nháy lập trình ESP8266 ESP-01 FTDI

Lưu ý: cách khác, bạn có thể sử dụng Bộ điều hợp nối tiếp ESP8266-01 , dễ sử dụng hơn và ít lỗi hơn.

Bảng sau đây cho thấy các kết nối bạn cần thực hiện giữa ESP8266 và bộ lập trình FTDI.

ESP8266FTDI programmer
RXTX
TXRX
CH_PD3,3V
GPIO 0GND
VCC3,3V
GNDGND

Nếu bạn có một FTDI programmer hoàn toàn mới, có thể bạn sẽ cần cài đặt trình điều khiển FTDI trên PC Windows của mình. Truy cập trang web này để biết các trình điều khiển chính thức . (Nếu cổng COM chuyển sang màu xám trong IDE Arduino của bạn, có thể là do bạn chưa cài đặt trình điều khiển).

Sau đó, bạn chỉ cần kết nối bộ lập trình FTDI với máy tính của mình và tải mã lên ESP8266.

Sơ đồ

Để xây dựng mạch cho hướng dẫn này, bạn cần các phần sau:

Các bộ phận cần thiết:

Nếu đang sử dụng ESP-01 , bạn cũng cần một bộ lập trình FTDI hoặc một Bộ điều hợp nối tiếp .

Kết nối hai đèn LED với ESP8266 của bạn như được hiển thị trong sơ đồ sau - với một đèn LED được kết nối vớiGPIO 4(D2), và một cái khác đểGPIO 5(D1).

Máy chủ web điều khiển sơ đồ đèn LED ESP8266 NodeMCU

Nếu bạn đang sử dụng ESP-01…

Nếu bạn đang sử dụng ESP8266-01, hãy sử dụng sơ đồ sau làm tham chiếu, nhưng bạn cần thay đổi chỉ định GPIO trong mã (đểGPIO 2GPIO 0).

Máy chủ web điều khiển sơ đồ đèn LED ESP-01

Testing the Web Server

Bây giờ, bạn có thể tải lên mã và nó sẽ hoạt động ngay lập tức. Đừng quên kiểm tra xem bạn đã chọn đúng bo mạch và cổng COM chưa, nếu không bạn sẽ gặp lỗi khi cố gắng tải lên. Mở Serial Monitor ở tốc độ truyền 115200.

Tìm địa chỉ IP ESP

Nhấn nút RESET ESP8266 và nó sẽ xuất ra địa chỉ IP ESP trên Màn hình nối tiếp

ESP8266 NodeMCU Web Server LED Control GPIOs Arduino IDE IP Address Serial Monitor

Sao chép địa chỉ IP đó, vì bạn cần nó để truy cập vào máy chủ web.

Truy cập Máy chủ Web

Mở trình duyệt của bạn, nhập địa chỉ IP ESP và bạn sẽ thấy trang sau. Trang này được gửi bởi ESP8266 khi bạn đưa ra yêu cầu về địa chỉ IP của ESP.

ESP8266 NodeMCU Web Server Điều khiển đèn LED GPIO Arduino IDE

Nếu nhìn vào màn hình nối tiếp, bạn có thể thấy những gì đang diễn ra trên nền. ESP nhận được một yêu cầu HTTP từ một máy khách mới - trong trường hợp này là trình duyệt của bạn.

Bạn cũng có thể xem thông tin khác về yêu cầu HTTP - các trường này được gọi là trường tiêu đề HTTP và chúng xác định các thông số hoạt động của một giao dịch HTTP.

ESP8266 NodeMCU Web Server Control LED GPIOs Serial Monitor Địa chỉ IP Arduino IDE

Kiểm tra Máy chủ Web

Hãy kiểm tra máy chủ web. Nhấp vào nút để quayGPIO 5TRÊN. ESP nhận được yêu cầu trên URL / 5 / on và BẬT LED 5.

ESP8266 NodeMCU Web Server Điều khiển LED GPIOs Màn hình nối tiếp Arduino IDE

Trạng thái đèn LED cũng được cập nhật trên trang web.

Các GPIO điều khiển đèn LED của Máy chủ Web ESP8266 NodeMCU

Bài kiểm traGPIO 4và kiểm tra xem nó có hoạt động theo cách tương tự hay không.

Cách hoạt động của mã

Bây giờ, chúng ta hãy xem xét kỹ hơn mã để xem nó hoạt động như thế nào, để bạn có thể sửa đổi nó để đáp ứng nhu cầu của mình.

Điều đầu tiên bạn cần làm là thêm thư viện ESP8266WiFi.

// Load Wi-Fi library
#include <ESP8266WiFi.h>

Như đã đề cập trước đó, bạn cần chèn ssid và mật khẩu wifi của mình vào các dòng sau bên trong dấu ngoặc kép.

const char* ssid = "";
const char* password = "";

Sau đó, bạn đặt máy chủ web của mình thành cổng 80.

// Set web server port number to 80
WiFiServer server(80);

Dòng sau tạo một biến để lưu trữ tiêu đề của yêu cầu HTTP:

String header;

Tiếp theo, bạn tạo các biến hỗ trợ để lưu trữ trạng thái hiện tại của kết quả đầu ra của bạn. Nếu bạn muốn thêm nhiều đầu ra hơn và lưu trạng thái của nó, bạn cần tạo nhiều biến hơn.

// Auxiliar variables to store the current output state
String output5State = "off";
String output4State = "off";

Bạn cũng cần chỉ định GPIO cho mỗi đầu ra của mình. Ở đây chúng tôi đang sử dụngGPIO 4GPIO 5Bạn có thể sử dụng bất kỳ GPIO phù hợp nào khác.

// Assign output variables to GPIO pins
const int output5 = 5;
const int output4 = 4;

setup()

Bây giờ, chúng ta hãy đi vàosetup()Cácsetup()chức năng chỉ chạy một lần khi ESP của bạn khởi động lần đầu. Đầu tiên, chúng tôi bắt đầu giao tiếp nối tiếp ở tốc độ truyền 115200 cho mục đích gỡ lỗi.

Serial.begin(115200);

Bạn cũng xác định các GPIO của mình là ĐẦU RA và đặt chúng thành THẤP.

// Initialize the output variables as outputs
pinMode(output5, OUTPUT);
pinMode(output4, OUTPUT);
// Set outputs to LOW
digitalWrite(output5, LOW);
digitalWrite(output4, LOW);

Các dòng sau bắt đầu kết nối Wi-Fi vớiWiFi.begin (ssid, password), đợi kết nối thành công và in địa chỉ IP ESP trong Màn hình Monitor.

// Connect to Wi-Fi network with SSID and password
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
 delay(500);
 Serial.print(".");
}
// Print local IP address and start web server
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();

loop()

bên trongloop()chúng tôi lập trình những gì sẽ xảy ra khi một khách hàng mới thiết lập kết nối với máy chủ web.

ESP luôn lắng nghe các khách hàng đến với dòng này:

WiFiClient client = server.available(); // Listen for incoming clients

Khi nhận được yêu cầu từ khách hàng, chúng tôi sẽ lưu dữ liệu đến. Vòng lặp while sau đó sẽ chạy miễn là máy khách vẫn kết nối. Chúng tôi khuyên bạn không nên thay đổi phần sau của mã trừ khi bạn biết chính xác mình đang làm gì.

if (client) { // If a new client connects,
 Serial.println("New Client."); // print a message out in the serial port
 String currentLine = ""; // make a String to hold incoming data from the client
 while (client.connected()) { // loop while the client's connected
 if (client.available()) { // if there's bytes to read from the client,
  char c = client.read(); // read a byte, then
  Serial.write(c); // print it out the serial monitor
  header += c;
  if (c == '\n') { // if the byte is a newline character
   // if the current line is blank, you got two newline characters in a row.
   // that's the end of the client HTTP request, so send a response:
   if (currentLine.length() == 0) {
    // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
    // and a content-type so the client knows what's coming, then a blank line:
    client.println("HTTP/1.1 200 OK");
    client.println("Content-type:text/html");
    client.println("Connection: close");
    client.println();

Phần tiếp theo của câu lệnh if và else sẽ kiểm tra nút nào được nhấn trong trang web của bạn và kiểm soát kết quả đầu ra tương ứng. Như chúng ta đã thấy trước đây, chúng tôi thực hiện yêu cầu trên các URL khác nhau tùy thuộc vào nút chúng tôi nhấn.

// turns the GPIOs on and off
if (header.indexOf("GET /5/on") >= 0) {
  Serial.println("GPIO 5 on");
  output5State = "on";
  digitalWrite(output5, HIGH);
} else if (header.indexOf("GET /5/off") >= 0) {
  Serial.println("GPIO 5 off");
  output5State = "off";
  digitalWrite(output5, LOW);
} else if (header.indexOf("GET /4/on") >= 0) {
  Serial.println("GPIO 4 on");
  output4State = "on";
  digitalWrite(output4, HIGH);
} else if (header.indexOf("GET /4/off") >= 0) {
  Serial.println("GPIO 4 off");
  output4State = "off";
  digitalWrite(output4, LOW);
}

Ví dụ: nếu bạn đã nhấnGPIO 5Nút BẬT, URL thay đổi thành địa chỉ IP ESP, theo sau là / 5 / BẬT và chúng tôi nhận được thông tin đó trên tiêu đề HTTP. Vì vậy, chúng ta có thể kiểm tra xem tiêu đề có chứa biểu thức GET / 5 / on hay không.

Nếu nó chứa, mã sẽ in một thông báo trên màn hình nối tiếp, thay đổioutput5Statebiến thành bật và bật đèn LED.

Điều này hoạt động tương tự cho các nút khác. Vì vậy, nếu bạn muốn thêm nhiều đầu ra hơn, bạn nên sửa đổi phần này của mã để bao gồm chúng.

Hiển thị Trang Web HTML

Điều tiếp theo bạn cần làm là tạo trang web. ESP8266 sẽ gửi phản hồi đến trình duyệt của bạn với một số văn bản HTML để hiển thị trang web.

Trang web được gửi đến khách hàng bằng cách sử dụngclient.println ()Bạn nên nhập những gì bạn muốn gửi cho client làm đối số.

Văn bản đầu tiên bạn luôn nên gửi là dòng sau, điều đó cho biết rằng chúng tôi đang gửi HTML.

<!DOCTYPE html><html>

Sau đó, dòng sau làm cho trang web phản hồi trong bất kỳ trình duyệt web nào.

client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");

Dòng tiếp theo được sử dụng để ngăn các yêu cầu liên quan đến biểu tượng yêu thích - Bạn không cần phải lo lắng về dòng này.

client.println("<link rel=\"icon\" href=\"data:,\">");

Tạo kiểu cho Trang Web

Tiếp theo, chúng ta có một số CSS để tạo kiểu cho các nút và giao diện trang web. Chúng tôi chọn phông chữ Helvetica, xác định nội dung hiển thị thành một khối và căn chỉnh ở trung tâm.

client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");

Chúng tôi tạo kiểu cho các nút của mình với một số thuộc tính để xác định màu sắc, kích thước, đường viền, v.v.

client.println(".button { background-color: #195B6A; border: none; color: white; padding: 16px 40px;");
client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");

Sau đó, chúng tôi xác định kiểu cho nút thứ hai, với tất cả các thuộc tính của nút mà chúng tôi đã xác định trước đó, nhưng với một màu khác. Đây sẽ là kiểu cho nút tắt.

client.println(".button2 {background-color: #77878A;}</style></head>");

Đặt tiêu đề đầu tiên của trang web

Trong dòng tiếp theo, bạn đặt tiêu đề đầu tiên của trang web của mình, bạn có thể thay đổi văn bản này thành bất cứ điều gì bạn muốn.

// Web Page Title
client.println("<h1>ESP8266 Web Server</h1>");

Hiển thị các nút và trạng thái tương ứng

Sau đó, bạn viết một đoạn văn để hiển thịGPIO 5tình trạng hiện tại. Như bạn có thể thấy, chúng tôi sử dụngoutput5Statebiến, để trạng thái cập nhật ngay lập tức khi biến này thay đổi.

client.println("<p>GPIO 5 - State " + output5State + "</p>");

Sau đó, chúng tôi hiển thị nút bật hoặc tắt, tùy thuộc vào trạng thái hiện tại của GPIO.

if (output5State=="off") {
 client.println("<p><a href=\"/5/on\"><button class=\"button\">ON</button></a></p>");
} else {
 client.println("<p><a href=\"/5/off\"><button class=\"button button2\">OFF</button></a></p>");
}

Chúng tôi sử dụng cùng một quy trình choGPIO 4.

Đóng kết nối

Cuối cùng, khi phản hồi kết thúc, chúng tôi xóa biến tiêu đề và dừng kết nối với máy khách bằngclient.stop ().

// Clear the header variable
header = "";
// Close the connection
client.stop();

Taking it Further

Bây giờ bạn đã biết cách mã hoạt động, bạn có thể sửa đổi mã để thêm nhiều kết quả đầu ra hơn hoặc sửa đổi trang web của mình. Để sửa đổi trang web của bạn, bạn có thể cần biết một số HTML và CSS.

Thay vì điều khiển hai đèn LED, bạn có thể điều khiển một rơ le để điều khiển thực tế bất kỳ thiết bị điện tử nào.

Để xây dựng một máy chủ web để hiển thị các chỉ số cảm biến, bạn có thể đọc các hướng dẫn sau:

Ngoài ra, nếu bạn muốn lập trình ESP8266 của mình bằng MicroPython, bạn có thể đọc hướng dẫn này: Máy chủ Web ESP32 / ESP8266 MicroPython - Kiểm soát đầu ra

Nếu bạn thích ESP8266, hãy chắc chắn rằng bạn đã xem qua khóa học của chúng tôi về Tự động hóa gia đình với ESP8266 .

PHẦN 2: TẠO MÁY CHỦ WEB SỬ DỤNG PHẦN MỀM NODEMCU

Phần này hướng dẫn bạn cách tạo một máy chủ web để điều khiển hai đầu ra bằng cách sử dụng phần sụn NodeMCU và ngôn ngữ lập trình LUA. Bạn có thể sử dụng phương pháp này để tạo một máy chủ web khác nhằm đáp ứng nhu cầu của mình.

ESP8266 Tạo máy chủ web bằng phần mềm NodeMCU

Đầu tiên, hãy xem video minh họa bên dưới

Tại sao nhấp nháy mô-đun ESP8266 của bạn với NodeMCU?

NodeMCU  là một phần sụn cho phép bạn lập trình các mô-đun ESP8266 với tập lệnh LUA. Lập trình ESP8266 với LUA sử dụng phần sụn NodeMCU rất giống với cách bạn lập trình Arduino của mình. Chỉ với một vài dòng mã, bạn có thể thiết lập kết nối WiFi, điều khiển các GPIO của ESP8266, biến ESP8266 của bạn thành một máy chủ web và hơn thế nữa.

Tải xuống NodeMCU Flasher cho Windows

Sau khi đấu dây mạch của bạn, bạn phải tải xuống bộ nhấp nháy NodeMCU. Đó là một  tệp .exe mà bạn có thể tải xuống bằng một trong các liên kết sau:

Bạn có thể nhấp vào đây để tìm tất cả thông tin về NodeMCU flashher.

Đang nhấp nháy ESP8266 của bạn

Nếu bạn đang sử dụng ESP8266-12, bạn chỉ cần cắm ESP vào máy tính của mình. Nếu bạn đang sử dụng ESP-01, bạn cần một lập trình viên FTDI để kết nối nó với máy tính của bạn. Để thiết lập giao tiếp nối tiếp giữa ESP8266 của bạn và một Lập trình viên FTDI như thể hiện trong sơ đồ bên dưới.

Mạch phần mềm nhấp nháy lập trình ESP8266 ESP-01 FTDI

Mở flashher mà bạn vừa tải xuống và một cửa sổ sẽ xuất hiện (như thể hiện trong hình sau).

Phần mềm ESP8266 NodeMCU Flasher

Nhấn nút “ Flash ” và nó sẽ bắt đầu quá trình nhấp nháy ngay lập tức (Bạn có thể phải thay đổi một số cài đặt trên tab Nâng cao). Sau khi kết thúc quá trình này, nó sẽ xuất hiện một vòng tròn màu xanh lục với biểu tượng dấu kiểm.

Sơ đồ

Để xây dựng mạch, bạn cần các bộ phận sau:

Các bộ phận cần thiết:

Nếu bạn đang sử dụng ESP-01 , bạn cũng cần một lập trình viên FTDI .

Nếu bạn đang sử dụng ESP-01…

Nếu bạn đang sử dụng ESP8266-01, hãy sử dụng sơ đồ sau làm tài liệu tham khảo.

Máy chủ web điều khiển sơ đồ đèn LED ESP-01

Upload Code

Tôi khuyên bạn nên sử dụng chương trình ESPlorer được tạo bởi 4refr0nt để tạo và lưu các tệp LUA vào ESP8266 của bạn. Làm theo các hướng dẫn sau để tải xuống và cài đặt ESPlorer:

  1. Nhấp vào đây để tải xuống ESPlorer
  2. Giải nén thư mục đó
  3. Đi tới thư mục dist  (đây là đường dẫn: ESPlorer-master \ ESPlorer \ dist)
  4. Chạy  ESPlorer.jar . Đây là một chương trình JAVA, vì vậy bạn cần cài đặt JAVA trên máy tính của mình.
  5. Mở ESPlorer
ESPlorer ESP8266 NodeMCU Bắt đầu

Bạn sẽ thấy một cửa sổ tương tự như Hình trước, hãy làm theo các hướng dẫn sau để tải lên tệp LUA:

  1. Kết nối lập trình viên FTDI với máy tính của bạn
  2. Chọn cổng lập trình FTDI của bạn
  3. Nhấn  Mở / Đóng
  4. Chọn tab NodeMCU + MicroPtyhon
  5. Tạo một tệp mới có tên init.lua
  6. Nhấn Lưu vào ESP

Mọi thứ bạn cần lo lắng hoặc thay đổi được đánh dấu trong ô màu đỏ.

ESPlorer Tải mã lên ESP8266 NodeMCU Board

Mã số

Tải lên mã sau vào ESP8266 của bạn bằng phần mềm trước đó. Tệp của bạn phải được đặt tên là “ init.lua ”. Bạn có thể nhấp vào đây để tải xuống tệp.

wifi.setmode(wifi.STATION)
wifi.sta.config("YOUR_NETWORK_NAME","YOUR_NETWORK_PASSWORD")
print(wifi.sta.getip())
led1 = 3
led2 = 4
gpio.mode(led1, gpio.OUTPUT)
gpio.mode(led2, gpio.OUTPUT)
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
    conn:on("receive", function(client,request)
        local buf = "";
        local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
        if(method == nil)then
            _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
        end
        local _GET = {}
        if (vars ~= nil)then
            for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
                _GET[k] = v
            end
        end
        buf = buf.."<h1> ESP8266 Web Server</h1>";
        buf = buf.."<p>GPIO0 <a href=\"?pin=ON1\"><button>ON</button></a>&nbsp;<a href=\"?pin=OFF1\"><button>OFF</button></a></p>";
        buf = buf.."<p>GPIO2 <a href=\"?pin=ON2\"><button>ON</button></a>&nbsp;<a href=\"?pin=OFF2\"><button>OFF</button></a></p>";
        local _on,_off = "",""
        if(_GET.pin == "ON1")then
              gpio.write(led1, gpio.HIGH);
        elseif(_GET.pin == "OFF1")then
              gpio.write(led1, gpio.LOW);
        elseif(_GET.pin == "ON2")then
              gpio.write(led2, gpio.HIGH);
        elseif(_GET.pin == "OFF2")then
              gpio.write(led2, gpio.LOW);
        end
        client:send(buf);
        client:close();
        collectgarbage();
    end)
end)

Xem mã thô

Đừng quên thay thế chi tiết Trạm phát WiFi của bạn trong mã đó ở trên (Tên mạng và mật khẩu).

Truy cập máy chủ web của bạn

Khi ESP8266 của bạn khởi động lại, nó sẽ in địa chỉ IP của ESP8266 trong màn hình nối tiếp của bạn. Nếu bạn nhập địa chỉ IP ESP8266 của mình vào trình duyệt web, bạn có thể truy cập vào máy chủ web của mình.

Đèn LED đầu ra điều khiển máy chủ web ESP8266 NodeMCU

No comments:

Post a Comment