Loa thông báo.
Dễ cài, dễ sử dụng.
Làm theo từng tab: chuẩn bị linh kiện, đấu dây, nạp firmware, cài Wi-Fi, gửi thông báo và xử lý lỗi.

Vì sao bộ đôi này phù hợp?
ESP32-S3 kết nối Wi‑Fi, nhận lệnh từ app hoặc máy chủ và tải tệp âm thanh. MAX98357A nhận âm thanh số I2S rồi khuếch đại trực tiếp cho một loa. Không cần DAC analog rời và không cần tín hiệu MCLK.
Linh kiện cần có


- Bo ESP32-S3 có Wi‑Fi; ưu tiên bản có PSRAM nếu phát tệp dài hoặc giao diện lớn.
- Module ampli I2S MAX98357A.
- Loa thụ động 4Ω hoặc 8Ω, công suất phù hợp module; mẫu phổ biến là 3W.
- Nguồn 5V ổn định, đủ dòng cho cả ESP32-S3 và ampli; dây nguồn ngắn, tiết diện phù hợp.
- Tụ lọc gần ampli nếu nguồn hoặc dây dài gây sụt áp; giá trị chọn theo bo và thiết kế thực tế.
- Cáp USB dữ liệu để nạp và kiểm tra Serial Monitor.
Sơ đồ ESP32-S3 với MAX98357A
Cấu hình dưới đây dùng GPIO4, GPIO5 và GPIO6 làm ví dụ. ESP32-S3 cho phép định tuyến I2S qua nhiều GPIO, nhưng phải kiểm tra sơ đồ đúng bo để tránh chân flash, PSRAM, USB hoặc chân đã dùng cho thiết bị khác.
| Chân MAX98357A | Chức năng | Cách dùng |
|---|---|---|
| VIN | Nguồn ampli | Cấp 5V ổn định để có công suất tốt; luôn nối chung GND. |
| BCLK | Bit clock | Nối GPIO4 trong mã mẫu. |
| LRC / WS | Chọn kênh / word select | Nối GPIO5 trong mã mẫu. |
| DIN | Dữ liệu âm thanh số | Nối GPIO6, là I2S DOUT của ESP32-S3. |
| SD / MODE | Bật/tắt hoặc chọn kênh tùy module | Để theo cấu hình sẵn của bo; xem đúng sơ đồ module trước khi thay đổi. |
| GAIN | Chọn hệ số khuếch đại | Không nên đổi khi chưa đọc datasheet/module. |
App gửi thông báo đến loa như thế nào?
Hai cách triển khai
- Tệp âm thanh có sẵn: app gửi mã như
don_hang_moi; ESP phát tệp MP3 tương ứng. Nhanh, ổn định, không tốn dịch vụ chuyển văn bản thành giọng nói. - Nội dung thay đổi: app gửi văn bản; máy chủ chuyển văn bản thành MP3, trả URL có thời hạn; ESP tải và phát. Linh hoạt hơn nhưng cần dịch vụ TTS và cơ chế bảo mật.
Cài đúng một lần để tránh toàn bộ lỗi đã gặp
Firmware hoàn chỉnh bên dưới nhận thông báo từ app Ngân Lộc, phát tiếng Việt qua MAX98357A, tự mở trang nhập Wi‑Fi, tự kết nối lại và báo trạng thái phát về tài khoản. Wi‑Fi không được viết sẵn trong mã. Bản 2026.09.28-siren3 phát tiếng còi hú lên xuống trong 5–10 giây trước mỗi lượt thông báo. App chỉnh riêng thời gian hú, âm lượng còi và giọng đọc; mặc định còi hú 7 giây ở mức 21/21. Loa đang dùng bản cũ cần nạp lại firmware riêng để dùng các mức mới.
1. Cài phần mềm và thư viện
- Dùng Arduino IDE 2.x.
- Trong Boards Manager, cài hoặc cập nhật esp32 by Espressif Systems 3.3.11.
- Cài ESP32-audioI2S 4.0.0. Nếu đã có nhiều thư mục Audio cũ, chỉ giữ đúng một bản trong thư mục Arduino/libraries.
- Mở lại Arduino IDE sau khi cài thư viện.
2. Chọn đúng cấu hình trong menu Tools
| Mục | Giá trị phải chọn | Lý do |
|---|---|---|
| Board | ESP32S3 Dev Module | Tránh lỗi “This chip is ESP32-S3, not ESP32”. |
| Partition Scheme | Huge APP (3MB No OTA/1MB SPIFFS) | Firmware âm thanh khoảng 1,9MB, không vừa phân vùng 1,3MB. |
| PSRAM | OPI PSRAM | Thư viện cần vùng đệm lớn; nếu tắt sẽ báo OOM khoảng 720KB. |
| USB CDC On Boot | Enabled | Serial Monitor làm việc qua cổng USB. |
| Upload Mode | UART0 / Hardware CDC | Phù hợp bo ESP32-S3 hai cổng USB. |
| Upload Speed | 115200 | Ổn định hơn khi cáp hoặc bo kén tốc độ. |
| Flash Size | Chọn đúng dung lượng in trên module; N16R8 chọn 16MB | Không chọn lớn hơn phần cứng thật. |
3. Lấy mã thiết bị và tải firmware riêng
Mã được tạo tại Quản trị loa thông báo. Bạn cũng có thể vào Trung tâm quản trị → Quản lý loa thông báo.
- Đăng nhập bằng mật khẩu quản trị.
- Nhập tên loa → bấm Tạo loa mới.
- Lưu mã thiết bị và mã ghép vừa hiện ra.
- Bấm Tải firmware riêng .ino. File này đã chứa sẵn mã thiết bị và token riêng, không cần tự nhập.
4. Cách nạp
- Cắm cáp dữ liệu vào cổng USB của bo và chọn đúng COM.
- Mở file
.ino, chọn đủ các mục trong bảng rồi bấm Verify. Dòng kết quả phải có dung lượng tối đa khoảng 3.145.728 byte. - Bấm Upload. Nếu dừng ở “Connecting…”, giữ BOOT, nhấn RESET một lần, thả RESET rồi thả BOOT khi bắt đầu ghi.
- Mở Serial Monitor ở 115200 baud. Lần đầu loa phát mạng
NLC-AUDIO-xxxx; dùng điện thoại kết nối và mở192.168.4.1để nhập Wi‑Fi 2.4GHz.
5. Ghép loa vào tài khoản sau khi nạp
Vào Loa thông báo → Ghép loa mới, nhập mã thiết bị + mã ghép đã lưu, rồi bấm Ghép loa. Sau khi ghép thành công, chọn loa để gửi thông báo ngay hoặc hẹn giờ.
Firmware đã xử lý sẵn
- Kiểm tra đúng chip ESP32-S3 ngay khi biên dịch và báo lỗi dễ hiểu nếu chọn sai bo.
- Kiểm tra PSRAM lúc khởi động; không tiếp tục âm thầm khi cấu hình sai.
- Không chứa tên hoặc mật khẩu Wi‑Fi; khách tự nhập bằng điện thoại.
- Tự kết nối lại Wi‑Fi, mở lại cổng cài đặt khi mất mạng lâu và cho phép giữ BOOT 3 giây để đổi Wi‑Fi.
- Phát tiếng còi hú liên tục 5–10 giây, cao độ lên xuống, từ tệp âm thanh tạo ngay trên ESP32-S3 trước mỗi thông báo, kể cả lượt lặp; không dùng dịch vụ TTS cho còi. App cho chỉnh thời gian và âm lượng còi riêng, mặc định 7 giây và 21/21; giọng đọc giữ mức đã chọn.
- Chống gửi dồn lệnh trong lúc đang phát; xác nhận
played/errorvà tự thử lại nếu mạng gián đoạn. - Giới hạn thời gian bắt đầu/phát để một lệnh lỗi không làm thiết bị kẹt vĩnh viễn.
Thiết kế để nhiều thiết bị không phát nhầm
NLC-AUDIO-xxxx; khách kết nối bằng điện thoại, mở 192.168.4.1 và nhập Wi‑Fi 2.4GHz mới. Không cần nạp lại firmware hoặc ghép lại tài khoản.- Mỗi bộ có device_id và token riêng, được ghép vào đúng tài khoản khách.
- App gửi nội dung cùng device_id đến API; máy chủ kiểm tra quyền sở hữu.
- Máy chủ xếp lệnh phát ngay hoặc theo giờ đã chọn.
- ESP32-S3 nhận đúng lệnh, chuyển văn bản thành tiếng Việt và phát qua I2S.
- Thiết bị báo
playedhoặcerror; nếu mất mạng lúc báo kết quả, firmware tự thử lại.
| Trường lệnh | Ví dụ | Mục đích |
|---|---|---|
| command_id | msg_000125 | Ngăn phát lặp. |
| device_id | NLA-56C1144A | Chọn đúng loa. |
| text | Có đơn hàng mới | Nội dung tiếng Việt cần đọc. |
| volume | 1–21 | Âm lượng giọng đọc. |
| chime_volume | 1–21 | Âm lượng còi; mặc định 21/21. |
| chime_seconds | 5–10 giây | Thời gian còi hú; mặc định 7 giây, cần firmware 2026.09.28-siren3. |
| run_at | Thời điểm Unix | Phát ngay hoặc đúng lịch. |
Kiểm tra theo từng lớp
- Nguồn: đo 5V tại VIN–GND khi đang phát; điện áp không được sụt mạnh.
- Loa và ampli: nạp mã phát một tệp cố định trước, chưa kết nối app.
- I2S: kiểm tra đúng BCLK, LRC và DIN; GPIO trong mã phải trùng dây.
- Mạng: xem ESP có IP và tải được URL MP3 bằng HTTPS.
- Máy chủ: gửi một lệnh duy nhất và kiểm tra trạng thái nhận/phát.
- App: thử nhiều tài khoản và nhiều device_id để chắc không phát nhầm.
Các lỗi thường gặp
| Hiện tượng | Cách sửa đúng |
|---|---|
Audio.h: No such file | Cài ESP32-audioI2S 4.0.0, kiểm tra thư mục thư viện có src/Audio.h, sau đó mở lại Arduino IDE. |
span: No such file | Cập nhật esp32 by Espressif Systems lên 3.3.11; xóa bản ESP32-audioI2S cũ hoặc trùng tên rồi cài lại đúng một bản. |
This chip is ESP32-S3, not ESP32 | Đang chọn ESP32 Dev Module. Đổi sang ESP32S3 Dev Module. |
text section exceeds available space | Chọn Partition Scheme → Huge APP (3MB No OTA/1MB SPIFFS). |
OOM: failed to allocate 720896 bytes | Chọn PSRAM → OPI PSRAM. Nếu Serial vẫn báo PSRAM 0MB, bo không có PSRAM hoặc chọn sai loại. |
| Không có tiếng | Kiểm tra GPIO4→BCLK, GPIO5→LRC, GPIO6→DIN; loa nối SPK+–SPK−. Nếu module có chân SD và đang tắt, kéo SD lên 3,3V. |
| Tiếng rè hoặc bị vỡ | Giảm volume, dùng nguồn 5V đủ dòng, nối chung GND, rút ngắn dây nguồn/loa và kiểm tra loa 4–8Ω. |
| ESP khởi động lại khi phát | Nguồn sụt áp hoặc nhiễu; dùng nguồn 5V tốt, dây ngắn và thêm tụ lọc gần module. |
Kẹt ở Connecting… | Chọn đúng COM, dùng cáp dữ liệu, giữ BOOT rồi nhấn RESET để vào chế độ nạp. |
| Loa trực tuyến nhưng không phát | Mở Serial Monitor 115200, kiểm tra Internet và nội dung lỗi. Firmware mới tự báo error nếu TTS không bắt đầu sau 20 giây. |
Nguồn kỹ thuật
Espressif — I2S trên ESP32-S3Analog Devices — MAX98357A product & datasheetEspressif Arduino-ESP32 — I2S APIESP32-audioI2S — mã nguồn và ví dụĐánh giá & bình luận
Chia sẻ kết quả hoặc hỏi thêm về ESP32-S3 và MAX98357A.
Đăng nhập để đánh giá hoặc bình luận.
