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ố cơ bản của Wemos D1 R2
Thông sốGiá trị
Vi điều khiểnESP8266EX (module ESP-12), xung nhịp 80/160 MHz
Bộ nhớ Flash4 MB
WiFi802.11 b/g/n, băng tần 2,4 GHz
Chip USB–UARTCH340G, cổng Micro USB
Nguồn cấpCổng Micro USB 5 V hoặc jack DC (xem mục 4)
Mức logic3,3 V
Chân digital I/O11 chân: D0–D8, RX, TX
Chân analog1 chân A0, điện áp vào tối đa 3,2 V
Kích thước68,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.

Sơ đồ chân Wemos D1 R2 ESP8266: chữ in trên mạch D0–D8, A0 và số GPIO tương ứng
Sơ đồ chân Wemos D1 R2 nhìn từ mặt trên, cổng USB ở dưới (hình vẽ minh họa). Màu cam là ba chân boot.
Chân của Wemos D1 R2 và số GPIO tương ứng
Chữ in trên mạchGPIOChức năng và lưu ý
RX, TXGPIO3, GPIO1UART nối với chip CH340, dùng khi nạp code và xem Serial Monitor
D0GPIO16I/O, không dùng được ngắt ngoài
D1GPIO5I/O, SCL của I2C
D2GPIO4I/O, SDA của I2C
D3GPIO0I/O, chân boot
D4GPIO2I/O, chân boot, LED trên board (sáng ở mức LOW)
D5GPIO14I/O, SCK của SPI
D6GPIO12I/O, MISO của SPI
D7GPIO13I/O, MOSI của SPI
D8GPIO15I/O, SS của SPI, chân boot
A0ADCNgõ 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:

  1. 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
  2. Mở Tools > Board > Boards Manager, tìm esp8266 và cài gói esp8266 by ESP8266 Community.
  3. Chọn Tools > Board > esp8266 > LOLIN(WEMOS) D1 R2 & mini.
  4. Vào Tools > Port, chọn cổng COM của board.
  5. Đặt Tools > Upload Speed là 115200, các mục còn lại để mặc định.
Chọn board LOLIN(WEMOS) D1 R2 & mini trong menu Tools của Arduino IDE 2.x cho Wemos D1 R2
Ảnh chụp màn hình Arduino IDE 2.3.6 tại PYWORLD: board LOLIN(WEMOS) D1 R2 & mini, cổng COM7, Upload Speed 115200.

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
Hình minh họa kết quả nháy LED trên Wemos D1 R2: LED sáng ở mức LOW, tắt ở mức HIGH và nội dung Serial Monitor
Kết quả mong đợi (hình minh họa): LED sáng khi D4 ở mức LOW, tắt khi ở mức HIGH.
  • LED_BUILTIN của board này bằng 2, tức GPIO2 hay chân D4; có thể viết D4 thay thế.
  • LED trên board tích cực mức thấp: LOW làm LED sáng, HIGH là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.h có 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_CONNECTED khi đã kết nối xong.
  • Vòng while chỉ 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.


Tin tức liên quan

Hướng dẫn dùng mạch tạo trễ NE555 có relay: đấu dây và chỉnh thời gian trễ
Hướng dẫn dùng mạch tạo trễ NE555 có relay: đấu dây và chỉnh thời gian trễ

3 Lượt xem

Hướng dẫn dùng mạch tạo trễ NE555 có relay bản 5 V và 12 V: nguyên lý tạo trễ, ý nghĩa các cọc VCC, GND, COM, CK, CB, cách chỉnh thời gian trễ, sơ đồ đấu dây và xử lý lỗi thường gặp.

Mạch hạ áp LM2596 và MP1584: cách chọn, chỉnh điện áp và cấp nguồn ESP32
Mạch hạ áp LM2596 và MP1584: cách chọn, chỉnh điện áp và cấp nguồn ESP32

5 Lượt xem

So sánh mạch hạ áp LM2596 và MP1584, cách chỉnh điện áp ra bằng đồng hồ vạn năng trước khi nối tải, cấp nguồn 5 V cho ESP32 DevKit V1 từ nguồn 12 V và xử lý lỗi thường gặp.

Hướng dẫn ESP32 làm web server điều khiển relay 4 kênh qua WiFi
Hướng dẫn ESP32 làm web server điều khiển relay 4 kênh qua WiFi

7 Lượt xem

Hướng dẫn dùng ESP32 DevKit V1 làm web server trong mạng WiFi nội bộ, mở trang trên điện thoại để bật, tắt module relay 4 kênh; có sơ đồ nối dây, code Arduino IDE và lưu ý an toàn.

Hướng dẫn dùng module thẻ nhớ Micro SD với ESP32
Hướng dẫn dùng module thẻ nhớ Micro SD với ESP32

6 Lượt xem

Hướng dẫn nối module thẻ nhớ Micro SD với ESP32 DevKit V1 qua SPI, định dạng thẻ FAT32, chạy code Arduino đọc ghi file, ghi dữ liệu định kỳ ra CSV và xử lý lỗi Card Mount Failed.

Hướng dẫn dùng màn hình OLED 1.3 inch SH1106 với ESP32
Hướng dẫn dùng màn hình OLED 1.3 inch SH1106 với ESP32

6 Lượt xem

Hướng dẫn nối màn hình OLED 1.3 inch SH1106 với ESP32 DevKit V1 qua I2C, cài thư viện Adafruit SH110X, chạy code hiển thị chữ và xử lý lỗi thường gặp.

Hướng dẫn bắt đầu MicroPython trên ESP32 Lite với Thonny
Hướng dẫn bắt đầu MicroPython trên ESP32 Lite với Thonny

5 Lượt xem

Hướng dẫn cài driver, cài Thonny và nạp firmware MicroPython cho mạch ESP32 Lite, dùng REPL, nháy LED, lưu main.py, đọc nút nhấn, quét I2C và xử lý lỗi thường gặp.

Hướng dẫn dùng màn hình LCD 2004 I2C với ESP32
Hướng dẫn dùng màn hình LCD 2004 I2C với ESP32

6 Lượt xem

Hướng dẫn nối màn hình LCD 2004 I2C (mạch PCF8574) với ESP32 DevKit V1, quét địa chỉ I2C, hiển thị 4 dòng chữ, tạo ký tự riêng, làm bộ đếm thời gian và đổi sang LCD 1602.

Hướng dẫn dùng thanh cảm biến dò line 5 kênh TCRT5000 với ESP32
Hướng dẫn dùng thanh cảm biến dò line 5 kênh TCRT5000 với ESP32

4 Lượt xem

Hướng dẫn nối thanh dò line 5 kênh TCRT5000 (BFD-1000) với ESP32 DevKit V1, đọc trạng thái 5 kênh trên Serial Monitor, tính vị trí vạch và gợi ý hướng lái cho xe dò line.


Bình luận
Đã thêm vào giỏ hàng