[Phần 2] Lập trình trực tiếp trên ESP8266 Bật/Tắt LED

1. Mở đầu

Bài trước mình có giới thiệu cách đọc dữ liệu từ server để điều khiển. Đó là dùng AT command của ESP. Ưu điểm của nó là dễ lập trình, nhưng thời gian phản hồi rất chậm, thường xuyên bị lỗi.

Theo yêu cầu của 1 số bạn muốn tạo giao diện web điều khiển bật tắt led, hôm nay mình làm tiếp Phần 2 - hướng dẫn lập trình trực tiếp trên ESP8266 để tăng tính ổn định, kết hợp tạo giao diện web mức độ cơ bản.

2. Chuẩn bị

Đây là sơ đồ nối dây để lập trình. Mình dùng ESP8266 version 12, các version khác thiết lập tương tự với GPIO 0 và GPIO 2. GPIO 15 (nếu không tìm thấy) ở các module khác tự nối với GND

Lưu ý: Bình thường khi lập trình test để tránh phức tạp, các bạn nối GPIO 0 xuống GND luôn, mở sẵn terminal (không mở sẵn sẽ không nhìn thấy Serial trả về lúc khởi động, nếu reset sẽ làm mất code) nạp code xong qua terminal thấy code chạy. Nếu các bạn reset/làm mất nguồn, ESP8266 sẽ không tự chạy, bạn phải cắm GPIO 0 lên VCC và bật/reset để chạy bình thường.

Công tắc các bạn thêm vào, nhớ chuyển GPIO 0 về GND và nhấn reset trước mỗi lần nạp code, nếu ko sẽ thấy lỗi mem check failed.

Các bạn thiết lập Arduino IDE theo hướng dẫn của bạn Đỗ Hữu Toàn nhé, có cả ví dụ về Blink led huyền thoại 

3. Lập trình

Các bạn đã thử lập trình được led chớp tắt trong bài trên chưa. Tiếp theo vô phần chính nhé. Các bạn chép code dưới đây vào.

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

MDNSResponder mdns;

ESP8266WebServer server(80);
String webPage;
const char* ssid     = "wifi";      //Thay tên wifi ở đây
const char* password = "password";  //Thay tên password ở đây
 
void setup() {

  pinMode(12, OUTPUT);  //led chân 12
  pinMode(13, OUTPUT);  //led chân 13

  webPage += "<h1>ESP8266 Web Server</h1><p>Socket #1 <a href=\"socket1On\"><button>ON</button></a>&nbsp;<a href=\"socket1Off\"><button>OFF</button></a></p>";
  webPage += "<p>Socket #2 <a href=\"socket2On\"><button>ON</button></a>&nbsp;<a href=\"socket2Off\"><button>OFF</button></a></p>";
  
  Serial.begin(115200);
  delay(100);
 
 
  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 connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  
  if (mdns.begin("esp8266", WiFi.localIP())) 
    Serial.println("MDNS responder started");

  server.on("/", [](){
    server.send(200, "text/html", webPage);
  });
  server.on("/socket1On", [](){
    server.send(200, "text/html", webPage);
    //Bật led 12
    digitalWrite(12, HIGH);
    delay(1000);
  });
  server.on("/socket1Off", [](){
    server.send(200, "text/html", webPage);
    //Tắt led 12
    digitalWrite(12, LOW);
    delay(1000); 
  });
  server.on("/socket2On", [](){
    server.send(200, "text/html", webPage);
    //Bật led 13
    digitalWrite(13, HIGH);
    delay(1000);
  });
  server.on("/socket2Off", [](){
    server.send(200, "text/html", webPage);
    //Tắt led 13
    digitalWrite(13, LOW);
    delay(1000); 
  });
  server.begin();
  Serial.println("HTTP server started");
}
 
void loop() {
  server.handleClient();
}

Đoạn code trên sẽ đăng nhập vào wifi + password được chỉnh sửa sẵn. Nếu sai sẽ xuất hiện dấu chấm..................... liên tục.

ESP8266 có 2 loại server:

  1. ESP ở chế độ Access Point: ESP8266 tự trở thành 1 điểm phát wifi, có ip riêng khi truy cập vào (thường là 192.168.4.1) và cũng tạo được web page.
  2. ESP truy cập vào wifi chung: Khi đó ESP8266 sẽ có địa chỉ riêng của mình, mở trình duyệt bất kỳ (Chrome, Firefox...) gõ vào ô địa chỉ ip sẽ vô webpage.

Cả 2 phương thức chỉ khác nhau về cách truy cập, còn code tạo web page giống nhau.

server.on("/", [](){
    server.send(200, "text/html", webPage);
  });

Server theo dõi đường link "/" nghĩa là trang chủ. Ví dụ ip của mình là 192.168.0.105/

server.on("/socket1On", [](){
    server.send(200, "text/html", webPage);
    //Bật led 12
    digitalWrite(12, HIGH);
    delay(1000);
  });

Server theo dõi đường link "/socket1On". Khi nhấn nút trang web sẽ vào link này. Bạn cũng có thể bật led 1 sáng nếu gõ lệnh tương đương lên ô địa chỉ 192.168.0.105/socket1On

Bạn có thể sửa tên gì cũng được cho phù hợp nhưng phải có chút kiến thức về html.

Đây là kết quả trên Terminal của mình

Mình gõ 192.168.0.105 vào Chrome

Cám ơn các bạn đã theo dõi.

Kỳ tới mình sẽ viết tiếp cách nhập wifi và password cho ESP8266 bằng web page trong chế độ Access Point, sau đó truy cập wifi và đọc dữ liệu trên Internet (thích hợp cho sản phẩm dùng wifi bán ra thị trường, người dùng có thể tự nhập wifi password thông qua web)

lên
18 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: 
Chuyên mục: 
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Hướng dẫn chi tiết cách tạo server và điều khiển Arduino cho dự án IoT

Internet of Things - Iot đang dần phổ biến, nhưng số lượng bài viết hoàn thiện khá ít. Mình từng gặp vấn đề này, bỏ nhiều thời gian nghiên cứu và đã thành công. Câu hỏi đầu tiên của các bạn khi muốn làm IoT là bắt đầu từ đâu? Khó phải không. Bài viết này mình sẽ đi từ bước đầu tiên (tạo server) tới bước cuối cùng (điều khiển arduino) nhé. Ưu điểm của tạo webserver là bạn có thể điều khiển arduino từ bất cứ đâu có internet, 3G (so với cách tạo local server của ESP8266)

lên
26 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: