Giao Tiếp Cảm Biến DHT11 Với NodeMCU ESP8266 - Điện Tử Việt

Facebook Twitter Youtube Đăng nhập Tham gia Đăng nhập Hoan nghênh!đăng nhập vào tài khoản của bạn Tài khoản mật khẩu của bạn Quên mật khẩu? Tạo một tài khoản Đăng kí Hoan nghênh!Đăng ký email của bạn Tài khoản Mật khẩu đã được gửi vào email của bạn. Khôi phục mật khẩu Khởi tạo mật khẩu email của bạn TÌM KIẾM Thứ sáu, 22 Tháng mười một, 2024
  • Đăng nhập/Đăng ký
Facebook Twitter Youtube Đăng nhập Đăng nhập tài khoản Tài khoản mật khẩu của bạn Forgot your password? Get help Tạo một tài khoản Tạo một tài khoản Chào mừng bạn Đăng ký tài khoản email của bạn Tài khoản Mật khẩu đã được gửi vào email của bạn. Khôi phục mật khẩu Khởi tạo mật khẩu email của bạn Mật khẩu đã được gửi vào email của bạn. Điện Tử Việt Trang chủ Ứng dụng IoT - Internet of Things Giao tiếp cảm biến DHT11 với NodeMCU ESP8266
  • Ứng dụng
  • IoT - Internet of Things
  • ESP8266
FacebookTwitterPinterestWhatsApp Giao tiếp DHT11 với NodeMCU ESP8266

Trong bài viết này, tôi sẽ hướng dẫn các bạn tạo một web server độc lập với mô-đun ESP8266 để hiển thị nhiệt độ và độ ẩm từ cảm biến DHT11 hoặc DHT22 bằng cách sử dụng Arduino IDE. Web server mà bạn xây dựng có thể được truy cập bởi bất kỳ thiết bị nào có trình duyệt trên mạng cục bộ của bạn.

Chuẩn bị

Phần cứng

  • NodeMCU ESP8266
  • Cảm biến DHT11
  • Cáp USB
  • Dây cắm Breadboard

Phần mềm

Arduino IDE

Sơ đồ nguyên lý

Sơ đồ kết nối DHT11 và ESP8266

  • Chân Vcc của cảm biến DHT11 được kết nối với chân 3.3V của ESP8266
  • Chân GND của cảm biến DHT11 được kết nối với chân GND của ESP8266
  • Ngõ ra của cảm biến DHT11 được kết nối với chân GPIO5 của ESP8266.

Chương trình

#include <ESP8266WiFi.h>

#include “DHT.h”

#define DHTTYPE DHT11

const char* ssid = “ten-wifi”;

const char* password = “password-wifi”;

WiFiServer server(80);

const int DHTPin = 5;

DHT dht(DHTPin, DHTTYPE);

static char celsiusTemp[7];

static char fahrenheitTemp[7];

static char humidityTemp[7];

void setup()

{

Serial.begin(115200);

delay(10);

dht.begin();

Serial.println();

Serial.print(“Dang ket noi den mang… “);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED)

{

delay(500);

Serial.print(“.”);

}

Serial.println(“”);

Serial.println(“Da ket noi WiFi”);

server.begin();

Serial.println(“Web server dang khoi dong. Vui long doi dia chi IP…”);

delay(1000);

Serial.println(WiFi.localIP());

}

void loop()

{

WiFiClient client = server.available();

if (client)

{

Serial.println(“Co client moi”);

boolean blank_line = true;

while (client.connected())

{

if (client.available())

{

char c = client.read();

if (c == ‘\n’ && blank_line)

{

float h = dht.readHumidity();

float t = dht.readTemperature();

float f = dht.readTemperature(true);

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

{

Serial.println(“Khong the doc du lieu tu cam bien DHT!”);

strcpy(celsiusTemp, “Failed”);

strcpy(fahrenheitTemp, “Failed”);

strcpy(humidityTemp, “Failed”);

}

else

{

float hic = dht.computeHeatIndex(t, h, false);

dtostrf(hic, 6, 2, celsiusTemp);

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

dtostrf(hif, 6, 2, fahrenheitTemp);

dtostrf(h, 6, 2, humidityTemp);

}

client.println(“HTTP/1.1 200 OK”);

client.println(“Content-Type: text/html”);

client.println(“Connection: close”);

client.println();

client.println(“<!DOCTYPE HTML>”);

client.println(“<html>”);

client.println(“<h1>ESP8266 & DHT11</h1>”);

client.println(“<head></head><body><h2>Nhiet do va do am</h2><h3>Nhiet do theo do C: “);

client.println(celsiusTemp);

client.println(“*C</h3><h3>Nhiet do theo do F: “);

client.println(fahrenheitTemp);

client.println(“*F</h3><h3>Do am: “);

client.println(humidityTemp);

client.println(“%</h3><h3>”);

client.println(“<h2>dientuadenz.com</h2>”);

client.println(“</body></html>”);

break;

}

if (c == ‘\n’)

{

blank_line = true;

}

else if (c != ‘\r’)

{

blank_line = false;

}

}

}

delay(1);

client.stop();

Serial.println(“Ngat ket noi client.”);

}

}

