Bỏ qua tới nội dung
PHẦN CỨNGHƯỚNG DẪN

Arduino và ESP32 là gì? Tự làm đèn thông minh điều khiển Wi-Fi trong 30 phút

Arduino và ESP32 khác nhau thế nào, nên chọn con nào, và hướng dẫn từng bước làm đèn thông minh bật tắt bằng điện thoại, tự sáng khi có người với relay và cảm biến PIR.

BBeernary19/10/2026 · 11 PHÚT ĐỌC
COVER.BMP
Arduino và ESP32 là gì? Tự làm đèn thông minh điều khiển Wi-Fi trong 30 phút
▲ Bo mạch ESP32 DevKit có sẵn Wi-Fi và Bluetooth

Bạn muốn đèn tự sáng khi có người bước vào phòng, hoặc bật tắt đèn ngủ bằng điện thoại mà không phải mua công tắc thông minh vài trăm nghìn? Chỉ cần một bo mạch nhỏ bằng bao diêm, vài sợi dây và khoảng 30 phút. Bài này giải thích Arduino và ESP32 là gì, khác nhau ở đâu, rồi hướng dẫn từng bước làm một chiếc đèn thông minh điều khiển qua Wi‑Fi.

Arduino là gì?

Arduino là một nền tảng phần cứng và phần mềm mã nguồn mở, ra đời khoảng năm 2005 tại Ivrea (Ý) để giúp sinh viên thiết kế làm đồ điện tử tương tác mà không cần học sâu về vi điều khiển. "Arduino" thực chất gồm ba thứ:

  • Bo mạch: phổ biến nhất là Arduino Uno R3, dùng chip ATmega328P chạy 16 MHz.
  • Arduino IDE: phần mềm để viết code và nạp vào bo qua cáp USB.
  • Ngôn ngữ và thư viện: dựa trên C/C++ nhưng được giản lược, ví dụ chỉ cần digitalWrite(13, HIGH) là chân số 13 có điện.

Bo mạch Arduino Uno R3 với chip ATmega328P và các hàng chân cắm

Hiểu đơn giản, Arduino là một "bộ não" rất nhỏ. Nó đọc tín hiệu từ cảm biến (nút bấm, cảm biến ánh sáng, cảm biến chuyển động) rồi điều khiển cơ cấu chấp hành (đèn LED, relay, động cơ, còi) theo đúng chương trình bạn viết. Khác máy tính, nó không có hệ điều hành: cắm điện là chạy ngay một vòng lặp loop() lặp đi lặp lại mãi.

Thông số của Uno R3 khá khiêm tốn: 32 KB bộ nhớ flash, 2 KB RAM, 14 chân digital (6 chân xuất PWM), 6 chân analog, mức logic 5V. Nhưng chừng đó đủ cho hàng nghìn dự án, và quan trọng hơn là cộng đồng cực lớn: gặp lỗi gì gần như chắc chắn đã có người hỏi trên diễn đàn.

ESP32 là gì và vì sao nó "ăn đứt" Arduino Uno cho nhà thông minh?

ESP32 là dòng vi điều khiển của hãng Espressif (Thượng Hải), ra mắt năm 2016. Điểm khác biệt lớn nhất: Wi‑Fi và Bluetooth được tích hợp sẵn ngay trong chip. Bo mạch phát triển hay gặp nhất là ESP32 DevKit dùng module ESP32‑WROOM‑32.

Bo mạch ESP32 DevKit với module ESP32-WROOM-32 và cổng USB-C

Điều hay là bạn vẫn lập trình ESP32 bằng Arduino IDE, cùng cú pháp setup()/loop(), cùng phần lớn thư viện. Vì vậy người ta hay nói "Arduino" để chỉ cả hệ sinh thái lập trình, còn ESP32 là một con chip mạnh hơn chạy trong hệ sinh thái đó.

Tiêu chí Arduino Uno R3 ESP32 DevKit (WROOM-32)
CPU ATmega328P, 8-bit, 16 MHz Xtensa LX6 2 nhân, 32-bit, tới 240 MHz
RAM 2 KB 520 KB SRAM
Flash 32 KB Thường 4 MB
Wi‑Fi / Bluetooth Không có Wi‑Fi 2.4 GHz b/g/n, Bluetooth 4.2 + BLE
Mức logic 5V 3.3V
Phù hợp Học điện tử cơ bản, dự án offline IoT, điều khiển qua điện thoại, nhà thông minh
Chọn con nào để bắt đầu?

