Mục lục:

DHT12 (Cảm biến nhiệt độ và độ ẩm giá rẻ i2c), Cách sử dụng dễ dàng nhanh chóng: 14 bước
DHT12 (Cảm biến nhiệt độ và độ ẩm giá rẻ i2c), Cách sử dụng dễ dàng nhanh chóng: 14 bước

Video: DHT12 (Cảm biến nhiệt độ và độ ẩm giá rẻ i2c), Cách sử dụng dễ dàng nhanh chóng: 14 bước

Video: DHT12 (Cảm biến nhiệt độ và độ ẩm giá rẻ i2c), Cách sử dụng dễ dàng nhanh chóng: 14 bước
Video: ĐỌC NHIỆT ĐỘ-ĐỘ ẨM DÙNG ESP32 CAM HIỂN THỊ LCD I2C || TEMPERATURE-HUMIDITY WITH ESP32 CAM LCD I2C 2024, Tháng bảy
Anonim
DHT12 (Cảm biến nhiệt độ và độ ẩm i2c giá rẻ), Sử dụng dễ dàng nhanh chóng
DHT12 (Cảm biến nhiệt độ và độ ẩm i2c giá rẻ), Sử dụng dễ dàng nhanh chóng

Bạn có thể tìm thấy bản cập nhật và các bản cập nhật khác trên trang web của tôi

Tôi thích cảm biến có thể được sử dụng với 2 dây (giao thức i2c), nhưng tôi thích loại rẻ tiền.

Đây là thư viện Arduino và esp8266 dành cho dòng cảm biến nhiệt độ / độ ẩm DHT12 có chi phí rất thấp (dưới 1 đô la) hoạt động với kết nối i2c hoặc một dây.

Rất hữu ích nếu bạn muốn sử dụng esp01 (nếu bạn sử dụng nối tiếp, bạn chỉ có 2 pin) để đọc độ ẩm và nhiệt độ và hiển thị trên i2c LCD.

AI đọc rằng đôi khi có vẻ cần hiệu chuẩn, nhưng tôi có cây này và nhận được giá trị rất giống với DHT22. Nếu bạn đã hiệu chỉnh vấn đề này, hãy mở vấn đề trên github và tôi thêm phần triển khai.

Bước 1: Cách hoạt động của I2c

Cách hoạt động của I2c
Cách hoạt động của I2c

I2C hoạt động với hai dây, SDA (đường dữ liệu) và SCL (dây đồng hồ).

Cả hai dòng này đều là cống hở, nhưng được kéo lên bằng điện trở.

Thông thường có một chủ và một hoặc nhiều nô lệ trên đường dây, mặc dù có thể có nhiều chủ, nhưng chúng ta sẽ nói về điều đó sau.

Cả master và slave đều có thể truyền hoặc nhận dữ liệu, do đó, một thiết bị có thể ở một trong bốn trạng thái sau: master truyền, master nhận, slave truyền, slave nhận.

Bước 2: Thư viện

Bạn có thể tìm thấy thư viện của tôi ở đây.

Tải về

Nhấn vào nút DOWNLOADS ở góc trên cùng bên phải, đổi tên thư mục không nén thành DHT12.

Kiểm tra xem thư mục DHT có chứa DHT12.cpp và DHT12.h không.

Đặt thư mục thư viện DHT thư mục / thư viện / thư mục của bạn.

Bạn có thể cần tạo thư mục con thư viện nếu thư mục đầu tiên của bạn.

Khởi động lại IDE.

Bước 3: Behaivor

Libray này cố gắng mô phỏng hoạt động của các cảm biến thư viện DHT tiêu chuẩn (và sao chép rất nhiều mã) và tôi thêm mã để quản lý i2c olso theo cách tương tự.

Phương pháp này giống với cảm biến thư viện DHT, với một số bổ sung như chức năng điểm sương.

Bước 4: Sử dụng I2c

Để sử dụng với i2c (địa chỉ mặc định và chân SDA SCL mặc định), hàm tạo là:

DHT12 dht12;

và lấy giá trị mặc định cho chân SDA SCL.

(Có thể xác định lại bằng contructor được chỉ định cho esp8266, cần cho ESP-01). hoặc

DHT12 dht12 (uint8_t addressOrPin)

addressOrPin -> địa chỉ

để thay đổi địa chỉ.

Bước 5: Sử dụng một dây

Để sử dụng một dây:

DHT12 dht12 (uint8_t addressOrPin, true)

addressOrPin -> ghim

giá trị boolean là lựa chọn chế độ oneWire hoặc i2c.

Bước 6: Đọc ngầm

Bạn có thể sử dụng Nó với "ẩn", "đọc đơn giản" hoặc "đọc đầy đủ": Ngầm định, chỉ lần đọc đầu tiên thực hiện việc đọc thực sự của cảm biến, lần đọc còn lại sẽ trở thành trong 2 giây. khoảng thời gian là giá trị được lưu trữ của lần đọc đầu tiên.

// Việc đọc cảm biến có 2 giây thời gian trôi qua, trừ khi bạn truyền tham số lực