Giải thích chương trình

Chúng ta thêm thư viện ESP8266Wifi.h để cung cấp cho ESP8266 các công việc WiFi cụ thể và chúng ta sử dụng thư viện này để kết nối với mạng. Ngoài ra, chúng ta còn thêm thư viện DHT.h, cho phép chúng ta đọc dữ liệu về nhiệt độ và độ ẩm từ cảm biến.

#include <ESP8266WiFi.h>

#include “DHT.h”

Khai báo loại cảm biến DHT mà chúng ta đang sử dụng.

#define DHTTYPE DHT11

Nhập tên tên và mật khẩu WiFi của bạn.

const char* ssid = “SERVER NAME”;

const char* password = “SERVER PASSWORD”;

Khai báo web server trên cổng 80. Cổng 80 là cổng mặc định, web server “lắng nghe” và nhận dữ liệu từ máy khách (web client).

WiFiServer server(80);

DHTPin là một số nguyên không đổi, các hằng số (const) không thay đổi trong suốt chương trình. DHTPin được nối với chân GPIO05 (D1) của ESP8266 và khởi tạo cảm biến DHT.

const int DHTPin = 5;

DHT dht(DHTPin, DHTTYPE);

Khai báo các biến tạm thời với kiểu static char cho nhiệt độ và độ ẩm.

static char celsiusTemp[7];

static char fahrenheitTemp[7];

static char humidityTemp[7];

Đoạn chương trình nằm trong hàm setup sẽ chỉ chạy một lần trong khi chạy chương trình.

Đây là đoạn chương trình trong hàm setup, nó sẽ kết nối với mạng WiFi và cũng khởi tạo giao tiếp nối tiếp để gỡ lỗi và ghi nhật ký với tốc độ baud là 115200.

void setup() {

Serial.begin(115200);

delay(10);

dht.begin();

Kết nối thực sự với WiFi được khởi tạo bằng cách sử dụng các câu lệnh bên dưới.

Serial.println();

Serial.print(“Dang ket noi den mang… “);

Serial.println(ssid);

WiFi.begin(ssid, password);

Quá trình kết nối có thể mất vài giây. Vòng lặp While () kiểm tra kết nối mô-đun ESP8266 với WiFi. Nếu nó được kết nối với WiFi thì trên serial monitor sẽ hiển thị thông báo “Da ket noi WiFi”, ngược lại thì các dấu chấm (….) sẽ hiển thị trên serial monitor.

while (WiFi.status() != WL_CONNECTED)

{

delay(500);

Serial.print(“.”);

}

Serial.println(“”);

Serial.println(“Da ket noi WiFi”);

Chương trình sẽ in địa chỉ IP của mô-đun ESP8266. Địa chỉ IP này được cung cấp bởi server DHCP chạy trên bộ định tuyến WiFi. Để truy cập nó, chúng ta cần kết nối hệ thống của chúng ta với cùng một mạng WiFi (hệ thống của chúng ta sẽ nhận một địa chỉ IP khác từ server DHCP của bộ định tuyến) và chúng ta cần nhập địa chỉ IP của ESP8266 vào trong trình duyệt của hệ thống chúng ta.

server.begin();

Serial.println(“Web server dang khoi dong. Vui long doi dia chi IP…”);

delay(1000);

Serial.println(WiFi.localIP()); }

Đặt đoạn code chính của bạn vào hàm void loop () để chạy liên tục.

Chờ đợi và kiểm tra để một client được kết nối.

Lưu ý: Client chính là trình duyệt. Khi chúng ta truy cập địa chỉ IP của ESP8266 trong trình duyệt thì chính là gửi yêu cầu đến web server lắng nghe trên cổng TCP 80.

