Hotline/Zalo: 0919.890.938 (Mr Hơn)
Bài 11. Chức năng thu phát wifi trên ESP8266
ESP8266 là một module wifi giá rẻ và phổ biến, có thể tích hợp vào các dự án IoT (Internet of Things) hay điều khiển không dây. ESP8266 có thể hoạt động ở các chế độ wifi khác nhau, cho phép nó kết nối với các mạng wifi khác hoặc tạo ra một mạng wifi riêng. Trong bài viết hôm nay Điện thông minh E-smart sẽ cùng các bạn tìm hiểu về cách sử dụng wifi trên esp8266.
Wifi trên esp8266
Có 3 chế độ wifi trên ESP8266, đó là:
- Station: ESP8266 sẽ đóng vai trò như một thiết bị mạng, có thể kết nối với một mạng wifi có sẵn và giao tiếp với các thiết bị khác trong mạng.
- Access Point (AP): ESP8266 sẽ đóng vai trò như một điểm truy cập wifi, có thể phát ra một mạng wifi riêng và cho phép các thiết bị khác kết nối vào. Lưu ý mạng wifi do ESP8266 tạo ra sẽ không có kết nối internet.
- Station + AP: ESP8266 sẽ vừa làm station vừa làm AP, có thể kết nối với một mạng wifi có sẵn và cũng phát ra một mạng wifi riêng. Chế độ này cho phép ESP8266 cầu nối giữa hai mạng wifi.
Chúng ta sẽ cùng xem xét cách sử dụng và code mẫu cho từng chế độ trong các phần sau.
Chế độ Station
Để sử dụng chế độ station, chúng ta cần biết SSID (tên) và password (mật khẩu) của mạng wifi mà chúng ta muốn kết nối. Sau đó, chúng ta sử dụng các hàm sau để cấu hình và kết nối wifi:
- WiFi.mode(WIFI_STA): Thiết lập chế độ station cho ESP8266.
- WiFi.begin(ssid, password): Kết nối với mạng wifi có tên và mật khẩu cho trước.
- WiFi.status(): Kiểm tra trạng thái kết nối wifi.
Sau khi kết nối thành công, chúng ta có thể lấy được địa chỉ IP của ESP8266 trong mạng wifi bằng hàm WiFi.localIP(). Chúng ta cũng có thể ngắt kết nối wifi bằng hàm WiFi.disconnect().
Dưới đây là code mẫu cho chế độ station:
#include <ESP8266WiFi.h>
// Thay đổi tên và mật khẩu của mạng wifi
const char* ssid = "your_ssid";
const char* password = "your_password";
void setup() {
Serial.begin(115200); // Khởi tạo cổng nối tiếp
WiFi.mode(WIFI_STA); // Thiết lập chế độ station
WiFi.begin(ssid, password); // Kết nối với mạng wifi
Serial.print("\nConnecting");
while (WiFi.status() != WL_CONNECTED) { // Chờ cho đến khi kết nối thành công
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP()); // In ra địa chỉ IP của ESP8266
}
void loop() {
// Đoạn code trong hàm loop() sẽ được lặp đi lặp lại
// Bạn có thể viết code để giao tiếp với các thiết bị khác trong mạng wifi
}
Chế độ Access Point
Để sử dụng chế độ access point, chúng ta cần thiết lập một số thông số cho mạng wifi mà ESP8266 sẽ phát ra, bao gồm SSID, password, địa chỉ IP, subnet mask và gateway. Sau đó, chúng ta sử dụng các hàm sau để cấu hình và phát wifi:
- WiFi.mode(WIFI_AP): Thiết lập chế độ access point cho ESP8266.
- WiFi.softAP(ssid, password): Phát một mạng wifi có tên và mật khẩu cho trước.
- WiFi.softAPConfig(ip, gateway, subnet): Thiết lập địa chỉ IP, gateway và subnet mask cho mạng wifi.
Sau khi phát wifi thành công, chúng ta có thể lấy được số lượng thiết bị kết nối vào mạng wifi bằng hàm WiFi.softAPgetStationNum(). Chúng ta cũng có thể ngừng phát wifi bằng hàm WiFi.softAPdisconnect().
Dưới đây là code mẫu cho chế độ access point:
#include <ESP8266WiFi.h>
// Thay đổi tên và mật khẩu của mạng wifi
const char* ssid = "ESP8266_AP";
const char* password = "12345678";
// Thiết lập địa chỉ IP, gateway và subnet mask
IPAddress ip(192, 168, 4, 1);
IPAddress gateway(192, 168, 4, 1);
IPAddress subnet(255, 255, 255, 0);
void setup() {
Serial.begin(115200); // Khởi tạo cổng nối tiếp
WiFi.mode(WIFI_AP); // Thiết lập chế độ access point
WiFi.softAPConfig(ip, gateway, subnet); // Thiết lập địa chỉ IP, gateway và subnet mask
WiFi.softAP(ssid, password); // Phát một mạng wifi có tên và mật khẩu cho trước
Serial.print("\nAccess point started, IP address: ");
Serial.println(WiFi.softAPIP()); // In ra địa chỉ IP của ESP8266
}
void loop() {
// Đoạn code trong hàm loop() sẽ được lặp đi lặp lại
// Bạn có thể viết code để giao tiếp với các thiết bị kết nối vào mạng wifi
}
Chế độ Station + AP
Để sử dụng chế độ station + AP, chúng ta cần kết hợp các bước của hai chế độ trên. Lưu ý: khi dùng chế độ này cần đảm bảo kết nối chế độ station trước thành công mới cho phát wifi chế độ AP. Chúng ta sử dụng các hàm sau để cấu hình và kết nối wifi:
- WiFi.mode(WIFI_AP_STA): Thiết lập chế độ station + AP cho ESP8266.
- WiFi.begin(ssid1, password1): Kết nối với mạng wifi có tên và mật khẩu cho trước (station).
- WiFi.softAP(ssid2, password2): Phát một mạng wifi có tên và mật khẩu cho trước (AP).
- WiFi.softAPConfig(ip, gateway, subnet): Thiết lập địa chỉ IP, gateway và subnet mask cho mạng wifi (AP).
Sau khi kết nối và phát wifi thành công, chúng ta có thể lấy được địa chỉ IP của ESP8266 trong hai mạng wifi bằng các hàm WiFi.localIP() (station) và WiFi.softAPIP() (AP). Chúng ta cũng có thể ngắt kết nối hoặc ngừng phát wifi bằng các hàm WiFi.disconnect() (station) và WiFi.softAPdisconnect() (AP).
Dưới đây là code mẫu cho chế độ station + AP:
#include <ESP8266WiFi.h>
// Thay đổi tên và mật khẩu của hai mạng wifi
const char* ssid1 = "your_ssid"; // Mạng wifi muốn kết nối (station)
const char* password1 = "your_password";
const char* ssid2 = "ESP8266_AP"; // Mạng wifi muốn phát ra (AP)
const char* password2 = "12345678";
// Thiết lập địa chỉ IP, gateway và subnet mask cho mạng wifi (AP)
IPAddress ip(192, 168, 4, 1);
IPAddress gateway(192, 168, 4, 1);
IPAddress subnet(255, 255, 255, 0);
void setup() {
Serial.begin(115200); // Khởi tạo cổng nối tiếp
WiFi.mode(WIFI_AP_STA); // Thiết lập chế độ station + AP
WiFi.begin(ssid1, password1); // Kết nối với mạng wifi có tên và mật khẩu cho trước (station)
Serial.print("\nConnecting");
while (WiFi.status() != WL_CONNECTED) { // Chờ cho đến khi kết nối thành công
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Station connected, IP address: ");
Serial.println(WiFi.localIP()); // In ra địa chỉ IP của ESP8266
WiFi.softAPConfig(ip, gateway, subnet); // Thiết lập địa chỉ IP, gateway và subnet mask cho mạng wifi (AP)
WiFi.softAP(ssid2, password2); // Phát một mạng wifi có tên và mật khẩu cho trước (AP)
Serial.print("Access point started, IP address: ");
Serial.println(WiFi.softAPIP()); // In ra địa chỉ IP của ESP8266 trong mạng wifi phát ra (AP)
}
void loop() {
// Đoạn code trong hàm loop() sẽ được lặp đi lặp lại
// Bạn có thể viết code để giao tiếp với các thiết bị trong hai mạng wifi
}
Kết luận
Trong bài viết này, mình đã chia sẻ cách để chúng ta thiết lập các chế độ hoạt động wifi trên esp8266 nodemcu. Tùy vào ứng dụng mà chúng ta sẽ thiết lập các chế độ wifi trên esp8266 cho phù hợp. Thông thường chúng ta chỉ sử dụng 1 trong 2 chế độ hoạt động wifi trên esp8266 vì bản chất chíp esp8266 chỉ có một anten sử dụng cho cả thu và phát wifi trên 1 kênh nhất định. Do vậy để đảm bảo tính ổn định khi dùng chúng ta nên thiết lập 1 chế độ station hoặc access point.