Nếu mục tiêu là đèn thông minh điều khiển bằng điện thoại, hãy mua thẳng ESP32. Arduino Uno vẫn tuyệt vời để học nguyên lý vì chạy 5V, khó hỏng, nhiều tài liệu, nhưng muốn có Wi‑Fi thì phải gắn thêm module và mất công hơn nhiều.

Chuẩn bị linh kiện cho đèn thông minh

Có hai hướng làm đèn, tuỳ bạn muốn điều khiển gì:

  1. Bật tắt bóng đèn điện lưới 220V qua module relay.
  2. Đèn LED dây RGB WS2812B đổi màu, chạy hiệu ứng, an toàn vì chỉ dùng 5V.

Danh sách cơ bản:

  • [ ]1 bo ESP32 DevKit và cáp USB (micro-USB hoặc USB-C tuỳ bo, nhớ là cáp có truyền dữ liệu, không phải cáp chỉ sạc)
  • [ ]1 breadboard và dây cắm đực-đực, đực-cái
  • [ ]1 đèn LED 5mm và điện trở 220 Ω để thử nghiệm
  • [ ]1 module relay 1 kênh (nếu điều khiển đèn 220V)
  • [ ]Hoặc 1 đoạn LED WS2812B và nguồn 5V đủ dòng
  • [ ]Tuỳ chọn: cảm biến chuyển động PIR HC-SR501

Dây LED WS2812B với từng bóng có thể đổi màu riêng

Mỗi bóng WS2812B có chip điều khiển riêng, nên chỉ cần một chân dữ liệu là chỉnh được màu của từng bóng. Đổi lại, chúng ăn dòng khá lớn: mỗi bóng sáng trắng hết cỡ có thể tới khoảng 60 mA. Một dải 60 bóng vì vậy cần nguồn 5V cỡ 3–4A, không thể lấy điện từ cổng USB của ESP32.

Bước 1 — Cài Arduino IDE và nạp chương trình đầu tiên

  1. Tải Arduino IDE 2 từ trang chính thức arduino.cc.
  2. Vào File > Preferences, ở mục Additional boards manager URLs dán đường dẫn gói board ESP32 của Espressif (có trong tài liệu "arduino-esp32" trên GitHub của Espressif).
  3. Mở Boards Manager, tìm "esp32", cài gói của Espressif Systems.
  4. Chọn board ESP32 Dev Module và cổng COM tương ứng.

Nếu máy không nhận cổng, bạn cần cài driver cho chip USB-to-serial trên bo: thường là CP2102 (Silicon Labs) hoặc CH340. Nhìn chip nhỏ cạnh cổng USB là biết.

Bài thử kinh điển là cho LED nhấp nháy. Cắm LED nối tiếp điện trở 220 Ω vào chân GPIO 18 và GND như hình:

Sơ đồ nối LED và điện trở 220 ohm vào chân GPIO18 của ESP32 trên breadboard

cpp
const int LED_PIN = 18;

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
  delay(500);
  digitalWrite(LED_PIN, LOW);
  delay(500);
}

Bấm Upload. Nếu IDE báo đang chờ kết nối ("Connecting...") quá lâu, giữ nút BOOT trên bo vài giây cho tới khi bắt đầu nạp.

Đừng quên điện trở

Nối LED thẳng vào chân GPIO không có điện trở hạn dòng có thể làm cháy LED hoặc hỏng chân của chip. Với chân 3.3V của ESP32, điện trở 220–330 Ω là mức an toàn cho LED thông thường.

Bước 2 — Biến ESP32 thành công tắc Wi‑Fi

Đây là phần "thông minh". ESP32 kết nối vào Wi‑Fi nhà bạn, tự chạy một web server nhỏ. Mở trình duyệt điện thoại, gõ địa chỉ IP của nó là thấy nút Bật/Tắt.

cpp
#include <WiFi.h>
#include <WebServer.h>

const char* WIFI_SSID = "TenWifi";
const char* WIFI_PASS = "MatKhau";
const int LIGHT_PIN = 18;

WebServer server(80);
bool lightOn = false;

void sendPage() {
  String html = "<h2>Den: ";
  html += lightOn ? "BAT" : "TAT";
  html += "</h2><a href='/on'>Bat</a> | <a href='/off'>Tat</a>";
  server.send(200, "text/html", html);
}