void loop() {

WiFiClient client = server.available();

Nếu có client mới, biến Boolean ‘client’ sẽ là đúng và chúng ta tiến hành xử lý yêu cầu.

if (client)

{

Serial.println(“Co client moi”);

boolean blank_line = true;

while (client.connected())

{

if (client.available())

{

char c = client.read();

Nếu client được kết nối thì đọc độ ẩm, nhiệt độ bằng độ C và độ F.

if (c == ‘\n’ && blank_line)

{

float h = dht.readHumidity();

float t = dht.readTemperature();

float f = dht.readTemperature(true);

Kiểm tra nếu đọc dữ liệu không thành công thì kết thúc sớm. Nếu đọc dữ liệu từ cảm biến thất bại thì đưa ra thông báo “Khong the doc du lieu tu cam bien DHT!”.

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

{

Serial.println(“Khong the doc du lieu tu cam bien DHT!”);

strcpy(celsiusTemp,”Failed”);

strcpy(fahrenheitTemp, “Failed”);

strcpy(humidityTemp, “Failed”);

}

Nếu việc đọc dữ liệu từ cảm biến thành công, thì sẽ tính và hiển thị các giá trị nhiệt độ theo độ C, độ F và độ ẩm.

else

{

float hic = dht.computeHeatIndex(t, h, false);

dtostrf(hic, 6, 2, celsiusTemp);

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

dtostrf(hif, 6, 2, fahrenheitTemp);

dtostrf(h, 6, 2, humidityTemp);

}

Chương trình HTML để tạo một trang web hiển thị giá trị nhiệt độ và độ ẩm.

client.println(“HTTP/1.1 200 OK”);

client.println(“Content-Type: text/html”);

client.println(“Connection: close”);

client.println();

client.println(“<!DOCTYPE HTML>”);

client.println(“<html>”);

client.println(“<h1>ESP8266 & DHT11</h1>”);

client.println(“<head></head><body><h2>Nhiet do va do am</h2><h3>Nhiet do theo do C: “);

client.println(celsiusTemp);

client.println(“*C</h3><h3>Nhiet do theo do F: “);

client.println(fahrenheitTemp);

client.println(“*F</h3><h3>Do am: “);

client.println(humidityTemp);

client.println(“%</h3><h3>”);

client.println(“<h2>dientuadenz.com</h2>”);

client.println(“</body></html>”);

break;

}

if (c == ‘\n’)

{

blank_line = true;

}

else if (c != ‘\r’)

{

blank_line = false;

}

}

}

delay(1);

client.stop();

Serial.println(“Ngat ket noi client.”);

}

}

Truy cập web server

Sau khi nạp chương trình, bạn hãy mở serial monitor với tốc độ baud là 115200. Và nhấn nút RESET trên NodeMCU. Nếu mọi thứ đều ổn thì bạn sẽ thấy địa chỉ IP động thu được từ bộ định tuyến của bạn.

serial monitor

Tiếp theo, bạn hãy copy địa chỉ IP được hiển thị trên serial monitor và dán vào trình duyệt web. ESP8266 NodeMCU sẽ cung cấp một trang web hiển thị nhiệt độ và độ ẩm tương đối như hình bên dưới.

hiển thị nhiệt độ và độ ẩm trên web

Kết luận

Trong dự án này, chúng ta sử dụng cảm biến DHT11 để theo dõi nhiệt độ và độ ẩm của nơi nó được đặt. Trái tim của dự án là ESP8266 WiFi SoC. ESP8266 được lập trình như một máy chủ web chạy trên cổng HTTP mặc định 80. Khi nhận được yêu cầu từ máy khách (trình duyệt web), nó sẽ đọc dữ liệu từ cảm biến DHT11 và gửi phản hồi sẽ được hiển thị trong trình duyệt.

BÀI VIẾT LIÊN QUANXEM THÊM

Giao tiếp màn hình OLED SSD1306 0.96 inch với ESP8266 NodeMCU

Giao tiếp màn hình OLED SSD1306 0.96 với ESP8266 NodeMCU theo chuẩn I2C

Giới thiệu module esp32

Giới thiệu module ESP32

Cơ bản về Node RED

Node RED là gì? Những kiến thức cơ bản về Node-RED

BÌNH LUẬN Hủy trả lời

Vui lòng nhập bình luận của bạn Vui lòng nhập tên của bạn ở đây Bạn đã nhập một địa chỉ email không chính xác! Vui lòng nhập địa chỉ email của bạn ở đây

Lưu tên, email và trang web của tôi trong trình duyệt này cho lần tiếp theo tôi nhận xét.

Δ

VPS TỐT NHẤT

Chào các bạn! Website này được tạo ra nhằm mục đích chia sẽ miễn phí những kiến thức liên quan đến lĩnh vực điện tử và IoT. Tôi rất mong nhận được những ý kiến đóng góp của bạn đọc để website ngày càng phát triển và được nhiều người biết đến. Cảm ơn sự quan tâm của các bạn.Liên hệ chúng tôi: [email protected] Facebook Twitter Youtube

BÀI VIẾT GẦN ĐÂY

  • Giao tiếp module điều khiển động cơ bước TMC2208 với Arduino
  • Giới thiệu IC 74LS192 – Hoạt động và ứng dụng
  • Giới thiệu IC 74LS76 – Ứng dụng và hoạt động
  • Top 5 xu hướng công nghệ hàng đầu năm 2023
  • Download phần mềm Fritzing

KÊNH ĐIỆN TỬ VIỆT

© Bản quyền thuộc về Điện Tử Việt

Từ khóa » Esp8266 Với Dht11