15-central-audio

Example of the component nguyenduchoai/innoedge v0.1.4
# 15 — Centralized Multi-Zone IP Audio: Quản Lý Âm Thanh & Loa Thông Báo Tập Trung

[English](README.md) | [Tiếng Việt](README_vi.md)


Ứng dụng quản lý hệ thống âm thanh thông báo công cộng (Public Address - PA) và phát nhạc nền (BGM) đa vùng kết nối Cloud InnoEdge cho chuỗi cửa hàng, siêu thị, nhà xưởng, trường học, tòa nhà.

---

## 💡 Điểm Độc Đáo Của InnoEdge IP Audio

1. **Phân Vùng Đa Điểm (Multi-Zone Management):**
   * Quản lý phân quyền theo Zone: Zone 1 (Tầng 1 / Quầy thu ngân), Zone 2 (Khu vực trưng bày), Zone ALL (Toàn bộ tòa nhà).
   * Phát thông báo riêng lẻ cho từng vùng mà không làm gián đoạn các vùng khác.
2. **Ngắt Ưu Tiên Thông Báo (Priority Paging Override):**
   * Khi nhận lệnh `audio_announce`, hệ thống tự động:
     - Giảm hoặc ngắt tiếng nhạc nền BGM.
     - Phát chuông báo "Ding-Dong".
     - Tăng âm lượng lên mức thông báo rõ ràng (85%).
     - Phát nội dung thông báo thoại.
     - Tự động hạ âm lượng và tiếp tục phát nhạc nền du dương khi hết giờ!
3. **Còi Báo Cháy Khẩn Cấp (Emergency Siren):**
   * Lệnh `audio_emergency` lập tức ghi đè toàn bộ hệ thống, đẩy âm lượng lên 100% để phát âm thanh sơ tán hỏa hoạn.
4. **Dịch Vụ Âm Nhạc Theo Yêu Cầu (Jukebox On-Demand):**
   * Khách tại quán cafe / nhà hàng quét mã VietQR (10.000 đ) để order bài hát yêu thích phát lên loa quán!

---

## 🛠️ Phần Cứng Đề Xuất

* **Vi điều khiển:** ESP32-S3 kết nối mạch khuếch đại âm thanh I2S (MAX98357A hoặc codec ES8311).
* **Hoặc Linux SBC:** Raspberry Pi hoặc Banana Pi cắm trực tiếp ra amply/loa qua cổng 3.5mm AUX, HDMI hoặc card âm thanh USB.
* **Loa:** Loa thông báo gắn trần hoặc loa hộp trở kháng cao/thấp.

---

## 🚀 Hướng Dẫn Chạy Thử Nghiệm

### Bước 1: Khởi động Mock Cloud
```bash
cd tools/mock-cloud
go run .
```

### Bước 2: Nạp Firmware & Giám Sát Log
```bash
cd examples/15-central-audio
idf.py set-target esp32s3
idf.py menuconfig   # Cấu hình WiFi và IP mock-cloud
idf.py build flash monitor
```

---

## 🎮 Thao Tác Kiểm Chứng

1. Hệ thống tự động phát nhạc nền BGM ở mức âm lượng 45%:
   ```
   I audio-pa: 🔊 [ZONE 1] Chế độ: BGM (Nhạc nền) | Âm lượng: 45%
   I audio-pa:    🎵 Đang phát nhạc nền: "Acoustic Cafe Chill Playlist"
   ```
2. Thử nghiệm phát thông báo ưu tiên từ Cloud:
   Gửi lệnh từ Dashboard hoặc Mock Cloud:
   ```json
   {
     "action": "audio_announce",
     "params": {
       "message": "Kính mời quý khách tới quầy thu ngân số 2 thanh toán",
       "seconds": 5,
       "zone": 1
     }
   }
   ```
   Hệ thống lập tức ngắt nhạc nền, chuyển sang chế độ Paging và tăng âm lượng lên 85%:
   ```
   W audio-pa: 🔔 [DING-DONG] NGẮT NHẠC NỀN -> PHÁT THÔNG BÁO ƯU TIÊN!
   I audio-pa: 🔊 [ZONE 1] Chế độ: PAGING (Thông báo thoại) | Âm lượng: 85%
   I audio-pa:    🗣️ Đang phát thông báo: "Kính mời quý khách tới quầy thu ngân số 2..."
   ... (5 giây sau)
   I audio-pa: Thông báo kết thúc -> Tự động khôi phục phát nhạc nền BGM.
   I audio-pa: 🔊 [ZONE 1] Chế độ: BGM (Nhạc nền) | Âm lượng: 45%
   ```
3. Thử nghiệm tính năng Jukebox nạp tiền chọn bài hát (Bấm nút **BOOT**):
   ```
   I audio-pa: Khách ấn nút chọn bài hát Jukebox (10.000 đ) -> Tạo VietQR...
   I audio-pa: Mã VietQR Chọn Bài Hát Theo Yêu Cầu (Jukebox): 10000 đ | Ref: GTMOCKD...
   ```
   Quét thanh toán giả lập -> Loa lập tức chuyển sang bài hát của khách yêu cầu:
   ```
   I audio-pa: ✓ XÁC NHẬN TIỀN VỀ: 10000 đ -> XẾP BÀI HÁT VÀO HÀNG ĐỢI PHÁT!
   I audio-pa:    🎵 Đang phát nhạc nền: "Yêu Cầu #...: Bài Ca Tình Yêu"
   ```

To create a project from this example, run:

idf.py create-project-from-example "nguyenduchoai/innoedge=0.1.4:15-central-audio"

or download archive (~10.01 KB)