Trạm thời tiết tại nhà ESP-Now: 9 bước (có hình ảnh)
Trạm thời tiết tại nhà ESP-Now: 9 bước (có hình ảnh)
Anonim
Trạm thời tiết tại nhà ESP-Now
Trạm thời tiết tại nhà ESP-Now

Tôi đã muốn có một trạm thời tiết tại nhà từ khá lâu và một trạm mà mọi người trong gia đình có thể dễ dàng kiểm tra nhiệt độ và độ ẩm. Ngoài việc theo dõi các điều kiện bên ngoài, tôi cũng muốn giám sát các phòng cụ thể trong nhà cũng như xưởng để xe của mình. Điều đó sẽ cho chúng tôi biết khi nào là thời điểm thích hợp để thoát khí ra khỏi nhà hoặc chạy máy hút ẩm (ở đây mưa rất nhiều trong mùa đông). Những gì tôi đã tạo là một hệ thống cảm biến dựa trên ESP-Now, báo cáo tới một máy chủ web cục bộ mà bất kỳ ai cũng có thể kiểm tra từ máy tính hoặc điện thoại của họ. Đối với điện thoại, tôi đã viết dưới dạng ứng dụng Android đơn giản để làm điều đó thậm chí còn dễ dàng hơn.

Bước 1: Chi tiết thiết kế

Chi tiết thiết kế
Chi tiết thiết kế

Tôi muốn có nhiều trạm cảm biến khác nhau mà tôi có thể đặt ở các vị trí khác nhau và yêu cầu chúng báo cáo lại cho một trạm chính (hoặc trung tâm) sẽ lưu thông tin. Sau khi thử nhiều ý tưởng khác nhau, tôi quyết định sử dụng giao thức ESP-Now của Espressif, vì nó cho phép giao tiếp nhanh chóng trực tiếp giữa các thiết bị. Bạn có thể đọc một chút về ESP-Now tại đây và repo GitHub này là một phần tuyệt vời trong nguồn cảm hứng của tôi.

Hình ảnh đầu tiên cho thấy bố cục của hệ thống. Mỗi cảm biến báo cáo các phép đo của nó tới một thiết bị cổng để chuyển tiếp dữ liệu đến máy chủ chính bằng kết nối nối tiếp có dây cứng. Lý do cho điều này là giao thức ESP-Now không thể hoạt động cùng lúc với kết nối WIFI. Để người dùng truy cập trang web, WIFI sẽ phải được bật mọi lúc và điều đó khiến người dùng không thể sử dụng giao tiếp ESP-Now trên cùng một thiết bị. Mặc dù thiết bị cổng phải là thiết bị dựa trên Espressif (có khả năng ESP-Now), máy chủ chính có thể là bất kỳ thiết bị nào có khả năng chạy một trang web.

Một số trạm cảm biến sẽ hết pin (hoặc pin sạc bằng năng lượng mặt trời) và những trạm khác chỉ cần có nguồn điện lưới. Tuy nhiên, tôi muốn tất cả sử dụng ít năng lượng nhất có thể và đó là lúc mà tính năng "deepsleep" có sẵn cho các thiết bị ESP8266 và ESP32 cực kỳ hữu ích. Các trạm cảm biến sẽ đánh thức định kỳ, thực hiện các phép đo và gửi chúng đến thiết bị cổng và quay trở lại chế độ ngủ trong một khoảng thời gian được lập trình trước. Khoảng thời gian thức của chúng chỉ khoảng 300ms mỗi 5 phút (trong trường hợp của tôi) làm giảm đáng kể mức tiêu thụ điện năng của chúng.

Bước 2: Cảm biến

Cảm biến
Cảm biến
Cảm biến
Cảm biến

