DHT11 và phiên bản nâng cấp của nó, DHT22 (có độ chính xác cao hơn), là một dạng cảm biến tích hợp. Để có thể đọc dữ liệu từ nó, mạch Microbit phải gửi tín hiệutruy vấn(query). Khi nhận được tín hiện này, cảm biến mới bắt đầu tính toán và gửi dữ liệu trả về cho mạch Microbit. Cũng chính vì lý do này, nếu như mạch Mi- crobit quên gửi tín hiệu truy vấn, dữ liệu mà nó nhận được là dữ liệu cũ và không hợp lệ.
Hình 6.2:Nguyên lý giao tiếp với DHT11
Tín hiệu truy vấn từ Microbit gửi tới cảm biến là 1 xung mức thấp, kéo dài trong 18ms. Sau đó, Microbit sẽ nâng tín hiệu lên mức cao và chờ phản hồi từ DHT11. Sau khoảng 40µs, cảm biến sẽ xác nhận việc nhận lệnh bằng xung 80µs ở mức thấp, theo sau là xung 80µs nhưng ở mức cao. Cuối cùng, 40 bit dữ liệu sẽ được gửi lên Microbit, với bit 0 có hình xung là 50µs mức thấp và 25µs ở mức cao, còn bit 1 có hình xung là 50µs mức thấp và 70µs ở mức cao. Bạn đọc cần lưu ý về đơn vị thời gian cho quá trình giao tiếp này, được minh họa ở hình bên trên.
Sau khi giải mã ra 40 bit dữ liệu, mạch Microbit phải tiếp tục xử lý để lấy ra thông tin cần thiết cho ứng dụng, với 16 bit đầu là thông tin cho độ ẩm, 16 bit tiếp theo là thông tin về nhiệt độ, và 8 bit cuối cùng là thông tin kiểm tra lỗi (40 = 16 + 16 + 8). Rõ ràng, để có thể lập trình xử lý toàn bộ các tác vụ kể trên là không đơn giản. Tuy nhiên nhờ sự hỗ trợ của cộng đồng, rất nhiều thư viện lập trình có sẵn được hỗ trợ để lấy thông tin từ cảm biến DHT11. Trong bài này, chúng ta sẽ sử dụng thư viện NPNBitKit, để lấy dữ liệu từ cảm biến DHT11 và hiển thị lên màn hình LCD kí tự 16x2. Các bước để thêm thư viện NPNBitKit, bạn đọc có thể xem lại hướng dẫn ở bài trước, hoặc nhấn trực tiếp vào đường dẫn chia sẻ dưới đây, với chương trình đã được chúng tôi thêm sẵn thư viện NPNBitKit:
https://makecode.microbit.org/_4gt28KbDJ9HJ