void setup() {
  Serial.begin(115200);
  pinMode(LIGHT_PIN, OUTPUT);
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) delay(300);
  Serial.println(WiFi.localIP());

  server.on("/", sendPage);
  server.on("/on",  [] { lightOn = true;  digitalWrite(LIGHT_PIN, HIGH); sendPage(); });
  server.on("/off", [] { lightOn = false; digitalWrite(LIGHT_PIN, LOW);  sendPage(); });
  server.begin();
}

void loop() {
  server.handleClient();
}

Nạp xong, mở Serial Monitor ở tốc độ 115200 để xem địa chỉ IP (ví dụ 192.168.1.57), rồi gõ địa chỉ đó trên điện thoại cùng mạng Wi‑Fi.

Wi‑Fi 5 GHz không dùng được

ESP32 (bản WROOM-32) chỉ hỗ trợ Wi‑Fi 2.4 GHz. Nếu router phát chung một tên cho cả hai băng tần mà ESP32 không kết nối được, hãy tách riêng tên mạng 2.4 GHz trong trang quản trị router.

Bước 3 — Điều khiển bóng đèn thật bằng relay

LED 5mm chỉ để thử. Muốn bật tắt đèn trần, đèn bàn, bạn cần relay: một công tắc cơ khí được đóng ngắt bằng nam châm điện. Phía điều khiển nhận tín hiệu từ chân GPIO, phía tải nối vào dây điện của đèn qua các cổng COM, NO (thường mở), NC (thường đóng).

Sơ đồ nối module relay giữa vi điều khiển và bóng đèn điện lưới

Cách nối cơ bản: VCC của relay vào nguồn 5V (chân VIN/5V của bo), GND vào GND, chân IN vào GPIO 18. Phía tải, cắt một dây của đèn, nối hai đầu vào COM và NO. Khi relay đóng, mạch thông và đèn sáng.

Một lưu ý riêng cho ESP32: chân GPIO chỉ ra 3.3V. Nhiều module relay 5V có mạch opto vẫn kích được ở 3.3V, nhưng một số module rẻ thì không ổn định. Nếu relay kêu tạch nhưng không hút hẳn, hoặc không phản ứng, hãy chọn module ghi rõ hỗ trợ kích 3.3V. Ngoài ra, nhiều module kích ở mức LOW (low level trigger), nghĩa là digitalWrite(pin, LOW) mới làm relay đóng, ngược với suy nghĩ thông thường.

Điện 220V có thể gây chết người

Chỉ đấu nối phía 220V khi đã rút phích hoặc ngắt aptomat. Không để mạch hở trên bàn khi đang cắm điện, hãy cho relay vào hộp nhựa cách điện. Nếu chưa tự tin, chỉ làm với LED dây 5V hoặc đèn USB, hoặc nhờ người có chuyên môn điện kiểm tra.

Bước 4 — Thêm cảm biến chuyển động cho đèn tự bật

Để đèn tự sáng khi có người, gắn thêm cảm biến hồng ngoại thụ động HC-SR501. Nó phát hiện thay đổi bức xạ nhiệt từ cơ thể người, xuất mức HIGH khi có chuyển động.

Cảm biến PIR HC-SR501 với hai biến trở chỉnh độ nhạy và thời gian giữ

Module này cấp nguồn 5V nhưng chân OUT xuất khoảng 3.3V, nên nối thẳng vào ESP32 được. Trên mạch có hai biến trở: một chỉnh độ nhạy (tầm phát hiện), một chỉnh thời gian giữ tín hiệu sau khi phát hiện. Cảm biến cũng cần khoảng một phút sau khi cấp điện để ổn định, trong lúc đó có thể báo sai.

Đoạn code bổ sung vào loop():

cpp
const int PIR_PIN = 27;
unsigned long lastMotion = 0;

// trong setup(): pinMode(PIR_PIN, INPUT);

void loop() {
  server.handleClient();
  if (digitalRead(PIR_PIN) == HIGH) {
    lastMotion = millis();
    digitalWrite(LIGHT_PIN, HIGH);
  } else if (millis() - lastMotion > 60000) {
    digitalWrite(LIGHT_PIN, LOW);
  }
}

Đèn sáng khi có người, tự tắt sau 60 giây không còn chuyển động. Lưu ý dùng millis() thay vì delay() để web server vẫn phản hồi trong lúc chờ.

