DHT11 / DHT22 là một cảm biến đo độ ẩm và cảm biến nhiệt độ tương đối. Nó cung cấp đầu ra kỹ thuật số được hiệu chỉnh với giao thức 1 dây. Cả hai cảm biến đều không tốn kém. Chúng khá giống nhau với một số khác biệt về thông số kỹ thuật.
DHT22 gần giống với DHT11 nhưng trước đây đo nhiệt độ và độ ẩm với độ chính xác cao hơn và hỗ trợ phạm vi rộng hơn.
Bảng sau liệt kê sự so sánh của cả hai cảm biến DHT.
DHT22 · |
DHT11 · |
|
Nhiệt độ |
-40 đến 80 ºC +/- 0,5ºC |
0 đến 50 ºC +/-2 ºC |
Độ ẩm |
0 đến 100% +/-2% |
20 đến 90% +/-5% |
Độ phân giải |
Độ ẩm: 0.1%Nhiệt độ: 0.1ºC |
Độ ẩm: 1% Nhiệt độ: 1ºC |
Điện áp hoạt động |
3- 6 V DC (nguồn điện trực tiếp có thể từ Raspberry Pi Pico) |
3-5.5 V DC (nguồn điện trực tiếp có thể từ Raspberry Pi Pico) |
Thời gian lấy mẫu |
2 giây |
1 giây |
Đánh giá hiện tại |
$4 đến $10 |
$1 đến $5 |
Kiểu dữ liệu đầu ra |
nổi |
Int |
Sơ đồ chân |
4 chân (giống như DHT11) |
4 chân (giống như DHT22) |
Giá |
5 |
2 |
Như bạn có thể thấy từ bảng so sánh ở trên rằng DHT22 cung cấp phạm vi nhiệt độ và độ phân giải rộng hơn cho nhiệt độ và độ ẩm. Nhưng nó đắt hơn DHT11. Tuy nhiên, DHT11 có thời gian lấy mẫu tốt hơn. Hơn nữa, dải điện áp hoạt động cho cả hai cảm biến gần như và chúng ta có thể cấp nguồn trực tiếp cho các cảm biến này từ các chân nguồn của Raspberry Pi Pico.
Bất kể sự khác biệt ở trên, cả hai cảm biến DHT đều có cùng nguyên lý làm việc và sơ đồ chân giống nhau. Chúng ta có thể sử dụng cùng một tập lệnh MicroPython để đọc các bài đọc về nhiệt độ và độ ẩm bằng cách chọn loại DHT bên trong mã.
Cảm biến DHT được hiệu chuẩn trước. Chúng ta có thể kết nối trực tiếp chúng với Raspberry Pi Pico để có được chỉ số đầu ra của cảm biến. Chúng bao gồm bên trong một cảm biến cảm biến độ ẩm và nhiệt điện trở. Hai thành phần này đo độ ẩm và nhiệt độ.
Hình dưới đây cho thấy sơ đồ sơ đồ chân của cảm biến DHT. Cảm biến DHT bao gồm bốn chân. Nhưng trên các mô-đun DHT chỉ có ba chân tiếp xúc với sơ đồ chân của mô-đun và điện trở kéo lên 10k ohm được kết nối bên trong với chân 2.
Sau đây liệt kê sơ đồ chân của cảm biến DHT và mô tả ngắn gọn của chúng. Số pin bắt đầu từ trái sang phải khi bạn giữ cảm biến từ đầu cuối.
Chân DHT11 / DHT22 |
Kết nối với Raspberry Pi Pico |
1 ( VCC) |
3.3V |
2 (Dữ liệu ra) |
Bất kỳ chân GPIO nào của Raspberry Pi Pico cùng với điện trở kéo lên 10k ohm |
3 (NC) |
Không sử dụng |
4 (GND) |
Mặt đất |
Vcc là chân cung cấp điện. Áp dụng điện áp trong phạm vi từ 3,3 V đến 5,0 V cho chân này
Data Out là chân đầu ra kỹ thuật số. Nó gửi giá trị của nhiệt độ và độ ẩm đo được dưới dạng dữ liệu nối tiếp
N/C không được kết nối
GND: Kết nối chân GND
Bạn sẽ cần các thành phần sau
Quả mâm xôi Pi Pico
DHT11 và DHT22
Bảng bánh mì
Điện trở 10K ohm (không bắt buộc nếu sử dụng phiên bản mô-đun của cảm biến)
Dây nhảy
Kết nối DHT22 với Raspberry Pi Pico cùng với điện trở kéo lên 10K ohm. Sơ đồ kết nối được thể hiện trong hình dưới đây.
Chân đầu tiên cho cả hai cảm biến là chân nguồn điện (Vcc). Kết nối nó với chân 3.3 volt của Raspberry Pi Pico.
Dữ liệu ra là chân mà qua đó chúng tôi lấy mẫu nhiệt độ và độ ẩm từ cảm biến DHT. Kết nối chân này với GPIO2 của Raspberry Pi Pico và cũng kết nối chân dữ liệu với điện trở kéo lên 10k. Nhưng bạn cũng có thể sử dụng bất kỳ chân kỹ thuật số nào của Raspberry Pi Pico.
Một điện trở kéo lên được sử dụng để giữ cho chân dữ liệu cao để giao tiếp thích hợp giữa vi điều khiển và cảm biến. Bạn có thể kiểm tra bảng dữ liệu của DHT11 và DHT22 để biết thêm thông tin về nó. DHT22 còn được biết đến với cái tên AM2302.
Chân thứ ba không được sử dụng
Kết nối chân thứ tư (GND) với chân nối đất của bảng
Bây giờ chúng ta hãy xem xét tập lệnh MicroPython cho DHT11 / DHT22 để có được kết quả đọc cảm biến. Sao chép đoạn mã sau vào tệp main.py và tải tệp main.py lên Raspberry Pi Pico.
Tập lệnh MicroPython này đọc các bài đọc nhiệt độ và độ ẩm từ cảm biến DHT22 và in nó trên bảng điều khiển vỏ MicroPython.
from machine import Pin
from time import sleep
import dht
sensor = dht.DHT22(Pin(2))
while True:
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
print("Temperature: {}°C Humidity: {:.0f}% ".format(temp, hum))
sleep(2)
Đầu tiên, chúng tôi nhập mô-đun Pin, dht và sleep để chúng tôi có thể truy cập các phương thức của nó thông qua các lớp đã xác định của nó.
from machine import Pin
from time import sleep
import dht
Tiếp theo, chúng ta sẽ định nghĩa một đối tượng dht có tên là 'sensor' và gán chân dữ liệu cho nó. Ở đây chúng tôi đang sử dụng cảm biến DHT22 với chân dữ liệu được kết nối tại GPIO2. Nếu sử dụng DHT11, hãy thay thế 'DHT22' bằng 'DHT11' và thay đổi số pin một cách thích hợp.
sensor = dht.DHT22(Pin(2))
Bên trong vòng lặp vô hạn, chúng ta sẽ thu được số đọc nhiệt độ và độ ẩm và lưu nó ở 'nhiệt độ' và 'hum' tương ứng. Chúng sẽ được in trong bảng điều khiển shell sau thời gian trễ 2 giây.
while True:
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
print("Temperature: {}°C Humidity: {:.0f}% ".format(temp, hum))
sleep(2)
Để kiểm tra tập lệnh MicroPython cho DHT22 với Raspberry Pi Pico, hãy tải tệp main.py lên bảng của bạn.
Bạn sẽ thấy các kết quả đọc cảm biến được in trên bảng điều khiển shell sau mỗi hai giây như sau:
Trong phần này, chúng ta sẽ xem cách hiển thị số đọc DHT trên màn hình OLED 0.96 SSD1306 bằng MicroPython và Raspberry Pi Pico.
Đối với màn hình OLED, chúng tôi cũng sẽ cần tải thư viện lên Raspberry Pi Pico.
Để làm điều đó thành công, hãy mở Thonny IDE của bạn với Raspberry Pi Pico được cắm vào hệ thống của bạn. Đi tới Công cụ > Quản lý gói. Điều này sẽ mở ra Trình quản lý gói Thonny.
Tìm kiếm "ssd1306" trong thanh tìm kiếm bằng cách nhập tên của nó và nhấp vào nút 'Tìm kiếm trên PyPI.'
Từ các kết quả tìm kiếm sau, hãy nhấp vào kết quả được đánh dấu bên dưới: Micropython-SSD1306
Cài đặt thư viện này.
Sau một lúc, thư viện này sẽ được cài đặt thành công. Bây giờ chúng tôi đã sẵn sàng để lập trình Raspberry Pi Pico của mình với màn hình OLED.
Chúng tôi sẽ cần các thành phần sau để kết nối Raspberry Pi Pico của chúng tôi với Màn hình OLED và HC-SR04.
Raspberry Pi Pico
DHT11 / DHT22
Màn hình OLED SSD1306
Dây kết nối
Màn hình OLED có 4 thiết bị đầu cuối mà chúng tôi sẽ kết nối với Raspberry Pi Pico. Vì màn hình OLED yêu cầu điện áp hoạt động trong phạm vi 3.3-5V, do đó chúng tôi sẽ kết nối thiết bị đầu cuối VCC với 3.3V, điểm chung với bo mạch và cảm biến. SCL của màn hình sẽ được kết nối với chân SCL của mô-đun và SDA của màn hình sẽ được kết nối với SDA của mô-đun. Mặt bằng của cả ba thiết bị sẽ được tổ chức chung.
Các kết nối giữa ba thiết bị mà chúng tôi đang sử dụng có thể được nhìn thấy bên dưới.
Màn hình OLED SSD1306 |
Raspberry Pi Pico |
VCC |
3.3V |
SDA |
GP0 (I2C0 SDA) |
SCL |
GP1 (I2C0 SCL) |
GND · |
GND · |
DHT11 / DHT22 |
Raspberry Pi Pico |
Chân 1 (VCC) |
3.3V |
Ghim 2 (Ngõ ra dữ liệu) |
GP2 · |
Chân 3 (NC) |
Không sử dụng |
Chân 4 (GND) |
GND · |
Thực hiện theo sơ đồ dưới đây kết nối chúng cho phù hợp.
Raspberry Pi Pico với DHT22 và sơ đồ kết nối OLED
from machine import Pin, I2C
from time import sleep
import dht
from ssd1306 import SSD1306_I2C
sensor = dht.DHT22(Pin(2))
i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000) #initializing the I2C method
oled = SSD1306_I2C(128, 64, i2c)
while True:
oled.fill(0)
sensor.measure()
temp = str(sensor.temperature())
hum = str(sensor.humidity())
oled.text("Temperature",0,0)
oled.text(temp +" C",0,10)
oled.text("Humidity",0,35)
oled.text(hum + " %",0,45)
oled.show()
sleep(2)
Trong phần này, chúng tôi chỉ giải thích phần mã MicroPython được sử dụng để hiển thị các giá trị cảm biến DHT22 trên OLED. Bởi vì phần còn lại của mã giống như chúng ta đã sử dụng trong phần trước để hiển thị các chỉ số cảm biến trên bảng điều khiển shell.
Chúng tôi sẽ nhập ssd1306 là thư viện màn hình OLED mà chúng tôi đã cài đặt trước đó. Điều này sẽ giúp chúng ta truy cập tất cả các chức năng được xác định bên trong nó. Ngoài ra, chúng tôi sẽ nhập lớp Pin và lớp I2C từ mô-đun máy. Điều này là do chúng tôi phải chỉ định chân cho giao tiếp I2C.
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
Tiếp theo, chúng tôi sẽ khởi tạo các chân I2C GPIO cho SCL và SDA tương ứng. Chúng tôi đã sử dụng chân I2C0 SCL và I2C0 SDA.
Chúng ta đã tạo ra một phương thức I2C() lấy bốn tham số. Tham số đầu tiên là kênh I2C mà chúng ta đang sử dụng. Tham số thứ hai chỉ định chân I2C GPIO của bo mạch được kết nối với đường SDA. Tham số thứ ba chỉ định chân I2C GPIO của bo mạch được kết nối với dòng SCL. Tham số cuối cùng là kết nối tần số.
Chúng tôi đang đặt SCL trên chân 1 và SDA trên chân 0.
i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000) #initializing the I2C method
Bây giờ, chúng ta sẽ tạo một đối tượng 'oled' của SSD1306_I2C sử dụng width, height và đối tượng i2c làm tham số.
oled = SSD1306_I2C(128, 64, i2c)
Xóa màn hình OLED với led.fill() thường xuyên.
oled.fill(0)
Cuối cùng, hiển thị văn bản cùng với số đọc nhiệt độ và độ ẩm trên OLED sau mỗi 2 giây.
sensor.measure()
temp = str(sensor.temperature())
hum = str(sensor.humidity())
oled.text("Temperature",0,0)
oled.text(temp +" C",0,10)
oled.text("Humidity",0,35)
oled.text(hum + " %",0,45)
oled.show()
sleep(2)
Cuối cùng, hãy gọi phương thức show() trên phương thức oled để các thay đổi hiển thị trên OLED.
oled.show()