Có nhiều cảm biến khác nhau để lựa chọn để đo các thông số môi trường. Tôi quyết định chỉ gắn bó với các cảm biến có khả năng giao tiếp I2C, vì nó cho phép các phép đo nhanh chóng và sẽ hoạt động trên bất kỳ thiết bị nào tôi có. Thay vì làm việc trực tiếp với các vi mạch, tôi đã tìm kiếm các mô-đun sẵn sàng sử dụng có cùng chân cắm để đơn giản hóa thiết kế của mình. Tôi bắt đầu chỉ muốn đo nhiệt độ và độ ẩm và do đó đã chọn mô-đun dựa trên SI7021. Sau đó, tôi muốn có một cảm biến cũng có thể đo áp suất và quyết định thử các mô-đun cảm biến dựa trên BME280. Đối với một số vị trí, tôi thậm chí còn muốn theo dõi mức độ ánh sáng và mô-đun BH1750 là lý tưởng cho việc này như một mô-đun cảm biến riêng biệt. Tôi đã mua các mô-đun cảm biến của mình trên ebay và đây là những mô-đun tôi nhận được:

  • BME280 (GY-BMP / E280), đo nhiệt độ, độ ẩm và áp suất
  • SI7021 (GY-21), đo nhiệt độ và độ ẩm
  • BH1750 (GY-302), đo ánh sáng

Có hai kiểu mô-đun GY-BMP / E280 PCB được tìm thấy. Cả hai đều chia sẻ cùng một chân ra cho các chân từ 1 đến 4. Một mô-đun có hai chân bổ sung, CSB và SDO. Hai chân đó được kết nối trước trên phiên bản 4 chân của mô-đun. Mức của chân SDO xác định địa chỉ I2C (Ground = mặc định là 0x76, VCC = 0x77). Chân CSB phải được kết nối với VCC để chọn giao diện I2C. Tôi thích mô-đun 4 pin hơn, vì nó đã sẵn sàng để sử dụng cho mục đích của tôi.

Nói chung, các mô-đun này rất thuận tiện để sử dụng vì chúng đã được lắp đặt điện trở kéo lên cho các đường truyền thông và tất cả đều chạy trên 3.3V nên tương thích với các bo mạch dựa trên ESP8266. Lưu ý rằng các chân trên các IC cảm biến này thường không chịu được 5V, vì vậy việc giao tiếp chúng trực tiếp với thứ gì đó như Arduino Uno có thể làm hỏng chúng vĩnh viễn.

Bước 3: Trạm cảm biến

Trạm cảm biến
Trạm cảm biến

Như đã đề cập, tất cả các trạm cảm biến sẽ là thiết bị Espressif sử dụng giao thức truyền thông ESP-Now. Từ các dự án và thử nghiệm trước đây, tôi đã có sẵn một số thiết bị khác nhau để tiến hành các thử nghiệm ban đầu và kết hợp chúng vào thiết kế cuối cùng. Tôi đã có trong tay các thiết bị sau:

  • hai mô-đun ESP-01
  • hai bảng phát triển Wemos D1 mini
  • một bảng phát triển Lolin ESP8266
  • một bảng mạch bộ WIFI nối tiếp ESP12E
  • một bảng GOOUUU ESP32 (bảng phát triển 38 chân)

Tôi cũng có bảng phát triển Wemos D1 R2, nhưng có vấn đề với nó khiến nó không cho phép nó thức dậy sau giấc ngủ sâu và như một thiết bị cổng, nó sẽ gặp sự cố và không khởi động lại đúng cách. Tôi đã sửa chữa nó sau đó và nó đã trở thành một phần của dự án mở Cửa nhà để xe. Để "deepsleep" hoạt động, chân RST của ESP8266 phải được kết nối với chân GPIO16, để bộ hẹn giờ ngủ có thể đánh thức thiết bị. Lý tưởng nhất là kết nối này nên được thực hiện bằng một diode Schottky (cực âm cho GPIO16) để thiết lập lại thủ công thông qua kết nối USB-TLL trong khi lập trình vẫn hoạt động. Tuy nhiên, điện trở có giá trị thấp (300-ish Ohm) hoặc thậm chí kết nối dây trực tiếp vẫn có thể thành công.

