Micro thu tiếng, ESP-01 thực hiện lệnh
Trong phương án này, micro nối với ESP32-S3, không nối trực tiếp theo bảng chân bên dưới vào ESP-01. ESP32-S3 đóng vai trò bộ thu giọng nói; ESP-01 tiếp tục điều khiển relay theo hệ thống điều khiển từ xa.
NGÂN LỘC COMPUTERGIẢI PHÁP CÔNG NGHỆDùng micro thu câu lệnh tiếng Việt, ESP32-S3 gửi âm thanh để nhận dạng và hệ thống chuyển lệnh đến ESP-01 đang điều khiển thiết bị. Nói “bật đèn bàn” hoặc “tắt đèn bàn” thay cho thao tác trên ứng dụng.
Xem cách đấu micro ↓Tải mã thử micro ↓
Trong phương án này, micro nối với ESP32-S3, không nối trực tiếp theo bảng chân bên dưới vào ESP-01. ESP32-S3 đóng vai trò bộ thu giọng nói; ESP-01 tiếp tục điều khiển relay theo hệ thống điều khiển từ xa.
Chọn một trong hai cách: micro điện thoại/máy tính qua trình duyệt, hoặc micro I2S gắn vào bộ ESP32-S3 riêng. Cả hai cùng đi qua kiểm tra tên và quyền trước khi tạo lệnh cho ESP-01.
Mở điều khiển bằng giọng nói →Tải firmware bộ thu ESP32-S3 ↓Trình duyệt có thể dùng dịch vụ riêng để xử lý âm thanh và cần Internet. Hỗ trợ tùy thiết bị/trình duyệt; mở HTTPS bằng Chrome hoặc nhập bằng tay khi nút nói không khả dụng.
Gõ r trong Serial để thử thu; gõ c để mở cấu hình. Giữ nút thu rời GPIO18 khi bật nguồn cũng mở cấu hình. Sau khi thu, Serial hiện số mẫu, RMS và peak; nếu quá nhỏ, kiểm tra VDD 3V3, dây SCK/WS/SD và kênh L/R. Firmware xác thực HTTPS bằng ISRG Root X1; nếu máy chủ đổi CA phải cập nhật chứng chỉ, không bỏ kiểm tra TLS.
Nhấn nút để nói → thu một câu → máy chủ kiểm tra lệnh → ESP-01 thực hiện.
Micro chỉ thu âm, không tự hiểu “bật” hay “tắt”. Cần có bộ nhận dạng giọng nói và phần đối chiếu câu lệnh. Bài này dùng nhận dạng tiếng Việt qua Internet; khi mất mạng thì không thực hiện lệnh mới.
Ví dụ mã thử dành cho INMP441/ADMP441 dùng Philips I2S 24 bit đã được xác nhận. Nếu mic là PDM, analog hoặc định dạng khác, phải thay cấu hình tương ứng.
Muốn có lời xác nhận, có thể bổ sung PCM5102 với loa AUX có nguồn riêng. Xem bài loa jack 3,5 mm.

