Webserver thu thập dữ liệu DHT11 với ESP8266

Ở bài trước chúng ta đã làm quen với việc lấy nội dung trang web thì hôm nay chúng ta sẽ quay trở lại với việc sử dụng ESP8266 đọc dữ liệu nhiệt độ độ ẩm môi trường từ cảm biến DHT11, sau đó sẽ thực hiện lập trình để có thể quan sát được thông tin về nhiệt độ độ ẩm thông qua wifi.

Đọc nhiệt độ độ ẩm với DHT11

Đầu tiên để có thể giao tiếp được với DHT11 thì cần tải thư viện bằng cách chọn Sketch > Include Library > Manage Libraries hoặc bạn có thể tải và cài thủ công thư viện tại đây

dht11_lib

Tiếp theo là kết nối theo sơ đồ tương tự như hình với ESP8266 v1 (dùng GPIO2) và ESP8266 v7/v12 (dùng GPIO5).

Lưu ý: Nguồn cấp cho DHT11 có thể dùng 3.3 – 5V.

esp8266-esp-01-gpio-dht11

Chương trình kiểm tra nhiệt độ và độ ẩm

Sau khi nạp xuống ta quan sát qua terminal sẽ thấy được thông tin như sau

esp8266_dht11_result

Theo dõi nhiệt độ độ ẩm qua mạng Wifi

Ta đã đọc được nhiệt độ và độ ẩm rồi thì làm thế nào để gửi nó lên mạng wifi trong nhà ? Có cần phải tạo web gì không ? Thật may mắn là ESP8266 có thể tạo ra một server và web ở trên địa chỉ sẵn có của nó, ta chỉ cần đăng nhập vào địa chỉ (ví dụ 192.168.1.xx) là có thông tin về nhiệt độ, độ ẩm rồi. Vậy cách làm thế nào, mình sẽ giải thích một số ý chính trong code dưới đây

Trước hết là cần thay đổi chỗ mang_wifipass_wifi thành tên và pass wifi nhà bạn là được.
Tiếp tục là tạo một web server với port là 80 bằng lệnh

Tạo xong rồi ta thực hiện kết nối ESP8266 vào mạng

Sau đó là khởi động server và in địa chỉ IP ra

Trong vòng lặp vô tận chúng ta sẽ thực hiện kiểm tra có client nào kết nối tới không bằng lệnh
WiFiClient client = server.available();  đồng thời đọc nhiệt độ và độ ẩm

Tiếp tục chờ yêu cầu (request) từ client (máy tính hoặc điện thoại khác cùng mạng wifi)

Coi như đã xong bước nhận yêu cầu, giờ là chuẩn bị câu trả lời cho yêu cầu từ client, ở đây ta sẽ tạo ra một trang web HTML sử dụng Bootstrap CSS để tự động reload trang sau mỗi một phút

Cuối cùng là hiển thị nhiệt độ và độ ẩm đọc được từ DHT11 lên và đợi cho tới khi client ngắt kết nối với ESP8266

Kết quả hoạt động tốt khi theo dõi qua laptop và điện thoại

web_dht11

1477802380142_4785

Bạn có thể tham khảo chương trình tại esp8266_dth11 và esp8266_dht11_web

Và các project liên quan tại  ESP8266 Arduino

Kết

Thế kà chúng ta đã thực hiện được giao tiếp với DHT11 để đọc nhiệt độ và độ ẩm, sau đó tạo webserver để gửi dữ liệu đã đọc được khi có yêu cầu từ laptop hoặc điện thoại, đây là cách đơn giản nhất để bạn có thể giám sát được thông tin, chẳng hạn như độ ẩm, nhiệt độ của đất cây trồng chẳng hạn. Cách này vẫn còn bị giới hạn chỉ những client trong cùng một mạng wifi mới có thể quan sát được thông tin. Nhưng không sao, mình sẽ giới thiệu với các bạn cách để bạn ở bất cứ nơi nào cũng có thể xem được thông tin ở những bài sau 😀

 

19 thoughts on “Webserver thu thập dữ liệu DHT11 với ESP8266

  1. chào anh, em điều khiển động cơ bằng tiva c, sau đó em lại muốn dùng 8266 để điều khiển động cơ từ xa thì giưa 8266 và tiva cần giao tiếp gì ạ

    1. Hi em,
      Cái này thì em phải lập trình STM32 giao tiếp với NodeMCU qua lệnh AT nhé, hoặc một cách khác là giao tiếp I2C gửi dữ liệu từ STM32F4 sang NodeMCU

  2. Chào anh ! Cho e hỏi
    + Vì PC hay Smartphone phải cùng 1 mạng wifi với esp nên cách này chỉ hoạt động trong phạm vi wifi đó thôi phải không ạ?
    +”cách để bạn ở bất cứ nơi nào cũng có thể xem được thông tin ở những bài sau ????” là bài nào vậy ạ?
    +Sau khi hiển thị được em muốn lưu vào database thì làm thế nào ạ?
    Cám ơn anh

    1. Hi em, chính xác là như thế đó em, cái này chỉ hoạt động ở mạng cục bộ thôi
      Xem thông tin ở mọi nơi thì anh mới làm bài đơn giản là dùng blynk thôi em
      Muốn lưu database thì em dùng firebase là nhanh nhất nhé.

  3. Minh sử dụng cảm biến đo nhịp tim và huyết áp Max30100, no cũng tương tự như DHT11, nhưng s mình lam theo hướng dẫn trên thì nó không lấy được dữ liệu từ cảm biến.

  4. ad cho e hỏi xíu, em dùng blynk với web server để điều khiển cùng lúc thiết bị nhưng mà code của riêng 2 cái thì hoạt động bình thường, khi trộn code blynk với code webserver chung lại để điều khiển cùng lúc thì nó lại ko connect được, ad có biết vì sao k ạ

Add Comment