Mô-đun ESP-01 không cho phép dễ dàng truy cập vào chân GPIO16 và người ta phải hàn trực tiếp vào IC. Đây không phải là một nhiệm vụ đơn giản và tôi không muốn giới thiệu điều này cho tất cả mọi người. Bảng mạch bộ WIFI nối tiếp ESP12E là một mặt hàng mới lạ và cần có một số thay đổi để nó có thể hữu ích cho mục đích của tôi. Các bảng dễ sử dụng nhất là bảng loại nhỏ Wemos D1 và bảng Lolin. Các thiết bị ESP32 không yêu cầu bất kỳ sửa đổi nào để deepsleep hoạt động. Andreas Spiess có một Hướng dẫn hay về điều này.

Bước 4: Trạm cảm biến ESP-01

Trạm cảm biến ESP-01
Trạm cảm biến ESP-01
Trạm cảm biến ESP-01
Trạm cảm biến ESP-01
Trạm cảm biến ESP-01
Trạm cảm biến ESP-01

Trên tất cả các trạm cảm biến, các mô-đun cảm biến được gắn theo chiều dọc để giảm lượng bụi có thể bám vào chúng. Không phải tất cả đều ở trong thùng và tôi có thể không gắn chúng trong thùng. Lý do cho điều này là các thiết bị có thể nóng lên và ảnh hưởng đến các chỉ số nhiệt độ và độ ẩm khi không được thông gió đủ.

Bo mạch ESP-01 rất nhỏ gọn và có ít chân IO kỹ thuật số để làm việc, nhưng nó là đủ cho giao diện I2C. Tuy nhiên, các bảng yêu cầu một sửa đổi phức tạp để cho phép "deepsleep" hoạt động. Trong ảnh được hiển thị, một dây được hàn từ chân góc (GPIO16) đến chân RST trên tiêu đề. Dây tôi sử dụng là dây "sửa chữa" cách điện đường kính 0,1mm. Lớp phủ cách điện tan chảy khi gia nhiệt, vì vậy nó có thể được hàn để sửa chữa các dấu vết, v.v. trong PCB mà vẫn không phải lo lắng về việc tạo ra các điểm chập ở nơi dây tiếp xúc với các thành phần khác. Kích thước của nó gây khó khăn khi làm việc và tôi đã hàn dây này vào vị trí dưới kính hiển vi (phong cách của người yêu thích / sưu tập tem). Hãy nhớ rằng tiêu đề ở phía bên phải có khoảng cách chân 0,1 "(2,54mm). Việc lắp đặt một diode Schottky ở đây sẽ không dễ dàng chút nào, vì vậy tôi quyết định chỉ thử dây một mình và cả hai thiết bị đã chạy hơn một tháng mà không có bất kỳ vấn đề.

