Giới thiệu series “Lập trình ESP32 & NRF24L01”
Series này thuộc hệ thống nội dung của IoTLabs, tập trung vào việc:
- Sử dụng ESP32 DevKit 38 pin làm “bộ não” cho các project IoT.
- Dùng NRF24L01 làm module truyền nhận không dây tầm gần, tiết kiệm năng lượng.
- Từng bước xây dựng: từ kết nối cơ bản → gửi dữ liệu → mạng nhiều node → gateway → MQTT / IoTLabs Cloud → remote điều khiển.
Ở Phần 1, chúng ta sẽ đi từ những bước nền tảng nhất:
- ESP32 DevKit 38 pin là gì? Có những phần chính nào?
- Các loại chân quan trọng: 3V3, 5V, GND, GPIO, VIN, EN…
- Cài Arduino IDE và ESP32 core để lập trình.
- Nạp thử chương trình “Xin chào ESP32” / “Blink LED” để kiểm tra môi trường.
Nếu bạn là người mới, đây là bài mở đường để bạn không bị “ngợp” khi bước vào các phần nâng cao hơn (NRF24L01, network, MQTT…).
1. ESP32 DevKit 38 pin là gì?
1.1. ESP32 – trái tim của rất nhiều dự án IoT
ESP32 là một vi điều khiển (microcontroller) mạnh mẽ tích hợp:
- CPU 32-bit, tốc độ cao.
- WiFi & Bluetooth tích hợp sẵn.
- Nhiều GPIO có thể dùng làm digital, analog, PWM, I2C, SPI, UART…
- Bộ nhớ Flash và RAM đủ dùng cho phần lớn dự án IoT – từ cảm biến đến điều khiển thiết bị.
ESP32 DevKit 38 pin là một dạng board phát triển (development board) phổ biến, có:
- 38 chân ra (pin) được đưa sẵn ra hai hàng.
- Mạch USB-to-Serial tích hợp: chỉ cần cắm USB là nạp chương trình.
- Mạch ổn áp on-board, có thể cấp nguồn qua USB hoặc chân VIN.
1.2. Vì sao chọn ESP32 DevKit 38 pin cho series này?
- Rất phổ biến: dễ mua, nhiều tài liệu, cộng đồng lớn.
- Đủ nhiều chân để kết nối cả NRF24L01, cảm biến, relay, màn hình,…
- Tích hợp WiFi: thuận lợi cho các phần sau (MQTT, IoTLabs Cloud, dashboard…).
- Giá thành hợp lý, phù hợp mục tiêu học tập – nghiên cứu – thử nghiệm của IoTLabs.
2. Khám phá các khu vực chính trên ESP32 DevKit 38 pin
Mỗi nhà sản xuất có thể bố trí hình thức hơi khác nhau, nhưng về cơ bản board gồm các khu vực:
2.1. Khu vực chip ESP32
- Là con chip vuông (hoặc module ESP-WROOM-32) ở giữa board.
- Bên cạnh thường có anten WiFi in trên PCB.
2.2. Cổng USB & mạch nạp
- Ở một đầu board có cổng USB (Micro USB hoặc USB-C).
- Cạnh đó là chip USB-to-Serial (CH340, CP2102, hoặc tương đương).
- Khi cắm vào máy tính, driver của chip này sẽ tạo cổng COM để Arduino IDE nạp code.
2.3. Nút nhấn BOOT / EN (RESET)
- Nút EN / RST: Reset lại ESP32.
- Nút BOOT: Dùng trong một số board để đưa ESP32 vào chế độ nạp firmware thủ công (thường Arduino IDE xử lý tự động, ít khi phải bấm).
2.4. Hàng chân GPIO hai bên
Hai bên board là 2 dãy chân (left/right) gồm:
- Chân nguồn:
3V3: nguồn 3.3V (cấp ra/cho ngoại vi, hoặc được tạo từ USB/VIN qua ổn áp).5V(nếu có): nguồn 5V (thường là từ USB).VIN: chân cấp nguồn vào (5–12V tùy board, đi qua ổn áp để xuống 3.3V).GND: các chân mass chung.
- Chân GPIO:
GPIO0..GPIO39(không phải tất cả đều đưa ra header trên mọi board, nhưng đa số). - Một số GPIO có chức năng đặc biệt: ADC, DAC, TOUCH, HSPI/VSPI, UART, I2C…
Trong các bài sau, chúng ta sẽ chuẩn hóa một số chân:
- Chân dùng cho SPI với NRF24L01 (SCK, MISO, MOSI, CSN, CE).
- Chân dùng cho I2C (SDA, SCL) để nối cảm biến/màn hình.
- Chân dùng cho UART debug/ngoại vi.
3. Cài đặt môi trường lập trình Arduino IDE cho ESP32
Trong series này, để dễ tiếp cận, chúng ta dùng Arduino IDE làm môi trường lập trình chính cho ESP32.
3.1. Cài Arduino IDE
- Truy cập trang chủ Arduino, tải Arduino IDE (phiên bản mới nhất).
- Cài đặt như phần mềm bình thường (Windows/macOS/Linux).
Nếu bạn đã dùng Arduino IDE để lập trình Arduino UNO, bạn có thể tiếp tục dùng chính IDE đó cho ESP32.
3.2. Thêm ESP32 core vào Arduino IDE
Để Arduino IDE hiểu được board ESP32, ta cần thêm Board Manager URL và cài ESP32 core.
- Mở Arduino IDE →
File→Preferences. - Trong ô Additional Boards Manager URLs, thêm đường dẫn (URL) cho ESP32 (theo hướng dẫn mới nhất từ Espressif).
- Vào
Tools→Board→Boards Manager. - Tìm
esp32(by Espressif Systems) →Install.
3.3. Chọn board & cổng COM
Sau khi cài xong ESP32 core:
- Cắm ESP32 DevKit vào máy tính qua cổng USB.
- Vào
Tools→Board→ chọn “ESP32 Dev Module” (hoặc ESP32 tương ứng, tùy bản core). - Vào
Tools→Port→ chọn cổng COM / tty tương ứng với board (ví dụCOM4,/dev/ttyUSB0,/dev/tty.SLAB_USBtoUART…).
Nếu không thấy cổng, bạn cần:
- Cài đúng driver cho chip USB-to-Serial (CH340, CP2102,…).
- Đổi cáp USB khác nếu cáp chỉ hỗ trợ sạc (không có dây data).
4. Viết chương trình đầu tiên: “Xin chào ESP32” & Blink LED
Để kiểm tra môi trường, chúng ta sẽ viết 2 đoạn code rất đơn giản:
- In ra Serial dòng chữ “Hello from ESP32”.
- Nháy 1 LED mỗi 1 giây (có thể là LED on-board, hoặc LED ngoài).
4.1. Code mẫu “Xin chào ESP32”
Mở Arduino IDE, tạo Sketch mới và dán code:
void setup() {
Serial.begin(115200); // Khoi dong Serial debug
delay(1000); // Cho on dinh
Serial.println();
Serial.println("Hello from ESP32!");
}
void loop() {
// De trong, hoac co the in gi do dinh ky
delay(1000);
}
- Chọn board & cổng đúng → bấm Upload.
- Mở Serial Monitor (Ctrl+Shift+M), chọn Baud 115200.
- Bạn sẽ thấy dòng
Hello from ESP32!in ra → chứng tỏ môi trường đã OK.
4.2. Blink LED on-board hoặc LED ngoài
Trên nhiều board ESP32 DevKit, có sẵn 1 LED on-board nối với 1 GPIO (thường là GPIO2 hoặc GPIO5, tùy board). Nếu không chắc, bạn có thể dùng LED ngoài:
- Nối LED + điện trở từ một
GPIO(ví dụGPIO2) xuống GND. - Đảm bảo đấu đúng cực LED.
Ví dụ Blink với GPIO2:
#define LED_PIN 2
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
}
Sau khi Upload:
- LED sẽ nháy sáng/tắt mỗi 0.5 giây.
- Nếu không thấy nháy:
- Thử đổi
LED_PINsang 2, 5, 4,… (tùy board). - Kiểm tra lại đấu LED ngoài.
- Thử đổi
5. Một số lưu ý quan trọng khi làm việc với ESP32 DevKit
5.1. Nguồn 3.3V & 5V
- ESP32 chạy ở 3.3V, các chân GPIO không chịu được 5V.
- Một số module cảm biến dùng 5V (MQ-2, relay, v.v.) nhưng phần tín hiệu thường đã qua mạch chia áp/optocoupler – vẫn phải kiểm tra kỹ datasheet.
- Chân
5V/VINtrên board DevKit dùng để cấp nguồn vào hoặc lấy ra 5V cho module khác (tùy thiết kế board).
5.2. GPIO “nhạy cảm” khi boot
Một số GPIO liên quan đến quá trình boot (GPIO0, GPIO2, GPIO15, v.v.). Nếu bạn kéo các chân này lên/xuống sai cách, ESP32 có thể:
- Không boot được.
- Chỉ vào chế độ download / flash mode.
Trong series, ta sẽ tránh dùng các chân “nhạy” này cho các kết nối bình thường (trừ khi đã phân tích kỹ).
5.3. Serial debug là “vũ khí” cực kỳ quan trọng
- Mọi bài trong series đều dùng
Serial.println()để debug. - Khi gặp lỗi nạp không được / không chạy:
- Kiểm tra Serial log.
- Thêm dòng debug để thấy chương trình chạy đến đâu.
6. Chuẩn bị cho các phần tiếp theo (NRF24L01, cảm biến, MQTT)
Ở Phần 1, bạn đã:
- Hiểu tổng quan về ESP32 DevKit 38 pin.
- Cài đặt xong môi trường Arduino IDE + ESP32 core.
- Nạp và chạy được chương trình “Hello from ESP32” và Blink LED.
Đây là nền tảng bắt buộc trước khi bạn:
- Nối thêm module NRF24L01 (cần SPI ổn định).
- Nối thêm cảm biến DHT, MQ-x, relay, màn hình.
- Xây dựng mạng multi-node → gateway → MQTT / IoTLabs Cloud.
Ở Phần 2 của series, chúng ta sẽ đi sâu hơn vào:
Giải phẫu chi tiết MCU & pinout ESP32 DevKit 38 pin – Chọn chân đúng cho SPI, I2C, UART, ADC trong dự án IoTLabs.
Bạn có thể bookmark lại series trên iotlabs.vn để xem lần lượt từng bài và dễ dàng áp dụng cho project của riêng mình.