Những lỗi người mới hay gặp

Triệu chứng Nguyên nhân thường gặp Cách xử lý
Máy tính không thấy cổng COM Cáp chỉ sạc hoặc thiếu driver Đổi cáp có dữ liệu, cài driver CP210x/CH340
Upload báo lỗi kết nối Bo không vào chế độ nạp Giữ nút BOOT khi IDE hiện "Connecting..."
ESP32 khởi động lại liên tục Nguồn yếu khi bật Wi‑Fi hoặc relay Dùng nguồn/cáp tốt hơn, cấp nguồn riêng cho tải
Không kết nối Wi‑Fi Mạng 5 GHz hoặc sai mật khẩu Dùng mạng 2.4 GHz, kiểm tra SSID
Relay không đóng Mức kích 3.3V không đủ hoặc kích LOW Đổi logic HIGH/LOW, dùng module hỗ trợ 3.3V

Thêm một mẹo: không phải chân nào của ESP32 cũng dùng thoải mái. Các chân GPIO 34–39 chỉ là chân đầu vào, còn một số chân như GPIO 0, 2, 12, 15 ảnh hưởng tới chế độ khởi động. Người mới nên dùng các chân "an toàn" như 18, 19, 21, 22, 23, 25, 26, 27 cho dự án đầu tiên.

Đi xa hơn: tích hợp vào nhà thông minh

Web server tự viết là cách tốt để hiểu nguyên lý, nhưng khi có nhiều thiết bị, bạn sẽ muốn quản lý tập trung:

  • ESPHome + Home Assistant: mô tả thiết bị bằng file cấu hình YAML thay vì tự viết code, tự hiện lên bảng điều khiển Home Assistant, hỗ trợ tự động hoá theo giờ, theo cảm biến.
  • WLED: firmware mã nguồn mở chuyên cho LED dây WS2812B, có sẵn app điện thoại, hàng trăm hiệu ứng, nạp vào ESP32 qua trình duyệt.
  • MQTT: giao thức nhẹ để các thiết bị gửi nhận lệnh qua một "broker" trung gian, nền tảng của nhiều hệ thống IoT.

Lần đầu tự tay làm đèn sáng bằng một dòng code, bạn sẽ hiểu những thiết bị "thông minh" trong nhà thật ra hoạt động thế nào.

Tóm tắt nhanh

  • Arduino là nền tảng mã nguồn mở gồm bo mạch, IDE và thư viện; Uno R3 phù hợp để học điện tử cơ bản.
  • ESP32 mạnh hơn nhiều, có sẵn Wi‑Fi và Bluetooth, vẫn lập trình bằng Arduino IDE, rất hợp cho nhà thông minh.
  • Một đèn thông minh tối giản chỉ cần ESP32, relay hoặc LED dây, và vài chục dòng code web server.
  • Thêm cảm biến PIR HC-SR501 để đèn tự bật khi có người.
  • Phần 220V phải ngắt điện khi đấu nối và cách điện cẩn thận.

Câu hỏi thường gặp

Không biết lập trình có làm được không?

Được. Các đoạn code trong bài chỉ vài chục dòng, có thể chép và sửa tên Wi‑Fi. Nếu muốn khỏi viết code, dùng ESPHome hoặc WLED.

Arduino Uno có làm đèn điều khiển qua Wi‑Fi được không?

Được, nhưng phải gắn thêm module Wi‑Fi (thường chính là ESP8266/ESP32) nên rườm rà hơn. Dùng ESP32 ngay từ đầu đơn giản và rẻ hơn.

Cắm ESP32 chạy liên tục cả ngày có sao không?

Không sao. ESP32 được thiết kế để chạy liên tục. Chỉ cần nguồn ổn định và mạch được đặt trong hộp thoáng, tránh chạm chập.

Có điều khiển được khi ra khỏi nhà không?

Web server trong bài chỉ dùng trong mạng nội bộ. Muốn điều khiển từ xa an toàn, hãy dùng Home Assistant kèm dịch vụ truy cập từ xa hoặc VPN, không nên mở cổng router trực tiếp ra Internet.

BVIẾT BỞIBeernary

ĐỌC TIẾP_

BÌNH LUẬN (0)

LOGIN.EXE
> Bình luận đang tạm đóng._

> CHƯA CÓ BÌNH LUẬN. HÃY LÀ NGƯỜI ĐẦU TIÊN_