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

hocarm/ESP8266-Arduino
Contribute to hocarm/ESP8266-Arduino development by creating an account on GitHub.

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