Mục lục:

Cảm biến nhiệt độ mạng gia đình: 7 bước
Cảm biến nhiệt độ mạng gia đình: 7 bước

Video: Cảm biến nhiệt độ mạng gia đình: 7 bước

Video: Cảm biến nhiệt độ mạng gia đình: 7 bước
Video: Cảm Biến Công Nghiệp - Buổi 3_Ch1+2 : Giới Thiệu Các Loại Cảm Biến, Cảm Biến Nhiệt - BKĐN (DUT) 2024, Tháng mười một
Anonim
Cảm biến nhiệt độ mạng gia đình
Cảm biến nhiệt độ mạng gia đình

Bạn cần biết những gì để thực hiện dự án này:

Bạn cần biết về: - Một số kỹ năng về điện tử (hàn)

- Linux

- Arduino IDE

(bạn sẽ cần cập nhật bảng bổ sung trong IDE:

- cập nhật / lập trình bảng ESP thông qua Arduino IDE.

(có một số hướng dẫn hay có sẵn trên web)

Điều này có thể được thực hiện bằng cách sử dụng Arduino Uno hoặc sử dụng FTDI (bộ chuyển đổi USB sang nối tiếp).

Tôi đã sử dụng Uno của mình vì tôi không có bất kỳ cổng nối tiếp nào trên PC cũng như không có FTDI

Bước 1: Đi mua sắm

Đi mua sắm
Đi mua sắm

Bạn sẽ cần gì để biến điều này thành hiện thực?

Đối với cảm biến nhiệt độ và độ ẩm kỹ thuật số:

- Một breadboard hoặc một vật thay thế như pcb nguyên mẫu, thuốc hàn, mỏ hàn…

- Một số dây

- hai người nhảy

- một điện trở 10k Ohm

- một ESP12F (các mô hình khác cũng có thể hoạt động…)

- DHT22 (đắt hơn DHT11 một chút nhưng chính xác hơn)

- 3 pin có thể sạc lại AA và một giá đỡ pin

- một hộp nhựa nhỏ để đưa dự án của bạn vào

- Trong giai đoạn sau, tôi dự định thêm HT7333 với hai tụ điện 10uF giữa bộ pin và ESP

để ổn định điện áp đầu vào (VCC) thành 3,3V được khuyến nghị nhưng cũng để bảo vệ ESP khỏi quá áp.

Đối với phần Mạng:

- Mạng WiFi gia đình của bạn

Đối với phần Máy chủ:

- Bất kỳ hệ thống dựa trên Linux nào (luôn bật!)

Tôi đã sử dụng Raspberry Pi (tôi cũng sử dụng làm máy chủ cho các camera IP ngoài trời của mình.)

- trình biên dịch gcc để biên dịch mã máy chủ của bạn

- gói rrdtool để lưu trữ dữ liệu và tạo đồ thị

- apache (hoặc một máy chủ web khác)

PC hoặc máy tính xách tay yêu thích của bạn có Arduino IDE trên đó.

Bước 2: Thiết lập và nền

Thiết lập và nền
Thiết lập và nền

Trong phiên bản kết nối Wi-Fi này - chưa nói đến IOT - cảm biến nhiệt độ và độ ẩm, tôi đã sử dụng ESP12F, DHT22 và giá đỡ 3 pin AA với pin sạc lại được.

Cứ sau 20 phút, ESP thực hiện một phép đo từ DHT22 và gửi nó đến máy chủ (Raspberry Pi) qua UDP trên mạng WiFi tại nhà của tôi. Sau khi các phép đo được gửi đi, ESP sẽ đi vào giấc ngủ sâu. Điều này có nghĩa là chỉ có Đồng hồ thời gian thực của mô-đun vẫn được cấp nguồn, dẫn đến tiết kiệm năng lượng đáng kinh ngạc. Trong khoảng 5 giây, mô-đun yêu cầu khoảng 100mA, sau đó trong 20 phút ngủ sâu chỉ 150uA.

Tôi không muốn sử dụng bất kỳ dịch vụ dựa trên Internet nào vì dù sao thì tôi cũng có Raspberry Pi, dịch vụ này luôn hoạt động và theo cách này, tôi cũng rất vui khi viết phần máy chủ.

Trên máy chủ (Raspberry Pi chạy Raspbian), tôi đã viết một trình nghe UDP đơn giản (máy chủ) lưu trữ các giá trị vào một RRD đơn giản. (Cơ sở dữ liệu Round Robin sử dụng RRDtool của Tobias Oetiker.)

Ưu điểm của RRDtool là bạn tạo cơ sở dữ liệu của mình một lần và kích thước vẫn giữ nguyên. Có thể bạn không cần phải có một máy chủ cơ sở dữ liệu (như mySQLd) chạy nền. RRDtool cung cấp cho bạn các công cụ để tạo Cơ sở dữ liệu và tạo các biểu đồ.

Máy chủ của tôi tạo các biểu đồ theo chu kỳ và hiển thị mọi thứ trong một trang http rất đơn giản. Tôi có thể tham khảo các bài đọc của mình bằng một trình duyệt đơn giản bằng cách kết nối với máy chủ web Apache2 trên Raspberry Pi!

Cuối cùng, tôi không có FTDI (USB to Serial) nên tôi đã sử dụng Arduino UNO của mình. Bạn cần kết nối TX với RX và GND của ESP và UNO. (Tôi biết, bản năng của bạn có thể cho bạn biết để vượt qua RX và TX … đã thử nó, không hoạt động.)

Tôi đã không thực hiện chuyển đổi mức (UNO: Cao = 5V nhưng ESP về cơ bản là thiết bị 3,3V… Có một số FTDI tốt trên thị trường, nơi bạn thậm chí có thể chọn mức Cao của mình là 5 hoặc 3,3V.

Mạch của tôi được cung cấp bởi 3 pin sạc AA - vì vậy thực tế là 3 X 1,2V. Trong giai đoạn sau, tôi định đặt một HT7333 giữa bộ pin và mạch để an toàn; pin mới được sạc có thể có nhiều hơn 1,2V và ESP phải được cấp nguồn với min. 3V và cực đại. 3,6V. Ngoài ra, nếu tôi quyết định - trong một lúc yếu lòng - để lắp pin Alkaline (3 X 1.5V = 4.5V) thì ESP của tôi sẽ không bị ảnh hưởng!

Tôi cũng đã cân nhắc sử dụng bảng điều khiển Năng lượng mặt trời kích thước 10cm x 10cm, nhưng nó không đáng phải gặp rắc rối. Bằng cách thực hiện 3 phép đo mỗi giờ (về cơ bản là tối đa 3 lần 5 giây @ 100mA và thời gian còn lại là @ 100uA), tôi hy vọng sẽ cung cấp năng lượng cho mạch của mình trong 1 năm trên cùng một loại pin có thể sạc lại.

Bước 3: Phần Arduino - ESP12

Arduino - Phần ESP12
Arduino - Phần ESP12
Arduino - Phần ESP12
Arduino - Phần ESP12

Tôi đã thực hiện dự án này theo các bước khác nhau.

Có một số liên kết giúp bạn nhập ESP12 (hay còn gọi là. ESP8266) vào Arduino IDE. (Tôi đã phải sử dụng phiên bản 2.3.0 thay vì phiên bản mới nhất vì một lỗi có thể đã được giải quyết trong lúc đó…)

Tôi bắt đầu bằng cách kết nối ESP, qua Arduino UNO của tôi (chỉ được sử dụng làm cầu nối giữa PC của tôi qua USB với Serial) với giao diện nối tiếp ESP. Có các Sách hướng dẫn riêng giải thích điều này.

Trong dự án đã hoàn thành của mình, tôi đã để lại các dây để kết nối với Serial trong trường hợp tôi cần khắc phục sự cố.

Sau đó, bạn cần nối dây ESP12 của mình như sau:

Chân ESP…

GND UNO GND

RX UNO RX

TX UNO TX

EN VCC

GPIO15 GND

Ban đầu, tôi đã thử cấp nguồn cho ESP của mình từ 3.3V trên UNO nhưng tôi đã nhanh chóng chuyển sang cấp nguồn cho ESP của mình bằng Bộ nguồn dự phòng nhưng bạn cũng có thể sử dụng bộ pin của mình.

GPIO0 Tôi đã kết nối cái này với một jumper với GND để cho phép nhấp nháy (= lập trình) ESP.

Kiểm tra đầu tiên: để jumper mở và khởi động một màn hình nối tiếp trong Arduino IDE (ở 115200 baud!).

Nguồn điện cho ESP, bạn sẽ thấy một số ký tự rác và sau đó là một thông báo như:

Ai-Thinker Technology Co. Ltd. đã sẵn sàng

Trong chế độ này, ESP hoạt động giống như một modem cũ. Bạn cần sử dụng các lệnh AT.

Hãy thử các lệnh sau:

AT + RST

và hai lệnh sau

AT + CWMODE = 3

VÂNG

AT + CWLAP

Điều này sẽ cung cấp cho bạn danh sách tất cả các mạng WiFi trong khu vực.

Nếu điều này đang hoạt động, bạn đã sẵn sàng cho bước tiếp theo.

Bước 4: Kiểm tra máy khách ESP dưới dạng giao thức thời gian mạng (NTP)

Kiểm tra máy khách ESP dưới dạng giao thức thời gian mạng (NTP)
Kiểm tra máy khách ESP dưới dạng giao thức thời gian mạng (NTP)
Kiểm tra máy khách ESP dưới dạng giao thức thời gian mạng (NTP)
Kiểm tra máy khách ESP dưới dạng giao thức thời gian mạng (NTP)

Trong Arduino IDE, bên dưới Tệp, Ví dụ, ESP8266WiFi, tải NTPClient.

Các chỉnh sửa nhỏ là cần thiết để làm cho nó hoạt động; bạn cần nhập SSID và mật khẩu của mạng WiFi.

Bây giờ đặt jumper, rút ngắn GPIO0 thành GND.

Cấp nguồn cho ESP và tải bản phác thảo lên ESP.

Sau khi biên dịch, quá trình tải lên ESP sẽ bắt đầu. Đèn LED màu xanh lam trên ESP sẽ nhấp nháy nhanh khi mã đang được tải xuống.

Tôi nhận thấy rằng tôi phải thử một chút với việc khởi động lại IDE, khởi động lại ESP trước khi tải lên hoạt động.

Trước khi bạn bắt đầu biên dịch / tải lên bản phác thảo, hãy nhớ đóng bảng điều khiển nối tiếp (= màn hình nối tiếp) vì điều này sẽ ngăn bạn tải lên.

Khi quá trình tải lên thành công, bạn có thể mở lại màn hình nối tiếp để xem ESP lấy thời gian từ Internet một cách hiệu quả.

Tuyệt vời, bạn đã lập trình ESP của mình, kết nối với WiFi của bạn và có thời gian từ Internet.

Bước tiếp theo, chúng tôi sẽ kiểm tra DHT22.

Bước 5: Kiểm tra cảm biến DHT22

Kiểm tra cảm biến DHT22
Kiểm tra cảm biến DHT22

Bây giờ một số dây bổ sung là cần thiết.

Chân DHT… Kết nối chân 1 (bên trái) của cảm biến với VCC (3.3V)

Kết nối chân 2 ESP GPIO5 (DHTPIN trong phác thảo)

Kết nối chân 4 (bên phải) của cảm biến với GROUND

Kết nối một điện trở 10K từ chân 2 (dữ liệu) đến chân 1 (nguồn) của cảm biến.

Tương tự như thử nghiệm NTP, hãy tìm bản phác thảo DHTtester và chỉnh sửa nó theo cách sau:

#define DHTPIN 5 // chúng tôi đã chọn GPIO5 để kết nối với cảm biến # xác định DHTTYPE DHT22 // vì chúng tôi đang sử dụng DHT22 nhưng mã / thư viện này cũng phù hợp với DHT11

Một lần nữa, đóng màn hình nối tiếp, cấp nguồn cho ESP và biên dịch và flash ESP.

Nếu mọi việc suôn sẻ, bạn sẽ thấy các phép đo xuất hiện trong màn hình nối tiếp.

Bạn có thể nghịch ngợm một chút với cảm biến. Nếu bạn thở vào nó, bạn sẽ thấy độ ẩm tăng lên.

Nếu có đèn bàn (không phải đèn LED), bạn có thể chiếu vào cảm biến để làm nóng đèn một chút.

Tuyệt vời! Hai phần lớn của cảm biến hiện đang hoạt động.

Trong bước tiếp theo, tôi sẽ bình luận về mã cuối cùng.

Bước 6: Kết hợp nó lại với nhau…

Kết hợp nó với nhau…
Kết hợp nó với nhau…

Một lần nữa một số hệ thống dây điện bổ sung… điều này là để làm cho DeepSleep trở nên khả thi.

Hãy nhớ rằng, DeepSleep là một chức năng đáng kinh ngạc cho các thiết bị IoT.

Tuy nhiên, nếu cảm biến của bạn được nối cứng cho DeepSleep, có thể khó lập trình lại ESP, vì vậy chúng tôi sẽ tạo một kết nối jumper khác giữa

GPIO16-RST.

Đúng, nó PHẢI là GPIO16, vì đó là GPIO được kết nối cứng để đánh thức thiết bị khi Đồng hồ thời gian thực hoạt động sau DeepSleep!

Trong khi thử nghiệm, bạn có thể quyết định thực hiện DeepSleep trong 15 giây.

Khi tôi đang gỡ lỗi, tôi sẽ di chuyển jumper sang GPIO0 để tôi có thể flash chương trình của mình.

Sau khi tải xuống hoàn tất, tôi sẽ chuyển jumper sang GPIO16 để DeepSleep hoạt động.

Mã cho ESP được gọi là TnHclient.c

Bạn phải thay đổi SSID, Mật khẩu và địa chỉ IP của máy chủ.

Có những dòng mã bổ sung mà bạn có thể sử dụng để khắc phục sự cố hoặc kiểm tra thiết lập của mình.

Bước 7: Phía máy chủ của mọi thứ

Phía máy chủ của mọi thứ
Phía máy chủ của mọi thứ
Phía máy chủ của mọi thứ
Phía máy chủ của mọi thứ

Có một sự hiểu lầm phổ biến rằng UDP không đáng tin cậy và TCP là…

Điều đó thật ngớ ngẩn khi nói rằng một cái búa hữu ích hơn một cái tuốc nơ vít. Chúng chỉ đơn giản là những công cụ hữu ích khác nhau và cả hai đều có công dụng của chúng.

Nhân tiện, nếu không có UDP, Internet sẽ không hoạt động… DNS dựa trên UDP.

Vì vậy, tôi đã chọn UDP vì nó rất nhẹ, dễ dàng và nhanh chóng.

Tôi có xu hướng nghĩ rằng WiFi của tôi rất đáng tin cậy nên máy khách sẽ gửi tối đa 3 gói UDP nếu thông báo "OK!" không được nhận.

Mã C cho TnHserver nằm trong tệp TnHServer.c.

Có một số nhận xét trong mã giải thích nó.

Chúng tôi sẽ cần một số công cụ bổ sung trên máy chủ: rrdtool, apache và có thể là tcpdump.

Để cài đặt rrdtool trên Raspbian, bạn có thể chỉ cần cài đặt gói như sau: apt-get install rrdtool

Nếu bạn cần gỡ lỗi lưu lượng mạng, tcpdump có trong apt-get install tcpdump tiện dụng

Tôi cần một máy chủ web để có thể sử dụng trình duyệt nhằm tham khảo các biểu đồ: apt-get install apache2

Tôi đã sử dụng công cụ này: https://rrdwizard.appspot.com/index.php để nhận lệnh tạo Cơ sở dữ liệu Round Robin. Bạn chỉ cần chạy điều này một lần (nếu bạn làm đúng ngay lần đầu tiên).

rrdtool tạo TnHdatabase.rrd - bắt đầu ngay bây giờ-10 giây

- bước '1200'

'DS: Nhiệt độ: GAUGE: 1200: -20,5: 45,5'

'DS: Độ ẩm: GAUGE: 1200: 0: 100.0'

'RRA: AVERAGE: 0,5: 1: 720'

'RRA: AVERAGE: 0,5: 3: 960'

'RRA: AVERAGE: 0,5: 18: 1600'

Cuối cùng, tôi sử dụng một mục crontab để khởi động lại TnHserver của tôi hàng ngày vào lúc nửa đêm. Tôi chạy TnHserver như một người dùng bình thường (tức là KHÔNG root) như một biện pháp phòng ngừa bảo mật.

0 0 * * * / usr / bin / pkill TnHserver; / home / user / bin / TnHserver> / dev / null 2> & 1

Bạn có thể kiểm tra xem TnHserver có đang chạy hay không bằng cách

$ ps-chính mình | grep TnHserver

và bạn có thể xác minh rằng nó đang lắng nghe các gói trên cổng 7777 bằng cách thực hiện

$ netstat -anu

Kết nối Internet đang hoạt động (máy chủ và được thiết lập)

Proto Recv-Q Gửi-Q Địa chỉ địa phương Địa chỉ nước ngoài Trạng thái

udp 0 0 0.0.0.0:7777 0.0.0.0:*

Cuối cùng CreateTnH_Graphs.sh.txt là một script mẫu để tạo các biểu đồ. (Tôi tạo các tập lệnh dưới dạng thư mục gốc, bạn có thể không muốn làm điều này.)

Sử dụng một trang web rất đơn giản, bạn có thể xem các biểu đồ từ bất kỳ trình duyệt nào trên mạng gia đình của mình.

Đề xuất: