1. Xác định trạm sẽ đo những gì
Một trạm đo trong lớp học có thể theo dõi CO₂, bụi mịn PM2.5, nhiệt độ và độ ẩm. ESP32 đọc cảm biến, xử lý dữ liệu và cung cấp một trang web để điện thoại hoặc máy tính trong cùng mạng Wi-Fi xem số đo.
Trong thiết kế này, SCD40 đo CO₂ bằng nguyên lý hồng ngoại, BME280 đo nhiệt độ và độ ẩm, còn PMS5003 cung cấp số đo hạt bụi qua UART. Các chỉ số giúp quan sát sự thay đổi của môi trường, nhưng trạm tự lắp không thay thế thiết bị quan trắc chuẩn hoặc thiết bị cảnh báo an toàn.
2. Chuẩn bị linh kiện và nguồn điện
Chuẩn bị một bo ESP32 có Wi-Fi, mô-đun SCD40, mô-đun BME280, cảm biến PMS5003, dây nối và nguồn USB phù hợp. Nếu muốn hiển thị ngay trên thiết bị, có thể bổ sung màn hình OLED giao tiếp I²C; trang web vẫn là cách hiển thị chính trong hướng dẫn này.
Kiểm tra điện áp cấp và mức tín hiệu của đúng phiên bản mô-đun đang dùng trước khi nối dây. Chân GPIO của ESP32 dùng mức logic 3,3 V và không được nhận trực tiếp tín hiệu 5 V. PMS5003 cần nguồn theo thông số của mô-đun; nguồn cấp cho toàn hệ thống phải đáp ứng cả dòng tiêu thụ của cảm biến và ESP32.
3. Nối cảm biến với ESP32
Nối SCD40 và BME280 vào cùng bus I²C: SDA tới GPIO21, SCL tới GPIO22 và nối chung GND với ESP32. Cấp nguồn theo thông số của từng mô-đun. Nếu bo cảm biến đã có điện trở kéo lên I²C, hãy kiểm tra điện áp mà các điện trở này kéo lên; đường I²C nối với ESP32 phải ở mức 3,3 V.
Với PMS5003, nối chân TX của cảm biến tới một chân nhận UART của ESP32, chẳng hạn GPIO16, và nối chung GND. Chỉ kết nối sau khi xác nhận mức điện áp chân TX tương thích 3,3 V; dùng mạch chuyển mức nếu cần. Đặt đầu hút và đầu xả khí của cảm biến bụi ở vị trí thông thoáng.
4. Viết chương trình đọc và kiểm tra dữ liệu
Trong môi trường lập trình ESP32, cài thư viện phù hợp với các mô-đun thực tế. Khởi tạo I²C và UART, sau đó kiểm tra từng cảm biến riêng: quét địa chỉ I²C, đọc một mẫu CO₂ và nhiệt ẩm, rồi kiểm tra việc nhận khung dữ liệu PMS5003. Cách làm này giúp tìm lỗi dây nối trước khi thêm phần Wi-Fi.
Đọc và cập nhật dữ liệu hiển thị theo chu kỳ khoảng 5 giây, nhưng tuân thủ chu kỳ đo mà thư viện của từng cảm biến yêu cầu. Lưu giá trị mới nhất cùng thời điểm nhận theo mili giây kể từ lúc ESP32 khởi động. Nếu lần đọc thất bại, đánh dấu chỉ số là không khả dụng thay vì giữ số cũ mà không thông báo.
5. Tạo trang hiển thị cập nhật liên tục
Cho ESP32 kết nối Wi-Fi và chạy máy chủ web nội bộ. Tạo một trang hiển thị các ô CO₂ (ppm), PM2.5 (µg/m³), nhiệt độ (°C) và độ ẩm (%). Một đường dẫn dữ liệu, chẳng hạn /api/measurements, có thể trả về JSON gồm các giá trị đo và thời điểm cập nhật.
Dùng JavaScript trên trang để lấy JSON khoảng 5 giây một lần và cập nhật các ô số mà không cần tải lại trang. Đây là hiển thị gần thời gian thực: độ trễ phụ thuộc chu kỳ đo, Wi-Fi và trình duyệt. Hiển thị thêm trạng thái kết nối hoặc thời gian từ lần cập nhật cuối để người xem nhận biết dữ liệu đã cũ.
6. Bố trí trạm và diễn giải số đo
Đặt trạm ở nơi không bị che luồng khí, tránh sát cửa sổ, nguồn nhiệt, hơi nước hoặc miệng thổi của quạt. Không nhốt PMS5003 trong hộp kín. Nhiệt từ ESP32 cũng có thể ảnh hưởng phép đo nhiệt độ nếu BME280 nằm quá gần bo mạch.
CO₂ có thể giúp quan sát sự thay đổi thông gió khi phòng có người; PM2.5 có thể thay đổi khi có bụi hoặc khói. Không suy ra chất lượng không khí chỉ từ một chỉ số. Nếu dùng các nhãn màu trên giao diện, hãy nêu rõ quy tắc phân loại đã chọn, thay vì trình bày chúng như kết luận y tế.
7. Hoàn thiện và mở rộng dự án
Sau khi hệ thống hoạt động, thử ghi số đo ở các thời điểm khác nhau và quan sát xem trang web có báo dữ liệu cũ khi ngắt một cảm biến hay không. Kiểm tra lại dây, nguồn và mã xử lý lỗi nếu số đo mất liên tục hoặc có giá trị bất thường.
Có thể mở rộng bằng biểu đồ lịch sử ngắn, nút tải dữ liệu CSV hoặc màn hình OLED. Nếu triển khai lâu dài, hãy đọc hướng dẫn của nhà sản xuất về vệ sinh, bảo trì và hiệu chuẩn từng cảm biến; riêng các tùy chọn hiệu chỉnh nền của cảm biến CO₂ cần được cấu hình phù hợp với môi trường đặt trạm.

