Hướng dẫn bắt đầu với Wemos D1 R2 (ESP8266) trên Arduino IDE
Hướng dẫn dùng Wemos D1 R2 (ESP8266 khung Arduino UNO) với Arduino IDE 2.x: sơ đồ chân, cài driver CH340 và gói board ESP8266, nạp code nháy LED, kết nối WiFi và xử lý lỗi thường gặp.
Wemos D1 R2 là board WiFi dùng chip ESP8266, có khung và vị trí header giống Arduino UNO, nạp chương trình bằng Arduino IDE qua cổng Micro USB. Bài viết giới thiệu sơ đồ chân, cách cài driver CH340 và gói board ESP8266 trên Arduino IDE 2.x, rồi nạp hai chương trình đầu tiên: nháy LED trên board và kết nối WiFi, in địa chỉ IP ra Serial Monitor.
1. Tìm hiểu board Wemos D1 R2
| Thông số | Giá trị |
|---|---|
| Vi điều khiển | ESP8266EX (module ESP-12), xung nhịp 80/160 MHz |
| Bộ nhớ Flash | 4 MB |
| WiFi | 802.11 b/g/n, băng tần 2,4 GHz |
| Chip USB–UART | CH340G, cổng Micro USB |
| Nguồn cấp | Cổng Micro USB 5 V hoặc jack DC (xem mục 4) |
| Mức logic | 3,3 V |
| Chân digital I/O | 11 chân: D0–D8, RX, TX |
| Chân analog | 1 chân A0, điện áp vào tối đa 3,2 V |
| Kích thước | 68,6 × 53,4 mm |
Board cắm vừa nhiều shield Arduino UNO, nhưng không phải shield nào cũng chạy được vì mức logic là 3,3 V và chỉ có một chân analog.
2. Sơ đồ chân Wemos D1 R2
Chữ in trên mạch (D0–D8) không trùng với số GPIO của ESP8266. Trong code có thể viết thẳng tên D0–D8; nếu viết bằng số thì phải dùng số GPIO.
| Chữ in trên mạch | GPIO | Chức năng và lưu ý |
|---|---|---|
| RX, TX | GPIO3, GPIO1 | UART nối với chip CH340, dùng khi nạp code và xem Serial Monitor |
| D0 | GPIO16 | I/O, không dùng được ngắt ngoài |
| D1 | GPIO5 | I/O, SCL của I2C |
| D2 | GPIO4 | I/O, SDA của I2C |
| D3 | GPIO0 | I/O, chân boot |
| D4 | GPIO2 | I/O, chân boot, LED trên board (sáng ở mức LOW) |
| D5 | GPIO14 | I/O, SCK của SPI |
| D6 | GPIO12 | I/O, MISO của SPI |
| D7 | GPIO13 | I/O, MOSI của SPI |
| D8 | GPIO15 | I/O, SS của SPI, chân boot |
| A0 | ADC | Ngõ vào analog, tối đa 3,2 V |
Header digital có 18 vị trí như Arduino UNO nhưng board chỉ có 11 chân I/O, nên D1, D2, D5, D6, D7 được nối ra hai vị trí; ví dụ SCK/D5 chính là D5. Hai chân SCL, SDA ở hàng header còn lại cũng là D1, D2.
Ba chân boot: khi cấp nguồn hoặc reset, ESP8266 đọc mức của D3 (GPIO0), D4 (GPIO2) và D8 (GPIO15) để chọn chế độ khởi động. Muốn chạy chương trình, D3 và D4 phải ở mức cao, D8 ở mức thấp. Không để mạch ngoài kéo D3, D4 xuống GND hoặc kéo D8 lên 3,3 V lúc này. Với các mạch đầu tiên, nên dùng D1, D2, D5, D6, D7.
Chân A0: chip ESP8266 chỉ đo được 0–1 V ở ngõ vào ADC. Theo thông số sản phẩm, A0 của Wemos D1 R2 nhận tối đa 3,2 V. Đọc bằng analogRead(A0), kết quả từ 0 đến 1023. Không đưa 5 V vào A0.
3. Linh kiện cần chuẩn bị
- Board Wemos D1 R2 (ESP8266).
- Cáp Micro USB có truyền dữ liệu. Cáp chỉ dùng để sạc sẽ không hiện cổng COM.
- Máy tính đã cài Arduino IDE 2.x (tải tại trang arduino.cc).
- Mạng WiFi 2,4 GHz, biết tên mạng và mật khẩu. ESP8266 không kết nối được mạng 5 GHz.
Hai chương trình trong bài chỉ dùng LED có sẵn trên board, không cần nối thêm linh kiện. Phụ kiện đi kèm, ví dụ thanh header đực 2,54 mm, có thể khác nhau theo lô hàng; hãy hỏi shop trước khi đặt.
4. Cấp nguồn cho board
- Cổng Micro USB (5 V): cắm vào máy tính hoặc củ sạc 5 V. Dùng khi nạp chương trình và thử nghiệm.
- Jack DC: dùng adapter khi board chạy độc lập. Mô tả sản phẩm của shop ghi 9–12 V DC; mạch hạ áp trên board tạo ra 5 V. Kiểm tra điện áp và cực tính của adapter trước khi cắm, không dùng điện áp cao hơn.
Chân tín hiệu của ESP8266 làm việc ở mức 3,3 V, không chịu được 5 V. Nối với module dùng mức logic 5 V thì cần mạch chuyển mức logic.
5. Cài driver CH340 và gói board ESP8266
Driver CH340: cắm board vào máy tính rồi mở Device Manager của Windows. Nếu mục Ports (COM & LPT) có dòng USB-SERIAL CH340 (COMx) thì máy đã nhận board. Nếu không thấy, tải driver CH340 ở trang Driver của PYWORLD, cài đặt rồi cắm lại board.
Gói board ESP8266 cài trong Arduino IDE 2.x theo các bước:
- Mở File > Preferences, dán địa chỉ sau vào ô Additional boards manager URLs rồi bấm OK:
https://arduino.esp8266.com/stable/package_esp8266com_index.json - Mở Tools > Board > Boards Manager, tìm esp8266 và cài gói esp8266 by ESP8266 Community.
- Chọn Tools > Board > esp8266 > LOLIN(WEMOS) D1 R2 & mini.
- Vào Tools > Port, chọn cổng COM của board.
- Đặt Tools > Upload Speed là 115200, các mục còn lại để mặc định.
Không chọn LOLIN(WeMos) D1 R1: đó là đời board cũ, các tên chân D trỏ tới GPIO khác với chữ in trên Wemos D1 R2. Bài dùng gói esp8266 phiên bản 3.1.2.
6. Chương trình đầu tiên: nháy LED trên board
Dán chương trình dưới đây vào sketch mới rồi bấm nút Upload. Board tự vào chế độ nạp, không cần nhấn nút nào. Khi cửa sổ Output hiện dòng Hard resetting via RTS pin... là đã nạp xong.
/*
PYWORLD.VN - Wemos D1 R2 (ESP8266): nháy LED trên board
Board trong Arduino IDE: LOLIN(WEMOS) D1 R2 & mini
LED trên board nối với D4 (GPIO2), sáng ở mức LOW
*/
const int LED_PIN = LED_BUILTIN; // LED_BUILTIN = D4 = GPIO2
bool ledState = false; // false: LED tắt, true: LED sáng
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH); // Mức HIGH: tắt LED lúc khởi động
Serial.println();
Serial.println("Wemos D1 LED Blink Start");
}
void loop() {
ledState = !ledState; // Đảo trạng thái sau mỗi 500 ms
if (ledState) {
digitalWrite(LED_PIN, LOW); // Mức LOW: LED sáng
Serial.println("LED: ON");
} else {
digitalWrite(LED_PIN, HIGH); // Mức HIGH: LED tắt
Serial.println("LED: OFF");
}
delay(500);
}
Mở Tools > Serial Monitor, chọn tốc độ 115200 baud. LED trên module ESP-12 đổi trạng thái sau mỗi 0,5 giây và Serial Monitor hiện:
Wemos D1 LED Blink Start
LED: ON
LED: OFF
LED: ON
LED_BUILTINcủa board này bằng 2, tức GPIO2 hay chân D4; có thể viếtD4thay thế.- LED trên board tích cực mức thấp:
LOWlàm LED sáng,HIGHlàm LED tắt, ngược với LED chân 13 của Arduino UNO.
7. Chương trình thứ hai: kết nối WiFi và in địa chỉ IP
Thay TEN_WIFI và MAT_KHAU_WIFI bằng tên và mật khẩu mạng WiFi 2,4 GHz đang dùng rồi nạp chương trình:
/*
PYWORLD.VN - Wemos D1 R2 (ESP8266): kết nối WiFi và in địa chỉ IP
Board trong Arduino IDE: LOLIN(WEMOS) D1 R2 & mini
*/
#include <ESP8266WiFi.h>
// Thay bằng tên và mật khẩu mạng WiFi 2,4 GHz đang dùng
const char* WIFI_SSID = "TEN_WIFI";
const char* WIFI_PASSWORD = "MAT_KHAU_WIFI";
const int LED_PIN = LED_BUILTIN; // D4 (GPIO2), sáng ở mức LOW
const unsigned long WIFI_TIMEOUT_MS = 20000; // Chờ kết nối tối đa 20 giây
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH); // Tắt LED
Serial.println();
Serial.print("Dang ket noi WiFi: ");
Serial.println(WIFI_SSID);
WiFi.mode(WIFI_STA); // Chế độ station: kết nối vào router
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
// Chờ kết nối, LED nháy trong lúc chờ
unsigned long startMs = millis();
while (WiFi.status() != WL_CONNECTED && millis() - startMs < WIFI_TIMEOUT_MS) {
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
Serial.print(".");
delay(500);
}
Serial.println();
if (WiFi.status() == WL_CONNECTED) {
Serial.print("Da ket noi WiFi. Dia chi IP: ");
Serial.println(WiFi.localIP());
} else {
Serial.println("Khong ket noi duoc WiFi. Kiem tra ten mang va mat khau.");
}
}
void loop() {
// LED sáng khi còn kết nối WiFi, tắt khi mất kết nối
digitalWrite(LED_PIN, WiFi.status() == WL_CONNECTED ? LOW : HIGH);
delay(1000);
}
Serial Monitor hiện tương tự như sau; địa chỉ IP do router cấp nên mỗi mạng một khác:
Dang ket noi WiFi: TEN_WIFI
......
Da ket noi WiFi. Dia chi IP: 192.168.1.50
ESP8266WiFi.hcó sẵn trong gói board esp8266, không cần cài thêm thư viện.WiFi.mode(WIFI_STA)đặt board ở chế độ station, tức là kết nối vào router.WiFi.status()trả vềWL_CONNECTEDkhi đã kết nối xong.- Vòng
whilechỉ chờ tối đa 20 giây để chương trình không treo khi sai mật khẩu. LED nháy trong lúc chờ, sáng liên tục khi đã kết nối; nếu mất sóng, ESP8266 tự kết nối lại.
8. Xử lý lỗi thường gặp
- Không thấy cổng COM: đổi cáp Micro USB có truyền dữ liệu, đổi cổng USB, cài lại driver CH340.
- Nạp lỗi "Failed to connect to ESP8266: Timed out waiting for packet header": chọn đúng cổng COM, tháo các dây đang nối vào D3, D4, D8, RX, TX rồi nạp lại với Upload Speed 115200.
- Lỗi "ESP8266WiFi.h: No such file or directory": chưa chọn board ESP8266. Chọn lại LOLIN(WEMOS) D1 R2 & mini.
- Serial Monitor hiện ký tự lạ: chọn đúng 115200 baud. Vài ký tự lạ ngay sau khi reset là thông báo khởi động ở 74880 baud, không phải lỗi.
- Không kết nối được WiFi: kiểm tra tên mạng và mật khẩu (phân biệt chữ hoa, chữ thường), dùng mạng 2,4 GHz, đặt board gần router.
- Board không chạy sau khi nối mạch ngoài: kiểm tra mạch đó có kéo D3, D4 xuống thấp hoặc kéo D8 lên cao lúc khởi động không.
Xem thêm: hướng dẫn dùng màn hình OLED SSD1306 với ESP8266 (nối vào hai chân D1, D2), trang Driver để tải driver USB–UART và danh mục sản phẩm ESP8266 của PYWORLD.
Xem thêm