Lấy nội dung từ website với ESP8266
Sau bài hướng dẫn kết nối wifi sử dụng ESP8266 và Arduino mình xin giới thiệu với các bạn cách lấy dữ liệu từ website với ESP8266. Trước khi đọc dữ liệu từ website mình sẽ nói qua về cách lập trình điều khiển LED và đọc trạng thái của LED. Mình sẽ giải thích ở trong code luôn cho các bạn tiện quan sát.
Điều khiển IO (LED)
Ở đây mình sẽ thực hiện kết nối LED với chân GPIO5 của ESP8266, chương trình rất đơn giản chỉ vài dòng lệnh. Bạn có thể nối thẳng từ GPIO5 ra LED không cần qua trở.
// Them thu vien
#include <ESP8266WiFi.h>
void setup(void)
{
// Khoi tao GPIO 5 la output
pinMode(5, OUTPUT);
// Dua GPIO 5 len muc cao (HIGH) tuc la bat LED sang
digitalWrite(5, HIGH);
}
void loop() {
}
Nếu muốn đưa chân GPIO5 về mức thấp (tắt LED) thì dùng lệnh digitalWrite(5, LOW)
Đọc trạng thái IO
Tạm thời chúng ta sẽ bỏ LED ra và nạp chương trình bên dưới vào, nối chân GPIO5 với sợi dây để kiểm tra code đúng hay sai, lần lượt cắm dây này vào GND và 3V3 sẽ hiển thị thông báo trạng thái tương ứng là 0 và 1, đây mình dùng thế để kiểm tra cho nhanh thôi chứ thực ra phải kết nối với nút nhấn các kiểu thì mới chuẩn 😀
// Them thu vien
#include <ESP8266WiFi.h>
void setup(void)
{
// Khoi dong cong serial
Serial.begin(115200);
// Khoi tao GPIO 5 la input
pinMode(5, INPUT);
}
void loop() {
// Doc trang thai cua GPIO 5 va in ra ket qua
Serial.print("Trang thai cua GPIO 5: ");
Serial.println(digitalRead(5));
// Doi 1 s
delay(1000);
}
Kết quả sau khi nạp
Lấy nội dung của website
Đây là phần khó khăn hơn chút, nhiệm vụ là sử dụng ESP8266 kết nối Wifi để lấy toàn bộ nội dung của một trang web, sau đó hiển thị lên terminal, ở đây mình sử dụng trang web www.example.com, với nội dung đơn giản và rất dễ để ta có thể kiểm tra.
// Them thu vien ESP8266
#include <ESP8266WiFi.h>
// Thong so Wifi
const char* ssid = "ten_wifi"; //Ten wifi nha ban
const char* password = "pass_wifi"; //Mat khau wifi nha ban
// Host
const char* host = "www.example.com"; //Trang web de lay du lieu
void setup() {
// Khoi dong Serial
Serial.begin(115200);
delay(10);
// Ket noi voi mang wifi
Serial.println();
Serial.println();
Serial.print("Ket noi toi mang wifi ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi da ket noi");
Serial.println("Dia chi IP: ");
Serial.println(WiFi.localIP()); //In ra dia chi IP
}
int value = 0;
void loop() {
Serial.print("Ket noi toi web ");
Serial.println(host);
// Su dung lop WiFiClient de tao ket noi TCP
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) { //Kiem tra neu khong ket noi dc thi in thong bao
Serial.println("Khong ket noi duoc");
return;
}
// Gui yeu cau toi server
client.print(String("GET /") + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
delay(500);
// Doc het cac phan hoi tu server va in ra Serial
while (client.available()) {
String line = client.readStringUntil('\R');
Serial.print(line);
}
Serial.println();
}
Kết quả in như hình là bạn đã lấy được nội dung của anh www.example.com rồi, hầu hết những gì ta thấy là mã HTML của trang web thôi, nếu không lên log như hình thì bạn nên chờ một chút, nếu không có nữa thì nhớ reset modul nhé.
Các bạn có thể xem log chương trình mình đã làm tại đây.
Toàn bộ code trên cho các bạn tham khảo tại ESP8266-Arduino
Kết
Thế là mình đã giới thiệu qua 3 ví dụ đơn giản để bạn có thể đọc được trạn