Trang chủ —› Bài giảng chương trình giáo dục phổ thông —› Hướng dẫn lập trình cảm biến DHT11- Kết hợp 2 thư viện Nomarl và Non-Blocking

Hướng dẫn lập trình cảm biến DHT11- Kết hợp 2 thư viện Nomarl và Non-Blocking

20 Tháng Mười Hai,2018 Đăng bởi: M.r Y.C.T

Hướng dẫn lập trình cảm biến DHT11- Y.C.T

Bài viết này sẽ giúp các bạn lập trình đọc tín hiệu từ cảm biến DHT 11 với module Node MCU.

Link thư viện DHT: https://goo.gl/uPm6Nh

DHT11 Là cảm biến nhiệt độ, độ ẩm rất thông dụng hiện nay vì chi phí rẻ và rất dễ lấy dữ liệu thông qua giao tiếp 1-wire ( giao tiếp digital 1-wire truyền dữ liệu duy nhất).

 

Các project hay về DHT.

 

 

 

Nó gồm 2 loại chính như sau:

Loại 4 chân pin:

Loại 3 chân pin:

 

Trong khuôn khổ bài hôm nay, mình sẽ hướng dẫn các bạn dùng con DHT11 3 chân pin nhé, nó là cảm biến rất thông dụng hiện nay vì chi phí rẻ và rất dễ lấy dữ liệu thông qua giao tiếp 1-wire (giao tiếp digital 1-wire truyền dữ liệu duy nhất). Cảm biến được tích hợp bộ tiền xử lý tín hiệu giúp dữ liệu nhận về được chính xác mà không cần phải qua bất kỳ tính toán nào.

Thông số kỹ thuật

  • Điện áp hoạt động: 3V – 5V (DC)
  • Dãi độ ẩm hoạt động: 20% – 90% RH, sai số ±5%RH
  • Dãi nhiệt độ hoạt động: 0°C ~ 50°C, sai số ±2°C
  • Khoảng cách truyển tối đa: 20m
  1. Chuẩn bị

Mọi người chuẩn bị cho mình vài thứ sau nhé

  • Esp8266 ( Loại CP2102 hay CH340 đều được )
  • Cảm biến DHT11
  • Một ít dây cắm

Thư viện 

Thư viện sử dụng cho con Esp8266 này là cực kì quan trọng. Các bạn phải sử dụng đúng thư viện, thì con Esp8266 của bạn mới đọc được cảm biến, nếu không nó sẽ báo lỗi failure liên tục. Mình đã tổng hợp lại 2 thư viện đó là DHT-sensor-library và Adafruit_Sensor. Các bạn tải về, giải nén rồi coppy vào thư mục library với đường dẫn mạcw định là : ” C:\Users\The Sofial\Documents\Arduino\libraries ” nhé. Mình đang dùng Win 10 nên mặc định nó sẽ lưu như vậy.

Link tải 3 thư viện : https://goo.gl/uPm6Nh

 

Kết nối

ESP8266Sensor
3.3VVcc
GNDGND
GPIO04OUT

 

 

 

Code mẫu cho 2 thư viện:

DHT-Nomarl.

#include “DHT.h”

#define DHTTYPE DHT11 // DHT 11

 

const int DHTPin = 4;

// Initialize DHT sensor.

DHT dht(DHTPin, DHTTYPE);

static char celsiusTemp[7];

static char fahrenheitTemp[7];

static char humidityTemp[7];

void setup() {

// put your setup code here, to run once:

// Initializing serial port for debugging purposes

Serial.begin(115200);

delay(10);

dht.begin();

}

 

void loop() {

// put your main code here, to run repeatedly:

// Sensor readings may also be up to 2 seconds ‘old’ (its a very slow sensor)

float h = dht.readHumidity();

// Read temperature as Celsius (the default)

float t = dht.readTemperature();

// Read temperature as Fahrenheit (isFahrenheit = true)

float f = dht.readTemperature(true);

// Check if any reads failed and exit early (to try again).

if (isnan(h) || isnan(t) || isnan(f)) {

Serial.println(“Failed to read from DHT sensor!”);

 

}

else {

// Computes temperature values in Celsius + Fahrenheit and Humidity

float hic = dht.computeHeatIndex(t, h, false); // Chỉ số nhiệt

//dtostrf(hic, 6, 2, celsiusTemp);

float hif = dht.computeHeatIndex(f, h);

//dtostrf(hif, 6, 2, fahrenheitTemp);

//dtostrf(h, 6, 2, humidityTemp);

// You can delete the following Serial.print’s, it’s just for debugging purposes

delay(2000);

Serial.print(“Humidity: “);

Serial.print(h);

Serial.print(” %\t Temperature: “);

Serial.print(t);

Serial.print(” *C “);

Serial.print(f);

Serial.print(” *F\t Heat index: “);

Serial.print(hic);

Serial.print(” *C “);

Serial.println(hif);

 

}

}

 

 

 

Code cho DHT-Non-blocking.

#include <dht_nonblocking.h> // gọi thư viện

 

//#define DHT_SENSOR_TYPE DHT_TYPE_22

//#define DHT_SENSOR_TYPE DHT_TYPE_21

#define DHT_SENSOR_TYPE DHT_TYPE_11

 

static const int DHT_SENSOR_PIN = 4; //Đọc dữ liệu từ DHT22 ở chân A3 trên mạch Arduino

 

DHT_nonblocking dht_sensor(DHT_SENSOR_PIN, DHT_SENSOR_TYPE);

 

void setup()

{

Serial.begin(115200);

Serial.println(“”);

Serial.println(“Arduino.vn!”);

}

 

// Đọc cảm biến sau 1 khoảng thời gian định trước

// Trả về false nếu không đọc được thông số cảm biến hoặc chưa tới thời gian cho phép đọc

// Trả về true nếu đọc được

// static để tạo cái gì đó dùng chung cho chương trình hoặc hàm và khởi tạo 1 lần duy nhất

static bool measure_environment(float* temperature, float* humidity) // Truyền địa chỉ của biến “*”

{

static unsigned long measurement_timestamp = millis(); // Khởi tạo thời gian ban đầu

if (millis() – measurement_timestamp > 2000) // Thời gian cho phép đọc là sau hơn 4s

{

if (dht_sensor.measure(temperature, humidity) == true) // Đọc thông số vào 2 biến và kiểm tra có đọc được không

{

measurement_timestamp = millis();

return (true);

}

}

return (false);

}

 

void loop()

{

float temperature;

float humidity;

// Nhớ phải dùng “&” để truyền địa chỉ của biến vào

if (measure_environment(&temperature, &humidity) == true) {

// In ra màng hình

Serial.print(“Nhiet do: “);

Serial.println(temperature); //Xuất nhiệt độ

Serial.print(“Do am: “);

Serial.println(humidity); //Xuất độ ẩm

Serial.println(); //Xuống hàng

}

}

 

 

 

 

 

 


Notice: Undefined variable: meta_text in /home/lapt0260/public_html/wp-content/themes/lap-trinh/template-parts/posts/content-single.php on line 38

Notice: Undefined variable: category_list in /home/lapt0260/public_html/wp-content/themes/lap-trinh/template-parts/posts/content-single.php on line 38

Notice: WP_Query được gọi với một tham số đã bị loại bỏ kể từ phiên bản 3.1.0! Hãy sử dụng ignore_sticky_posts thay cho caller_get_posts (sẽ sớm bị loại bỏ) in /home/lapt0260/public_html/wp-includes/functions.php on line 4080

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *