Điện thoại Android cũ nằm trong ngăn kéo có thể trở thành một bộ nạp code không dây cho ESP32. Chỉ cần cắm ESP32 vào điện thoại bằng cáp USB OTG, chạy ứng dụng ESP Bridge, rồi nạp code từ máy tính qua WiFi, hoặc từ xa qua Tailscale, ngay trong VS Code + PlatformIO. Không cần cắm cáp vào máy tính nữa.

Tải về
Mã SHA256 để kiểm tra file tải về:
esp-bridge-v1.0.apk
8470071aafa51cc6bbb1929389bc6a002907ddfb504e42c6b749906e9409a61e
esp32s3-blink-v1.0.zip
06326da7e759a09e1479bd314e546da78947ab1e18a79bac47488591f6e3f4d6Code language: CSS (css)Yêu cầu: điện thoại Android 7.0 trở lên có hỗ trợ USB OTG. Ứng dụng đã được ký bằng khóa của VinIOT. Vì cài ngoài Google Play nên Android sẽ hỏi quyền “cài ứng dụng từ nguồn không xác định”.
Nguyên lý hoạt động
ESP32 cắm vào điện thoại qua cổng USB-Serial. Ứng dụng ESP Bridge biến cổng đó thành một máy chủ RFC2217 (cổng mạng 4000). Máy tính kết nối tới địa chỉ rfc2217://<IP điện thoại>:4000, và PlatformIO/esptool nạp code, đọc Serial như thể ESP32 đang cắm trực tiếp vào máy tính.
Ứng dụng nhận diện sẵn các chip cầu nối USB phổ biến: CH343P, CH340, CP2102 và cổng USB-Serial/JTAG của ESP32-S3.
Chuẩn bị
- Điện thoại Android (bài này dùng Samsung Note 8) và cáp USB OTG hoặc cáp USB-C phù hợp.
- Mạch ESP32-S3 (bài này dùng ESP32-S3-N16R8, DevKitC-1).
- Máy tính có VS Code và PlatformIO.
- Máy tính và điện thoại cùng mạng WiFi. Nếu muốn nạp từ xa, cài thêm Tailscale trên cả hai máy.
Các bước thực hiện
Bước 1. Cài ESP Bridge trên điện thoại
Tải file APK ở trên về điện thoại, mở file, cho phép cài từ nguồn không xác định khi được hỏi, rồi cài đặt.
Bước 2. Cắm ESP32 và xem địa chỉ IP
Cắm ESP32 vào điện thoại, chọn mở ESP Bridge và cấp quyền truy cập USB. Nếu app chưa kết nối, bấm nút Kết nối USB. Màn hình app hiện địa chỉ IP của điện thoại, kèm sẵn hai dòng upload_port và monitor_port để chép vào platformio.ini. Nút Reset ESP32 dùng để khởi động lại mạch, nút Giới thiệu hiện thông tin phiên bản.
Bước 3. Cấu hình PlatformIO
Giải nén file code mẫu, mở thư mục bằng VS Code và thay IP trong platformio.ini:
[env:esp32s3]
upload_port = rfc2217://<IP-WIFI-NOTE8>:4000
monitor_port = rfc2217://<IP-WIFI-NOTE8>:4000
upload_speed = 921600
[env:esp32s3_remote]
upload_port = rfc2217://<IP-TAILSCALE-NOTE8>:4000
monitor_port = rfc2217://<IP-TAILSCALE-NOTE8>:4000
upload_speed = 460800Code language: HTML, XML (xml)Bước 4. Nạp code
# cùng mạng WiFi
pio run -e esp32s3 -t upload
# từ xa qua Tailscale
pio run -e esp32s3_remote -t upload
# xem Serial
pio device monitor -e esp32s3Code language: PHP (php)Code mẫu nháy LED RGB trên mạch (GPIO48) màu xanh lá, sáng 100 ms, tắt 100 ms, đồng thời in log ra Serial mỗi giây. Mạch DevKitC-1 v1.1 dùng LED ở GPIO38 thì đổi -DLED_PIN=48 thành -DLED_PIN=38 trong platformio.ini.
#include <Arduino.h>
static const uint32_t BLINK_MS = 100;
void setup() {
Serial.begin(115200);
delay(200);
Serial.println("\nESP32-S3 blink xanh lá 100 ms");
}
void loop() {
static uint32_t lastToggle = 0;
static uint32_t lastLog = 0;
static uint32_t count = 0;
static bool ledOn = false;
uint32_t now = millis();
if (now - lastToggle >= BLINK_MS) {
lastToggle = now;
ledOn = !ledOn;
neopixelWrite(LED_PIN, 0, ledOn ? 32 : 0, 0);
}
if (now - lastLog >= 1000) {
lastLog = now;
Serial.printf("[%lu ms] xanh lá 100ms #%lu\n", now, ++count);
}
}Code language: PHP (php)Nạp từ xa qua Tailscale
Cài Tailscale trên điện thoại và máy tính, đăng nhập cùng một tài khoản. Dùng IP Tailscale của điện thoại (app ESP Bridge sẽ ưu tiên hiện địa chỉ này nếu có) trong env esp32s3_remote.
Đường truyền qua Tailscale có độ trễ khoảng 130 đến 280 ms, dài hơn thời gian chờ mặc định của esptool. Vì vậy file code mẫu có sẵn esptool.cfg tăng thời gian chờ đồng bộ, nhớ để file này cùng thư mục với platformio.ini.
Kết quả thực tế
Khi nạp từ xa qua Tailscale (460800 baud), bản code mẫu nạp xong trong khoảng 45 giây, tốc độ hiệu dụng khoảng 274 kbit/s, đọc Serial bình thường. Qua WiFi cùng mạng, tốc độ nạp thiết lập là 921600 baud.
Lưu ý bảo mật
Cổng nạp của ESP Bridge không có mật khẩu. Ai kết nối được tới cổng 4000 là nạp được code vào mạch. Chỉ dùng trong mạng WiFi nhà, hoặc qua Tailscale. Không mở cổng này ra Internet.
Thông tin tuyển dụng
Nếu bạn thích điện tử, nhúng, hàn mạch, lắp ráp và triển khai thiết bị thực tế, đội R&D tại 40/6 Lữ Gia, P. Phú Thọ, TP.HCM đang cần kỹ thuật viên điện tử – cơ điện tử (full-time, intern, part-time). Hồ sơ gửi về hr@nhtc.com.vn, Cc binh.pt@nhtc.com.vn.
👉 Xem chi tiết và ứng tuyển: https://tuyendung.nhtc.vn