Lập trình ESP32 nâng cao: FreeRTOS, timer, watchdog, flash, PSRAM, HTTPS

Các bài cho người đã quen ESP32 và muốn viết chương trình chạy ổn định lâu dài: chia việc bằng FreeRTOS task, chia sẻ dữ liệu bằng queue, semaphore, mutex; timer phần cứng và ngắt định kỳ; watchdog và lý do khởi động lại; lưu file bằng LittleFS; bảng phân vùng flash và OTA; PSRAM; HTTPS với chứng chỉ gốc; phát âm thanh bằng PWM, DAC, I2S; chọn giữa ESP32, S3, C3, C6. Thứ tự nên đọc và các chủ đề khác có ở Góc kỹ thuật.

PSRAM trên ESP32 là gì: bo nào có, nhanh chậm ra sao, khi nào cần và cách cấp phát bộ nhớ
PSRAM trên ESP32 là gì: bo nào có, nhanh chậm ra sao, khi nào cần và cách cấp phát bộ nhớ

PSRAM là RAM ngoài chip của ESP32: module nào có, chậm hơn SRAM bao nhiêu, dữ liệu nào nên đặt vào PSRAM, ps_malloc và heap_caps_malloc, chương trình kiểm tra bộ nhớ trên mọi bo.

Bảng phân vùng flash ESP32: app, OTA, NVS, LittleFS, chọn Partition Scheme và tự đặt partitions.csv
Bảng phân vùng flash ESP32: app, OTA, NVS, LittleFS, chọn Partition Scheme và tự đặt partitions.csv

Bảng phân vùng flash ESP32 gồm những gì, so sánh các Partition Scheme có sẵn, vì sao OTA cần hai ô app, tự đặt partitions.csv đúng quy tắc, chương trình đọc bảng đang nạp.

HTTPS trên ESP32: nhúng chứng chỉ gốc đúng cách và vì sao setInsecure() nguy hiểm
HTTPS trên ESP32: nhúng chứng chỉ gốc đúng cách và vì sao setInsecure() nguy hiểm

HTTPS bảo vệ được gì, chuỗi tin cậy của chứng chỉ, nhúng chứng chỉ gốc ISRG Root X1 vào ESP32, vì sao setInsecure() mở đường cho tấn công xen giữa, chương trình thử ba trường hợp.

Phát âm thanh trên ESP32: PWM, DAC 8 bit và I2S với MAX98357A, tạo sóng sin không cần thư viện
Phát âm thanh trên ESP32: PWM, DAC 8 bit và I2S với MAX98357A, tạo sóng sin không cần thư viện

So sánh ba cách phát âm thanh trên ESP32: PWM, DAC 8 bit có DMA và I2S với MAX98357A; tạo sóng sin bằng bảng tra và bộ cộng pha, tránh tiếng tạch, phát giai điệu mẫu.

LittleFS trên ESP32: lưu file trong flash, ghi log CSV xoay vòng và phục vụ trang web qua Wi-Fi
LittleFS trên ESP32: lưu file trong flash, ghi log CSV xoay vòng và phục vụ trang web qua Wi-Fi

LittleFS nằm ở đâu trong flash ESP32, khác Preferences và thẻ nhớ thế nào, đọc ghi file, ghi log CSV xoay vòng để flash bền, phục vụ trang web và file log từ LittleFS.

Watchdog trên ESP32: vì sao mạch tự khởi động lại, đọc lý do reset và tự cứu khi chương trình treo
Watchdog trên ESP32: vì sao mạch tự khởi động lại, đọc lý do reset và tự cứu khi chương trình treo

Watchdog là gì, task watchdog, interrupt watchdog, panic và brownout trên ESP32, in lý do khởi động lại bằng esp_reset_reason, đếm số lần khởi động, cho task tự đăng ký watchdog.

Timer phần cứng trên ESP32: ngắt định kỳ chính xác tới micro giây, API mới của gói esp32 3.x
Timer phần cứng trên ESP32: ngắt định kỳ chính xác tới micro giây, API mới của gói esp32 3.x

Timer phần cứng ESP32 hoạt động thế nào, API timerBegin, timerAlarm của gói esp32 3.x, quy tắc viết hàm ngắt, thí nghiệm so ngắt timer 500 µs với vTaskDelay(1) khi CPU bận.

Queue, semaphore, mutex trong FreeRTOS: chia sẻ dữ liệu an toàn giữa các task trên ESP32
Queue, semaphore, mutex trong FreeRTOS: chia sẻ dữ liệu an toàn giữa các task trên ESP32

Vì sao biến dùng chung bị sai trên ESP32 hai nhân, queue chuyển dữ liệu, semaphore để ngắt báo cho task, mutex bảo vệ Serial, thí nghiệm hai nhân cùng tăng một biến.

FreeRTOS trên ESP32: task, độ ưu tiên, hai nhân, vTaskDelay và vTaskDelayUntil cho người mới
FreeRTOS trên ESP32: task, độ ưu tiên, hai nhân, vTaskDelay và vTaskDelayUntil cho người mới

Task trong FreeRTOS là gì, bốn trạng thái, độ ưu tiên, chọn nhân với xTaskCreatePinnedToCore, stack tính bằng byte, vTaskDelay và vTaskDelayUntil, chương trình ba task trên hai nhân.

ESP32, ESP32-S3, C3, C6 khác nhau thế nào: so sánh thông số, chọn chip theo việc, lưu ý chuyển code
ESP32, ESP32-S3, C3, C6 khác nhau thế nào: so sánh thông số, chọn chip theo việc, lưu ý chuyển code

So sánh ESP32, ESP32-S3, ESP32-C3, ESP32-C6 về nhân CPU, Wi-Fi, Bluetooth, USB, chân, DAC; gợi ý chọn chip theo việc, những điểm dễ vấp khi chuyển code, chương trình in thông tin chip.


Đã thêm vào giỏ hàng