Các mô-đun đã được cài đặt trên hai bảng nguyên mẫu mà tôi đã tạo. Một (# 1) là bảng lập trình cũng cho phép cài đặt và kiểm tra mô-đun I2C, trong khi (# 2) là bảng phát triển / kiểm tra cho các thiết bị I2C. Đối với bo mạch đầu tiên, tôi đã hàn với nhau một đầu nối USB nam cũ và một PCB nhỏ để cấp nguồn trực tiếp cho thiết bị từ bộ chuyển đổi gắn tường USB. Thiết bị còn lại có giắc cắm DC thông thường được sửa đổi để phù hợp với đầu cắm của thiết bị đầu cuối vít và cũng được cấp nguồn qua bộ chuyển đổi trên tường.

Sơ đồ cho thấy chúng được kết nối như thế nào và cách thức hoạt động của lập trình viên. Tôi không có bất kỳ mô-đun ESP-01 nào khác, vì vậy tôi chưa có bất kỳ nhu cầu nào ngay lập tức cho lập trình viên. Trong tương lai, tôi có thể sẽ làm một PCB cho họ. Cả hai bo mạch này đều được lắp đặt mô-đun cảm biến SI7021 vì tôi không quan tâm đến việc đo áp suất ở những vị trí đó.

Bước 5: Trạm cảm biến bộ WIFI nối tiếp ESP 12E

Trạm cảm biến bộ WIFI nối tiếp ESP 12E
Trạm cảm biến bộ WIFI nối tiếp ESP 12E
Trạm cảm biến bộ WIFI nối tiếp ESP 12E
Trạm cảm biến bộ WIFI nối tiếp ESP 12E

Bo mạch Bộ công cụ WIFI nối tiếp ESP12E không nhằm mục đích phát triển nhiều mà chỉ để giới thiệu những gì có thể làm được với thiết bị này. Tôi đã mua nó từ lâu để tìm hiểu một chút về lập trình ESP8266 và cuối cùng quyết định sử dụng nó mới. Tôi đã loại bỏ tất cả các đèn LED đã được cài đặt để trình diễn và thêm một tiêu đề lập trình USB cũng như một tiêu đề I2C phù hợp với các mô-đun tôi sử dụng. Nó có một điện trở ảnh CdS được kết nối với chân đầu vào tương tự của nó và tôi quyết định để nó ở đó. Đơn vị cụ thể này sẽ giám sát xưởng để xe của tôi và cảm biến ảnh mà nó có đủ để cho tôi biết nếu đèn đã vô tình bật sáng. Đối với phép đo ánh sáng, tôi đã chuẩn hóa các số đọc để cung cấp cho tôi sản lượng phần trăm và bất kỳ thứ gì vượt quá “5” vào ban đêm có nghĩa là đèn được bật hoặc cửa vào nhà không được đóng đúng cách. Các chân RST và GPIO16 được dán nhãn rõ ràng trên PCB và diode Schottky kết nối chúng được lắp ở mặt dưới của PCB. Nó được cấp nguồn thông qua bảng nối tiếp USB được cắm trực tiếp vào bộ sạc tường USB. Tôi có phần bổ sung của các bảng nối tiếp USB này và không cần cái này ngay bây giờ.

Tôi đã không tạo một sơ đồ cho bảng này và nói chung không khuyên bạn nên mua một cái để sử dụng cho mục đích này. Các bảng Wemos D1 Mini phù hợp hơn nhiều và sẽ được thảo luận tiếp theo. Mặc dù, nếu bạn có một trong những điều này và cần một số lời khuyên, tôi rất sẵn lòng trợ giúp.

Bước 6: Trạm cảm biến mini D1

D1 Trạm cảm biến mini
D1 Trạm cảm biến mini
D1 Trạm cảm biến mini
D1 Trạm cảm biến mini
D1 Trạm cảm biến mini
D1 Trạm cảm biến mini

Loại bảng phát triển ESP8266 của Wemos D1 Mini là loại tôi thích sử dụng và nếu phải làm lại, tôi sẽ chỉ sử dụng chúng. Chúng có một số lượng lớn các chân IO có thể truy cập được, có thể được lập trình trực tiếp thông qua Arduino IDE và vẫn khá nhỏ gọn. Chân D0 là GPIO16 trên các bo mạch này và việc kết nối một diode Schottky khá dễ thực hiện. Sơ đồ cho thấy cách tôi nối các bo mạch này và cả hai đều sử dụng mô-đun cảm biến BME2808.

Một trong hai bảng dùng để theo dõi thời tiết bên ngoài và chạy bằng pin năng lượng mặt trời. Một bảng điều khiển năng lượng mặt trời 165mm x 135mm (6V, 3,5W) được kết nối với mô-đun sạc pin Li-ion TP4056 (xem Sơ đồ thiết lập trạm cảm biến pin được cung cấp năng lượng mặt trời). Mô-đun sạc cụ thể này (03962A) có mạch bảo vệ pin cần thiết nếu (gói) pin không có. Pin Li-ion được tái chế từ một bộ pin máy tính xách tay cũ và nó vẫn có thể sạc đủ để chạy bo mạch D1 Mini, đặc biệt là khi bật chế độ ngủ sâu. Bảng được đặt trong một hộp nhựa để giữ an toàn cho nó khỏi các yếu tố. Tuy nhiên, để bên trong tiếp xúc với nhiệt độ và độ ẩm bên ngoài, hai lỗ đường kính 25mm đã được khoan ở hai phía đối diện và được phủ (từ bên trong) bằng vải phong cảnh màu đen. Vải được thiết kế để cho phép hơi ẩm xâm nhập và do đó có thể đo được độ ẩm. Ở một đầu của vỏ bọc, một lỗ nhỏ được khoan và một cửa sổ bằng nhựa trong suốt được lắp đặt. Đây là nơi đặt mô-đun cảm biến ánh sáng BH1750. Toàn bộ thiết bị được đặt ngoài trời trong bóng râm (không phải ánh nắng trực tiếp) với cảm biến ánh sáng hướng ra ngoài trời. Nó đã chạy bằng pin năng lượng mặt trời trong gần 4 tuần trong thời tiết mùa đông có mưa / nhiều mây của chúng tôi ở đây.

Bước 7: Gateway và Webserver

Gateway và Webserver
Gateway và Webserver
Gateway và Webserver
Gateway và Webserver
Gateway và Webserver
Gateway và Webserver

Bo mạch Lolin NodeMCU V3 (ESP8266) được sử dụng cho thiết bị ESP-Now Gateway và một ESP32 (bo mạch GOOUUU) được sử dụng cho Webserver. Hầu như bất kỳ bo mạch ESP8266 hoặc thậm chí là ESP32 nào cũng có thể đóng vai trò là thiết bị cổng vào, đây chỉ đơn giản là bo mạch mà tôi còn "sót lại" sau khi tôi sử dụng tất cả các bo mạch khác mà tôi có.

Tôi đã sử dụng bảng ESP32 vì tôi cần một bảng có khả năng tính toán cao hơn một chút để thu thập dữ liệu, sắp xếp, lưu vào bộ nhớ và chạy máy chủ web. Trong tương lai, nó cũng có thể có cảm biến riêng và màn hình hiển thị cục bộ (OLED). Để lưu trữ, thẻ SD đã được sử dụng với một bộ điều hợp tùy chỉnh. Tôi đã sử dụng bộ chuyển đổi thẻ nhớ microSD sang SD thông thường và hàn một đầu cắm 7 chân đực (0,1 ) vào các tiếp điểm được mạ. Tôi đã làm theo lời khuyên từ GitHub này để tạo kết nối.

Thiết lập tạo mẫu (với dây Dupont) không bao gồm mô-đun cảm biến, nhưng PCB hoàn thiện mà tôi thiết kế cho phép tạo ra một cũng như màn hình OLED nhỏ. Chi tiết về cách tôi thiết kế PCB đó là một phần của một thiết bị có thể hướng dẫn khác.

Bước 8: Phần mềm

Phần mềm
Phần mềm

Thiết bị ESP8266 (ESP-NOW)

Phần mềm cho tất cả các thiết bị được viết bằng Arduino IDE (v1.87). Mỗi trạm cảm biến về cơ bản chạy mã giống hệt nhau. Chúng chỉ khác nhau ở chỗ chân nào được sử dụng cho giao tiếp I2C và chúng được kết nối với mô-đun cảm biến nào. Quan trọng nhất là chúng gửi gói dữ liệu đo lường giống hệt nhau đến trạm ESP-Now Gateway, bất kể chúng có cùng cảm biến hay không. Điều này có nghĩa là một số trạm cảm biến sẽ điền các giá trị giả cho các phép đo áp suất và mức ánh sáng nếu chúng không có cảm biến để cung cấp giá trị thực. Mã cho mỗi trạm và cổng được điều chỉnh từ các ví dụ của Anthony Elder trên GitHub này.

Mã thiết bị cổng sử dụng SoftwareSerial để giao tiếp với máy chủ web, vì ESP8266 chỉ có một UART phần cứng hoạt động đầy đủ. Chạy ở tốc độ truyền tối đa 9600, nó có vẻ khá đáng tin cậy và quá đủ để gửi các gói dữ liệu tương đối nhỏ này. Thiết bị cổng cũng được lập trình với một địa chỉ MAC riêng. Lý do cho điều này là vì nếu nó cần thay thế, thì không phải tất cả các trạm cảm biến đều phải được lập trình lại với địa chỉ MAC của người nhận mới.

ESP32 (Máy chủ web)

Mỗi trạm cảm biến gửi gói dữ liệu của nó đến thiết bị cổng để chuyển tiếp gói dữ liệu đó đến máy chủ web. Cùng với gói dữ liệu, địa chỉ MAC của trạm cảm biến cũng được gửi để nhận dạng từng trạm. Máy chủ web có một bảng "tra cứu" để xác định vị trí của từng cảm biến và sắp xếp dữ liệu cho phù hợp. Khoảng thời gian giữa các phép đo được đặt thành 5 phút cộng với một yếu tố ngẫu nhiên để tránh các cảm biến "va chạm" với nhau khi gửi đến thiết bị cửa ngõ.

Bộ định tuyến WIFI gia đình được đặt để phân bổ địa chỉ IP cố định cho máy chủ web khi nó kết nối với WIFI. Đối với tôi, đó là 192.168.1.111. Nhập địa chỉ đó vào bất kỳ trình duyệt nào sẽ kết nối với máy chủ web của trạm thời tiết miễn là người dùng ở trong phạm vi WIFI của (và kết nối với) mạng gia đình. Khi người dùng kết nối với trang web, máy chủ web sẽ phản hồi bằng một bảng các phép đo và bao gồm thời gian của phép đo cuối cùng của mỗi cảm biến. Bằng cách này nếu một trạm cảm biến trở nên không đáp ứng, người ta có thể thấy điều đó từ bảng nếu số đọc cũ hơn 5-6 phút.

Dữ liệu được lưu trong các tệp văn bản riêng lẻ trên thẻ SD và chúng cũng có thể được tải xuống từ trang web. Nó có thể được nhập vào Excel hoặc bất kỳ ứng dụng nào khác để vẽ dữ liệu

Ứng dụng Android

Để giúp xem thông tin thời tiết địa phương trên điện thoại thông minh dễ dàng hơn, tôi đã tạo một Ứng dụng Android tương đối bằng Android Studio. Nó có sẵn trên trang GitHub của tôi ở đây. Nó sử dụng lớp webview để tải trang web từ máy chủ và chẳng hạn như chức năng hạn chế. Nó không có khả năng tải xuống các tệp dữ liệu và tôi không cần những tệp đó trên điện thoại của mình.

Bước 9: Kết quả

Kết quả
Kết quả

Cuối cùng, đây là một số kết quả từ trạm thời tiết tại nhà của tôi. Dữ liệu được tải xuống trên máy tính xách tay và được vẽ trong Matlab. Tôi đã đính kèm các tập lệnh Matlab của mình và bạn cũng có thể chạy chúng trong GNU Octave. Cảm biến ngoài trời đã chạy bằng pin năng lượng mặt trời được gần 4 tuần và chúng tôi hiếm khi có mặt trời vào thời điểm này trong năm. Đến nay mọi thứ vẫn hoạt động tốt và mọi người trong gia đình có thể tự tra cứu tình hình thời tiết chứ không phải hỏi tôi lúc này!