Bo trong ảnh có chữ ESP32-S3-N16R8. Không thấy đầu nối camera trên mặt trước. Nút BOOT và RST có sẵn không phải nút thu.
Bảng dưới dùng cho bo ESP32-S3-N16R8 hai USB-C người dùng cung cấp, khi GPIO 15/16/17/18 chưa nối thiết bị khác. Với bo camera hoặc màn hình, kiểm tra sơ đồ rồi đổi chân trước khi nối. Không áp dụng một bảng chân cho tất cả các bo.
| Micro I2S | ESP32-S3-N16R8 | Chức năng |
|---|---|---|
| VDD | 3V3 | Cấp nguồn theo datasheet mic; không dùng 5 V cho mic chỉ hỗ trợ 3,3 V |
| GND | GND | Mass chung |
| SCK | GPIO 15 | Xung bit I2S từ ESP32 |
| WS | GPIO 16 | Xung chọn kênh |
| SD | GPIO 17 | Dữ liệu âm thanh vào ESP32 |
| L/R | GND | Chọn kênh trái với INMP441/ADMP441 |
| Nút nhấn thu rời | GPIO 18 ↔ nút ↔ GND | Nhấn một lần để thu 4 giây; INPUT_PULLUP |
Nối khi đã tắt nguồn, dùng dây ngắn và không che lỗ thu của micro. Nếu bo đã phát loa qua GPIO 4/5/6, giữ riêng các chân này. Khi tích hợp cả thu/phát, phải phân bổ bộ điều khiển I2S RX/TX phù hợp với thư viện, không chép chồng hai cấu hình mặc định.
Tham khảo I2S của Arduino-ESP32 và datasheet ADMP441. Với mic khác, dùng tài liệu đúng chip.
Mã thử đọc khung stereo 32 bit ở 16 kHz, đo mức âm ở kênh trái và in RMS/peak. Mức thay đổi khi nói là bước kiểm tra dữ liệu đầu vào, chưa chứng minh chất lượng nhận dạng; tiếp theo cần thu và nghe lại WAV.
Tải mã thử micro .zip ↓Tải file .ino ↓constexpr bool PINS_CONFIRMED = false; // Xác nhận chân rồi đổi true
constexpr int MIC_SCK = 15;
constexpr int MIC_WS = 16;
constexpr int MIC_SD = 17;
constexpr int MIC_CHANNEL = 0; // L/R nối GND: trái
microphone.setPins(MIC_SCK, MIC_WS, -1, MIC_SD);
microphone.begin(I2S_MODE_STD, 16000,
I2S_DATA_BIT_WIDTH_32BIT, I2S_SLOT_MODE_STEREO);Đoạn trên chỉ là cấu hình. Tải file đầy đủ để nạp. Mã thử không gửi âm thanh lên mạng, không phát loa và không tác động relay.
Máy chủ gọi POST https://api.openai.com/v1/audio/transcriptions, gửi file WAV mono 16 bit/16 kHz/4 giây, model gpt-transcribe, ngôn ngữ vi và nhận văn bản JSON. Chữ nhận dạng được kiểm tra bằng quy tắc bật/tắt + tên thiết bị, không để mô hình tự chọn mã ESP-01.
API được tính phí riêng; gói ChatGPT không tự cấp hạn mức cho khóa API này. Giới hạn của bộ phần mềm: 100 lượt thu/ngày cho mỗi bộ micro và 8 giây giữa các lần gửi. Chủ website chịu phí API; bộ này chưa có chức năng thu phí ví khách.
OpenAI Docs: chuyển âm thanh thành chữ · Tham số Audio Transcriptions.
Nhận dạng tiếng Việt offline chưa được cung cấp trong bộ này. Mất mạng, dịch vụ lỗi, âm thanh im lặng hoặc câu không khớp tên sẽ không tạo lệnh.
Đối với tải dùng relay giữ trạng thái, bắt đầu với hai câu và một thiết bị. Đây là bộ lệnh được xử lý trong bộ phần mềm mở rộng. Sketch thử mức âm chỉ kiểm tra micro; firmware thu WAV và các API được tải riêng.
| Câu nói | Hành động | Kết quả mong muốn |
|---|---|---|
| “Bật đèn bàn” | Gửi ON tới đúng ESP-01 | Relay ở trạng thái bật |
| “Tắt đèn bàn” | Gửi OFF tới đúng ESP-01 | Relay ở trạng thái tắt |
| “Đừng bật đèn bàn” | Từ chối câu không khớp | Không đổi đầu ra |
| Câu lạ / âm thanh không rõ | Không gửi lệnh | Báo nói lại |
Dùng lệnh ON/OFF tuyệt đối, không dùng đảo trạng thái TOGGLE. Lệnh bật bị gửi trùng thì vẫn bật. Mã yêu cầu phải được kiểm tra để không tác động lặp.
Firmware ESP-01 của dự án có luồng nhận lệnh và phản hồi. Bộ micro cần đi qua kiểm tra quyền và hàng đợi điều khiển của hệ thống; không gọi trực tiếp API poll của thiết bị để tạo lệnh. Máy chủ phải xác định đúng mã ESP-01 đích, bảo vệ token và ghi nhật ký.
Không ngắt nguồn ESP-01 để “tắt thiết bị”. ESP-01 cần tiếp tục được cấp điện và kết nối mạng để còn nhận lệnh bật tiếp theo. Lệnh bật/tắt tác động thiết bị hoặc tiếp điểm relay, không tắt bộ điều khiển.
Bo nối POWER SW dùng xung nhấn rồi nhả, không giữ relay ON như đóng một bóng đèn. Không dùng cùng một cách điều khiển cho cả hai loại tải.
ESP-01 đang chạy đúng firmware có thể giữ nguyên nếu hỗ trợ loại lệnh cần dùng. Bộ thu ESP32-S3 và phần xử lý giọng nói dùng firmware/API riêng trong bộ tải mới. Với bo relay khác hoặc giao thức khác, kiểm tra lại firmware ESP-01.
Trong trang điều khiển, mã bắt đầu bằng NLC- nằm dưới tên máy là mã định danh của bộ điều khiển. Đây là mã mà máy chủ dùng để chọn ESP-01 nhận lệnh. Ví dụ trong ảnh minh họa của bạn, Máy tính văn phòng có mã NLC-B723B241. Khi cấu hình, hãy chọn mã đang hiển thị trong tài khoản của chính bạn; không chép mã ví dụ cho thiết bị khác.
| Thông tin | Dùng khi nào? |
|---|---|
| Mã thiết bị NLC-… | Xác định đúng ESP-01 đích trong hệ thống |
| Mã kích hoạt | Thêm/ghép bộ điều khiển vào tài khoản, không đọc mã này khi ra lệnh |
| Mật khẩu Wi-Fi thiết bị | Kết nối mạng cấu hình của bộ điều khiển |
| Token/khóa thiết bị | Xác thực firmware với máy chủ; không đưa vào bài viết hoặc gửi cho bộ thu dùng chung danh tính |
| Câu nói | Thiết bị đích | Cách xử lý |
|---|---|---|
| “Bật máy tính văn phòng” | NLC-B723B241 trong ví dụ | Kiểm tra quyền và trạng thái máy, rồi tạo thao tác phù hợp với POWER SW |
| “Tắt máy tính phòng ngủ” | Mã của máy phòng ngủ đã ghép | Yêu cầu tắt an toàn theo cấu hình máy đó |
| “Tắt máy tính” khi có nhiều máy | Chưa xác định | Không gửi lệnh; hỏi lại hoặc báo cần nói đủ tên máy |
| “Đừng tắt máy tính văn phòng” | Không tạo lệnh | Không khớp câu cho phép, giữ nguyên trạng thái |
Bạn nói tên máy, không cần đọc mã NLC-. Máy chủ đối chiếu tên với mã đã lưu, kiểm tra quyền tại thời điểm gửi, sau đó đưa lệnh vào hàng đợi riêng của thiết bị. Không tìm thiết bị theo một mã người dùng tùy ý nhập mà bỏ qua quyền sở hữu.
Nếu đổi tên, chuyển thiết bị sang tài khoản khác hoặc xóa thiết bị, cần cập nhật hoặc hủy liên kết giọng nói tương ứng. Tên trùng, câu không rõ, thiết bị không được cấp quyền hoặc ngoại tuyến phải được báo rõ; không tự chuyển lệnh sang một máy khác.
| Hiện tượng | Kiểm tra |
|---|---|
| Micro luôn bằng 0 | Nguồn, SCK/WS/SD, kênh L/R và cấu hình chip |
| Thu âm rè/méo | Dây, nguồn, định dạng I2S, chuyển mẫu 24 bit và mức gain |
| Không nhận tiếng Việt | vi trên API / vi-VN trong trình duyệt, WAV/PCM và lỗi dịch vụ nhận dạng |
| Nhận chữ đúng nhưng ESP-01 không chạy | Quyền, thiết bị đích, hàng đợi, trạng thái online và ACK |
| Máy tính nhận lệnh nhưng không tắt | Phần mềm tắt máy, hành vi nút nguồn và phản hồi trạng thái |
| Lệnh bị lặp | Mã yêu cầu, chống trùng, thời hạn; không dùng TOGGLE |
Khi mất mạng hoặc hết thời gian chờ, không tự đổi trạng thái và không tự gửi lại một lệnh cũ để tác động thiết bị muộn.
Với thiết bị điện lưới, chọn thiết bị đóng cắt có định mức/cách ly phù hợp và để người có chuyên môn lắp phần điện. Không đưa điện lưới hoặc nguồn USB vào chân POWER SW của máy tính.
Lộ trình: thử micro → nghe WAV → nhận tiếng Việt → tạo lệnh đúng thiết bị → ESP-01 thực hiện → phản hồi kết quả.
← Mạch ứng dụng