Kế hoạch · tổng quan
Kế hoạch dài hạn
Điểm xuất phát, lý do chọn ESP32-C6 thay vì C3, và mốc thời gian có thể chỉ tay vào. Đây là trang trả lời "vì sao"; ba trang sau trả lời "mua gì" và "học gì".
Điểm xuất phát
Chưa có kinh nghiệm embedded, đã có kinh nghiệm Rust. Hạ tầng sẵn có: một máy trạm lab chạy Home Assistant và Mosquitto, LAN gigabit, máy dev chạy EndeavourOS.
Nhịp làm việc: một phiên chính mỗi tuần, dài 2–3h, là phiên duy nhất đụng phần cứng; cộng thêm phiên phụ ngắn không cố định cho việc không cần board. Ở nhịp đó, ước lượng 6–10 tháng cho GĐ 0–6. Với 2–3 phiên/tuần thì còn 4–6 tháng.
Phần lớn thời gian của một dự án embedded không nằm ở chỗ viết code. Nó nằm ở lần đầu tra datasheet để lấy một con số dùng thật, lần đầu mắc ampe kế nối tiếp, lần đầu phát hiện dây dupont đứt ngầm. Những việc đó là chi phí một lần — nhưng lần đầu thì chúng ăn cả buổi.
Vì sao đổi từ ESP32-C3 sang C6
Kế hoạch ban đầu chọn C3. Rà soát lần 1 cho thấy C6 hợp hơn:
| ESP32-C3 | ESP32-C6 | |
|---|---|---|
| Lõi | RISC-V, riscv32imc | RISC-V, riscv32im**a**c (có atomics) + thêm lõi LP |
| esp-hal / esp-radio | WiFi ✓ BLE ✓ Coex ✓ ESP-NOW ✓ | giống hệt ✓✓✓✓ |
| IEEE 802.15.4 (Thread/Zigbee) | ✗ không bao giờ có — thiếu radio ở mức silicon | ✓ |
| WiFi | WiFi 4 | WiFi 6 (2.4GHz) |
| ADC | ADC1 + ADC2, ADC2 hỏng không dùng được theo errata | chỉ có ADC1 — không còn bẫy |
| Devkit chính hãng | DevKitM-1 đã EOL | C6-DevKitC-1 vẫn đang bán |
Ba điểm quyết định:
- Lộ trình GĐ 0–6 không đổi một dòng nào. Cùng
esp-halvàembassy, cùng API, chỉ khác feature flag và target Nguồn source · ví dụ esp-rs/esp-hal — examples/ và qa-test/ Tài liệu thật của dự án. README nói thẳng: xem examples ở đúng tag của bản esp-hal đang dùng, đừng đọc nhánh main. Đọc thêm tài liệu chính chủ The Rust on ESP Book Tài liệu chính chủ cho Rust trên chip Espressif — có cả phần OTA, debugging và troubleshooting. Mở trong tab mới · Esc để đóng . Đổi chip không làm việc học khó hơn. - 802.15.4 là cánh cửa một chiều. Muốn làm cảm biến Thread/Matter cho Home Assistant về sau — hướng mà HA đang đi — thì C3 bắt buộc phải mua lại chip. C6 thì không.
- Chênh giá nhỏ so với tổng ngân sách của cả dự án.
Trong Rust no_std hôm nay, Zigbee chưa dùng được: stack Zigbee của Espressif chỉ có bản C trên ESP-IDF, còn crate zigbee trên crates.io bỏ hoang từ 2017.
Thread thì dùng được — repo esp-rs/openthread có binding Rust bare-metal, đã build sẵn thư viện cho riscv32imac (đúng target C6), hỗ trợ MTD/FTD/SED và tích hợp embassy-net Nguồn source · ví dụ esp-rs/openthread Binding Rust bare-metal cho OpenThread, có thư viện build sẵn cho riscv32imac — cánh cửa GĐ 7. Mở trong tab mới · Esc để đóng . Nhưng đó là GĐ 7 tuỳ chọn, nằm ngoài 6 giai đoạn chính. Đừng mua C6 với kỳ vọng cắm phát ra Zigbee ngay.
Một hệ quả phụ đáng kể: trên C6 không còn bẫy ADC2. C3 có hai bộ ADC nhưng ADC2 hỏng theo errata, và đó là một trong những chỗ người mới hay mất thời gian nhất. Đổi chip gỡ luôn cái bẫy đó Nguồn datasheet ESP32-C6 Datasheet (Espressif) Mục Electrical Characteristics cho V_OH/drive strength, và mục strapping pin quyết định chân nào được dùng. Mở trong tab mới · Esc để đóng .
Ghim version, và coi ví dụ upstream là tài liệu chính
API của hệ sinh thái esp-rs còn thay đổi giữa các version. Hệ quả trực tiếp: gần như mọi blog post tìm được trên mạng sẽ không compile.
esp-wifi — cái tên xuất hiện trong hầu hết hướng dẫn — đã đổi tên thành esp-radio Nguồn tài liệu chính chủ esp-radio (tên mới của esp-wifi) Còn ở 1.0-beta, API vẫn đổi — ghim cứng version bằng dấu =. Mở trong tab mới · Esc để đóng , và crate này vẫn đang ở bản beta. Chép cấu hình từ một bài viết cũ nghĩa là bắt đầu bằng một tên crate không còn tồn tại.
Cách làm: ghim cứng bằng dấu = trong Cargo.toml, và coi thư mục examples/ của repo
esp-hal là tài liệu chính — nhưng phải git checkout đúng tag trùng version đang
dùng Nguồn source · ví dụ esp-rs/esp-hal — examples/ và qa-test/ Tài liệu thật của dự án. README nói thẳng: xem examples ở đúng tag của bản esp-hal đang dùng, đừng đọc nhánh main. Đọc thêm tài liệu chính chủ esp-hal trên docs.rs API reference; mục esp_hal::gpio cho Output/Input/Level/Pull/OutputConfig. Mở trong tab mới · Esc để đóng , đừng đọc nhánh main. Đọc
MIGRATING.md khi nâng version, và chỉ nâng khi đang không dở dang việc gì.
Mốc thời gian
Bảng dưới tính theo nhịp 2–3 phiên/tuần. Với 1 phiên chính/tuần, nhân cột "Tháng" với khoảng 1.5–2.
| Tháng | Giai đoạn | Kết quả có thể chỉ tay vào |
|---|---|---|
| 1 | GĐ 0–1 | LED nhấp nháy không giật khi bấm nút |
| 2 | GĐ 2 | Driver BME280 tự viết, cargo test pass, số liệu khớp DS18B20 |
| 3 | GĐ 3–4 | Hai chip trao đổi dữ liệu không dây, đo được tỉ lệ mất gói |
| 4–5 | GĐ 5 | Cảm biến hiện trong Home Assistant, chạy 72h không reset |
| 6+ | GĐ 6 | Thiết bị chạy pin, cập nhật OTA, đã bắt lên tường |
| — | GĐ 7 | (tuỳ chọn) Thread |
Con số 6–10 tháng là ước lượng, không phải cam kết. Tiêu chí hoàn thành của từng giai đoạn mới là thứ quyết định khi nào được đi tiếp.
Đọc trước hoặc trong phiên
- source · ví dụesp-rs/esp-hal — examples/ và qa-test/
Tài liệu thật của dự án. README nói thẳng: xem examples ở đúng tag của bản esp-hal đang dùng, đừng đọc nhánh main.
- tài liệu chính chủThe Rust on ESP Book
Tài liệu chính chủ cho Rust trên chip Espressif — có cả phần OTA, debugging và troubleshooting.
- datasheetESP32-C6 Datasheet (Espressif)
Mục Electrical Characteristics cho V_OH/drive strength, và mục strapping pin quyết định chân nào được dùng.
Tra khi cần, không đọc tuyến tính
- tài liệu chính chủesp-hal trên docs.rs
API reference; mục esp_hal::gpio cho Output/Input/Level/Pull/OutputConfig.
Để dành cho giai đoạn sau
- tài liệu chính chủesp-radio (tên mới của esp-wifi)
Còn ở 1.0-beta, API vẫn đổi — ghim cứng version bằng dấu =.
- source · ví dụesp-rs/openthread
Binding Rust bare-metal cho OpenThread, có thư viện build sẵn cho riscv32imac — cánh cửa GĐ 7.