// Đọc nhiệt độ dưới dạng độ C (mặc định) float t12 = dht12.readTempe Heat (); // Đọc nhiệt độ dưới dạng Fahrenheit (isFahrenheit = true) float f12 = dht12.readTempe Heat (true); // Kết quả đọc của cảm biến cũng có thể 'cũ' lên đến 2 giây (cảm biến rất chậm) float h12 = dht12.readHumidity (); // Tính toán chỉ số nhiệt trong Fahrenheit (mặc định) float hif12 = dht12.computeHeatIndex (f12, h12); // Tính toán chỉ số nhiệt theo độ C (isFahmbleit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Tính điểm sương theo độ F (mặc định) float dpf12 = dht12.dewPoint (f12, h12); // Tính điểm sương theo độ C (isFahbroken = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Bước 7: Đọc đơn giản

Đọc đơn giản để có được trạng thái đã đọc.

// Việc đọc cảm biến có 2 giây thời gian trôi qua, trừ khi bạn truyền tham số lực

bool chk = dht12.read (); // đọc đúng là ok, vấn đề đọc sai

// Đọc nhiệt độ dưới dạng độ C (mặc định)

float t12 = dht12.readTempentic (); // Đọc nhiệt độ dưới dạng Fahrenheit (isFahrenheit = true) float f12 = dht12.readTempe Heat (true); // Kết quả đọc của cảm biến cũng có thể 'cũ' lên đến 2 giây (cảm biến rất chậm) float h12 = dht12.readHumidity (); // Tính toán chỉ số nhiệt trong Fahrenheit (mặc định) float hif12 = dht12.computeHeatIndex (f12, h12); // Tính toán chỉ số nhiệt theo độ C (isFahmbleit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Tính điểm sương theo độ F (mặc định) float dpf12 = dht12.dewPoint (f12, h12); // Tính điểm sương theo độ C (isFahmbleit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Bước 8: Đọc toàn bộ

Đọc đầy đủ để có được một trạng thái được chỉ định.

// Việc đọc cảm biến có 2 giây thời gian trôi qua, trừ khi bạn truyền tham số lực

DHT12:: ReadStatus chk = dht12.readStatus (); Serial.print (F ("\ nRead sensor:")); switch (chk) {case DHT12:: OK: Serial.println (F ("OK")); nghỉ; case DHT12:: ERROR_CHECKSUM: Serial.println (F ("Lỗi kiểm tra")); nghỉ; case DHT12:: ERROR_TIMEOUT: Serial.println (F ("Lỗi hết thời gian chờ")); nghỉ; case DHT12:: ERROR_TIMEOUT_LOW: Serial.println (F ("Lỗi hết thời gian trên tín hiệu thấp, hãy thử đặt kháng pullup cao")); nghỉ; case DHT12:: ERROR_TIMEOUT_HIGH: Serial.println (F ("Lỗi hết thời gian trên tín hiệu thấp, hãy thử đặt kháng pullup thấp")); nghỉ; case DHT12:: ERROR_CONNECT: Serial.println (F ("Lỗi kết nối")); nghỉ; case DHT12:: ERROR_ACK_L: Serial.println (F ("Lỗi AckL")); nghỉ; case DHT12:: ERROR_ACK_H: Serial.println (F ("AckH error")); nghỉ; case DHT12:: ERROR_UNKNOWN: Serial.println (F ("Lỗi không xác định DETECTED")); nghỉ; case DHT12:: NONE: Serial.println (F ("Không có kết quả")); nghỉ; default: Serial.println (F ("Lỗi không xác định")); nghỉ; }

// Đọc nhiệt độ dưới dạng độ C (mặc định)

float t12 = dht12.readTempe Heat (); // Đọc nhiệt độ dưới dạng Fahrenheit (isFahrenheit = true) float f12 = dht12.readTempe Heat (true); // Kết quả đọc của cảm biến cũng có thể 'cũ' lên đến 2 giây (cảm biến rất chậm) float h12 = dht12.readHumidity (); // Tính toán chỉ số nhiệt trong Fahrenheit (mặc định) float hif12 = dht12.computeHeatIndex (f12, h12); // Tính toán chỉ số nhiệt theo độ C (isFahmbleit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Tính điểm sương theo độ F (mặc định) float dpf12 = dht12.dewPoint (f12, h12); // Tính điểm sương theo độ C (isFahbroken = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Bước 9: Sơ đồ kết nối

Với các ví dụ, có sơ đồ kết nối, điều quan trọng là sử dụng điện trở pullup đúng.

Cảm ơn Bobadas, dplasa và adafruit, đã chia sẻ mã trong github (nơi tôi lấy một số mã và ý tưởng).

Bước 10: Arduino: OneWire

Arduino: OneWire
Arduino: OneWire

Bước 11: Arduino: I2c

Arduino: I2c
Arduino: I2c

Bước 12: Esp8266 (D1Mini) OneWire

Esp8266 (D1Mini) OneWire
Esp8266 (D1Mini) OneWire

Bước 13: Esp8266 (D1Mini) I2c

Esp8266 (D1Mini) I2c
Esp8266 (D1Mini) I2c

Bước 14: Cảm ơn

Sân chơi Arduino (https://playground.arduino.cc/Main/DHT12SensorLibrary)

loạt dự án i2c (Bộ sưu tập):

  • Cảm biến nhiệt độ độ ẩm
  • Bộ mở rộng tương tự
  • Bộ mở rộng kỹ thuật số
  • Màn hình LCD

Đề xuất: