Mục lục:

Giám sát nhà Raspberry Pi với Dropbox: 7 bước
Giám sát nhà Raspberry Pi với Dropbox: 7 bước

Video: Giám sát nhà Raspberry Pi với Dropbox: 7 bước

Video: Giám sát nhà Raspberry Pi với Dropbox: 7 bước
Video: Tự làm bộ giám sát tải tiêu thụ điện, nhiệt độ và điều khiển relay qua Wifi, sử dụng Esp8266, BLYNH. 2024, Tháng mười một
Anonim
Giám sát nhà Raspberry Pi với Dropbox
Giám sát nhà Raspberry Pi với Dropbox

Hướng dẫn này sẽ chỉ cho bạn cách tạo một hệ thống giám sát nhà đơn giản và có thể mở rộng bằng cách sử dụng Raspberry Pi, webcam, một vài thành phần điện và tài khoản Dropbox của bạn. Hệ thống hoàn thiện sẽ cho phép bạn yêu cầu từ xa và xem hình ảnh từ webcam của mình trong khi cũng sử dụng cảm biến nhiệt độ kỹ thuật số có sẵn để theo dõi nhiệt độ của ngôi nhà của bạn qua internet, tất cả đều sử dụng Dropbox.

Đây là dự án đầu tiên tôi nghĩ ra sau khi nhận được Raspberry Pi 2 model B. Mục đích của tôi là tạo ra một hệ thống giám sát dựa trên Python mà tôi có thể kiểm soát và nhận dữ liệu từ internet. Mặc dù có nhiều cách khác nhau để thực hiện việc này, tôi quyết định sử dụng Dropbox làm giao diện giữa Pi và Internet vì chúng có một API Python đơn giản cho phép bạn tải lên, sửa đổi và tìm kiếm các tệp trong các thư mục cụ thể bằng cách sử dụng một vài dòng mã số.

Tôi cũng muốn giải pháp của mình nhẹ và đơn giản, và tránh làm lộn xộn Pi của tôi với các thư viện và chương trình không cần thiết. Thành phần phần mềm của dự án này bao gồm một tập lệnh Python duy nhất, có nghĩa là bạn có thể tiếp tục sử dụng Pi của mình như bình thường, ngay cả khi hệ thống giám sát đang chạy.

Đối với dự án này, bạn sẽ cần:

Một Raspberry Pi. Bất kỳ mô hình nào cũng nên hoạt động, tôi đã sử dụng bộ khởi động tất cả trong một, nhưng có lẽ bạn chỉ cần thiết bị trung tâm

Một webcam USB. Tôi đã mua một chiếc ADVENT AWC72015 giá rẻ, hoạt động tốt. Bạn có thể tham khảo danh sách các webcam được xác nhận là hoạt động với Pi này. Lưu ý rằng một số yêu cầu một bộ chia USB được cấp nguồn (của tôi hoạt động tốt mà không cần)

Một tài khoản Dropbox. Tôi sử dụng tài khoản miễn phí tiêu chuẩn của mình vì dự án này không yêu cầu nhiều dung lượng lưu trữ

Một cảm biến nhiệt độ kỹ thuật số DS18B20 và một điện trở 4,7k. Bạn có thể mua cảm biến ở đây và cũng có thể đáng giá khi mua một gói các điện trở khác nhau

Một số phụ kiện xây dựng mạch. Tôi khuyên bạn nên sử dụng breadboard và một số cáp jumper để làm cho quá trình xây dựng mạch dễ dàng nhất có thể

[Nếu bạn quyết định mua bất kỳ sản phẩm nào trong số này, tôi sẽ đánh giá rất cao nếu bạn truy cập danh sách bằng các liên kết trên - bằng cách đó, tôi nhận được một phần nhỏ lợi nhuận mà không phải trả thêm phí cho bạn!]

Bước 1: Thiết lập phần cứng

Thiết lập phần cứng
Thiết lập phần cứng

Bước đầu tiên là đảm bảo rằng Pi của bạn và các thiết bị ngoại vi liên quan đã được thiết lập.

Đầu tiên, kết nối Pi của bạn với internet. Điều này là cần thiết để đảm bảo rằng chương trình giám sát có thể nhận được yêu cầu của bạn và tải dữ liệu lên Dropbox. Tôi sử dụng kết nối ethernet để đảm bảo độ tin cậy, nhưng kết nối Wi-Fi cũng sẽ hoạt động tốt, đồng thời có lợi thế là tính di động được cải thiện. Nếu bạn chọn Wi-Fi, tôi khuyên bạn nên dùng dongle USB này cho Pi.

Tiếp theo, kết nối webcam của bạn với Pi bằng cách cắm nó vào một trong các cổng USB. Mặc dù hướng dẫn của webcam Advent của tôi không nói rõ ràng rằng nó sẽ hoạt động với Linux, nhưng tất cả những gì tôi phải làm là cắm nó vào và khởi động Pi. Không cần cài đặt thêm. Các webcam khác có thể khác nhau. Bạn có thể kiểm tra xem webcam của mình có bị Linux phát hiện hay không bằng cách sử dụng lệnh sau:

lsusb

Trong hình ảnh trên, webcam của tôi được liệt kê là '0c45: 6340 Microdia'

Cuối cùng, bạn có thể kết nối cảm biến nhiệt độ DS18B20 của mình với đầu cắm GPIO của Pi. Tôi sử dụng breadboard của mình để làm cho quá trình tạo mạch dễ dàng hơn và tôi khuyên bạn nên làm như vậy, đặc biệt là vì DS18B20 yêu cầu một điện trở 4,7k được đặt giữa hai trong số ba chân của nó. Liên kết này cung cấp một sơ đồ đi dây tốt cho thấy cách một breadboard có thể được sử dụng để kết nối với cảm biến nhiệt độ này.

Trang tiếp theo của hướng dẫn trên cũng trình bày các bước cần thiết để đọc dữ liệu từ DS18B20 và chỉ cho bạn cách kiểm tra xem nó có đang hoạt động hay không. Điều quan trọng là phải thực hiện các bước thiết lập này trước khi bạn có thể sử dụng DS18B20 cho dự án này. Chúng tôi cũng sẽ tích hợp tập lệnh Python mẫu từ hướng dẫn vào chương trình giám sát của chúng tôi, vì vậy bạn có thể muốn xem nhanh đoạn mã này.

Cũng vui lòng ghi lại số duy nhất của DS18B20 của bạn. Đó là số bắt đầu bằng '28 - 'mà bạn bắt gặp trong phần hướng dẫn thiết lập. Bạn sẽ cần phải nhập nó vào chương trình Python sắp tới để cho phép nó đọc trong nhiệt độ.

Bước 2: Thiết lập Dropbox

Thiết lập Dropbox
Thiết lập Dropbox

Để Pi của bạn giao diện với Dropbox, bạn cần thiết lập một ứng dụng Dropbox mới. Điều này sẽ cung cấp cho bạn thông tin chi tiết cần thiết để Pi của bạn thực hiện quản lý tệp trực tuyến bằng Python. Giả sử bạn đã tạo tài khoản Dropbox và đăng nhập, bạn có thể tạo ứng dụng mới bằng cách sử dụng tùy chọn menu 'Nhà phát triển'. Xem hình trên để biết tóm tắt các bước quan trọng.

Trong menu 'Nhà phát triển', chọn 'Ứng dụng của tôi', sau đó nhấn nút 'Tạo ứng dụng'. Để điền vào biểu mẫu kết quả, hãy chọn 'API Dropbox', sau đó chọn 'Thư mục ứng dụng'. Cuối cùng, bạn có thể chọn một tên duy nhất cho ứng dụng của mình trong Dropbox. Nhấp vào 'Tạo ứng dụng'.

Sau đó, bạn sẽ được đưa đến trang cài đặt ứng dụng của mình trong Dropbox. Chỉ còn một điều bạn cần làm ở đây - tạo cho mình một Mã thông báo truy cập. Để thực hiện việc này, hãy cuộn xuống phần 'OAuth 2' và trong 'Mã thông báo truy cập đã tạo', hãy nhấp vào nút 'Tạo'.

Điều này sẽ cung cấp cho bạn một chuỗi dài các ký tự cần thiết để truy cập tài khoản Dropbox của bạn bằng Python. Ghi lại Mã thông báo truy cập này vì bạn sẽ cần chỉ định mã này sau này trong mã của mình. Nếu bạn mất mã thông báo, bạn có thể điều hướng trở lại cài đặt ứng dụng của mình bằng cách nhấp vào 'Ứng dụng của tôi' trong phần 'Nhà phát triển' của Dropbox và tạo mã thông báo mới.

Bạn có thể để nguyên các cài đặt khác. Để xác nhận rằng ứng dụng của bạn đã tạo các thư mục cần thiết trên tài khoản Dropbox của bạn, hãy điều hướng đến trang chủ lưu trữ của bạn và tìm thư mục 'Ứng dụng'. Trong thư mục này phải là một thư mục con với tên bạn đã chọn cho ứng dụng mới của mình. Đây là nơi đặt tất cả các tệp cho hệ thống giám sát của bạn.

Bước 3: Chuẩn bị Thư mục ứng dụng Dropbox của bạn

Chuẩn bị thư mục ứng dụng Dropbox của bạn
Chuẩn bị thư mục ứng dụng Dropbox của bạn

Khi bạn đã thiết lập ứng dụng Dropbox của mình, đã đến lúc suy nghĩ về cách bạn sẽ sử dụng thư mục kết quả trong tài khoản Dropbox để tương tác với Pi của mình. Điều này được thực hiện khá đơn giản. Tập lệnh Python sẽ chạy trên Pi sẽ sử dụng một tập hợp con các lệnh từ API Dropbox để tìm kiếm và sửa đổi tên của một số tệp trống, không có tiện ích mở rộng trong thư mục ứng dụng của bạn. Chúng tôi sẽ gọi các tệp này là 'tệp tham số' vì mỗi tệp sẽ cho phép bạn kiểm soát một khía cạnh khác nhau trong hành vi của hệ thống giám sát. Hình ảnh trên cho thấy bốn tệp tham số cần phải có trong thư mục ứng dụng Dropbox của bạn cho dự án này. Tạo chúng rất đơn giản:

Bắt đầu với thư mục ứng dụng của bạn hoàn toàn trống, hãy mở một chương trình soạn thảo văn bản trên máy tính của bạn. Mặc dù điều này có thể được thực hiện bằng Pi, nhưng tôi thấy việc sử dụng máy tính xách tay Windows của mình cho giai đoạn thiết lập này dễ dàng hơn. Khi trình soạn thảo văn bản được mở (tôi đã sử dụng Notepad trên Windows 7), tất cả những gì bạn cần làm là lưu một tệp văn bản hoàn toàn trống ở bất kỳ đâu trên máy tính của bạn. Như ví dụ đầu tiên của chúng tôi, chúng tôi sẽ tạo tham số đầu tiên trong hình ảnh tiêu đề. Đặt tên tệp là 'delay = 10' khi bạn lưu nó.

Tóm lại, bây giờ bạn sẽ có một tệp văn bản trống được lưu trữ trên máy tính của mình với tên 'delay = 10'. Tệp cũng sẽ có phần mở rộng '.txt' có thể hiển thị hoặc không.

Bước tiếp theo là tải tệp này lên thư mục ứng dụng Dropbox của bạn. Điều này cũng giống như bất kỳ tải lên Dropbox nào khác. Chỉ cần điều hướng đến thư mục ứng dụng của bạn và nhấp vào 'Tải lên' và chọn tệp 'delay = 10' của bạn.

Khi tệp này đã được tải lên, bạn phải xóa phần mở rộng '.txt' mà bây giờ sẽ hiển thị trong tên tệp. Để làm điều này, chỉ cần nhấp chuột phải vào tệp và chọn 'Đổi tên'. Xóa phần '.txt' của tên tệp. Bây giờ bạn sẽ được để lại với một tệp có tên 'delay = 10' không có phần mở rộng tệp, như được hiển thị trong hình ảnh tiêu đề.

Tệp thông số 'độ trễ' là một trong bốn tệp sẽ được chương trình giám sát sử dụng. Để tạo các tệp khác, bạn chỉ có thể sao chép và đổi tên tệp 'trì hoãn' của mình bằng cách nhấp chuột phải vào nó. Khi bạn đã tạo ba bản sao, hãy đặt tên cho chúng như được hiển thị trong hình ảnh tiêu đề để thư mục ứng dụng của bạn giống với thư mục được hiển thị ở đầu bước này.

Bước 4: Bắt đầu với mã

Như đã thảo luận, cốt lõi của hệ thống giám sát của chúng tôi sẽ bao gồm một tập lệnh Python duy nhất sẽ giao tiếp với Dropbox. Để chương trình giám sát hoạt động, tập lệnh này sẽ phải chạy ở chế độ nền trên Pi của bạn. Tôi đoán nó được mô tả chính xác nhất là một tập lệnh 'daemon', nghĩa là bạn có thể đặt nó chạy và quên nó đi. Tập lệnh được đính kèm với bước này, vì vậy không có ý nghĩa gì khi lặp lại mã ở đây. Bây giờ có thể là thời điểm tốt để tải xuống và làm quen với nó.

Trước khi bạn có thể chạy tập lệnh, điều quan trọng là đảm bảo bạn đã cài đặt các thư viện Python có liên quan. Những cái bạn cần được liệt kê ở đầu tập lệnh đính kèm. Họ đang:

nhập tài khoản đăng

nhập pygame.camera nhập thời gian nhập hệ điều hành

Bản cài đặt Python trên Pi của tôi đã bao gồm pygame, hệ điều hành và thời gian nên thứ duy nhất tôi phải cài đặt là Dropbox. Tôi đã làm điều này bằng cách sử dụng hướng dẫn cài đặt rất đơn giản của họ với pip.

Khi thư viện của bạn được thiết lập, bạn sẽ cần chỉnh sửa hai dòng trên cùng của tập lệnh đính kèm để khớp với Mã truy cập Dropbox và mã nhận dạng duy nhất của cảm biến nhiệt độ DS18B20 của bạn. Đây là hai dòng cần được chỉnh sửa:

APP_ACCESS_TOKEN = '**********'

THERMOMETER_FILE = '/ sys / bus / w1 / devices / 28 - ********** / w1_slave'

Chỉ cần thay thế các **** s bằng các giá trị chính xác. Tại thời điểm này, bạn đã thực sự sẵn sàng để bắt đầu sử dụng chương trình giám sát! Thay vì chỉ nhảy vào, tôi khuyên bạn nên tiếp tục bước tiếp theo để biết tổng quan chung về mã.

QUAN TRỌNG: Khi bạn chạy tập lệnh này, bạn muốn nó chạy ở chế độ nền để a) bạn có thể tiếp tục sử dụng Pi và b) khi bạn đóng phiên SSH của mình, tập lệnh sẽ tiếp tục chạy. Đây là lệnh tôi sử dụng khi chạy tập lệnh:

nohup python DropCamTherm.py &

Điều này hoàn thành ba điều: Nó sẽ chạy tập lệnh ('python DropCamTherm.py'), nó sẽ trả lại quyền điều khiển cho dòng lệnh ngay lập tức để bạn có thể tiếp tục sử dụng Pi ('&') và nó sẽ gửi các kết quả đầu ra Python. thường được hiển thị trên dòng lệnh thành một tệp có tên 'nohup.out'. Điều này có thể được đọc bằng cách sử dụng trình soạn thảo văn bản Linux (yêu thích của tôi là nano) và sẽ được tạo tự động trong thư mục mà tập lệnh đang được chạy.

Bước 5: Tìm hiểu sâu hơn về mã

Khi bạn mở tập lệnh, bạn sẽ nhận thấy rằng nó bao gồm ba chức năng cùng với một khối mã thực thi các chức năng này khi tập lệnh được chạy. Các chức năng sử dụng API Dropbox và truy cập tệp nhật ký nhiệt độ của DS18B20 để nghe lệnh từ Dropbox và tải lên kết quả đọc nhiệt độ mới nhất. Dưới đây là tổng quan về chức năng hoạt động và cách chúng được sử dụng để làm cho hệ thống giám sát hoạt động:

- thăm dò_parameter ():

Hàm này hiển thị mục đích của các tệp tham số Dropbox mà chúng ta đã tạo ở bước 3. Nó tìm kiếm trong thư mục ứng dụng Dropbox để tìm tệp có chứa văn bản 'param ='. Sau đó, nó trích xuất văn bản sau dấu '=' và cố gắng chuyển nó thành một số nguyên. Bạn có thể thấy rằng điều này cho phép chúng tôi kiểm soát chương trình bằng cách thêm các số liên quan vào cuối tệp tham số theo cách thủ công. Bước tiếp theo sẽ bao gồm một hướng dẫn ngắn gọn chỉ cho bạn cách sử dụng từng tệp tham số để điều khiển một khía cạnh của chương trình.

- set_parameter ():

Hàm này cho phép chương trình đổi tên tệp tham số từ bên trong Python. Nó thực hiện điều này trong một vài trường hợp, chủ yếu là để giảm nhu cầu đổi tên tệp thủ công quá mức.

- set_latest_temp ():

Hàm này sử dụng set_parameter () để tải nhiệt độ mới nhất lên thư mục ứng dụng Dropbox bằng cách thêm nó vào tệp thông số 'nhiệt độ'. Hàm đọc nhiệt độ mới nhất từ tệp nhật ký của DS18B20 (có sẵn trên Linux theo đường dẫn được trỏ bởi biến THERMOMETER_FILE).

Phần cuối cùng của chương trình chứa mã sẽ thực thi khi tập lệnh được chạy. Sau một số bước thiết lập cần thiết cho cảm biến DS18B20, nó sẽ mở một phiên Dropbox bằng Access Token của bạn và sử dụng pygame để tìm kiếm webcam của bạn. Nếu tìm thấy một webcam, nó sẽ đi vào một vòng lặp trong đó nó sử dụng thăm dò ý kiến () để trích xuất thông tin từ Dropbox và hành động trên đó.

QUAN TRỌNG: Bạn sẽ nhận thấy dòng mã sau:

cam = pygame.camera. Camera (cam_list [0], (864, 480))

… Điều này cố gắng tạo ra một giao diện máy ảnh có thể sử dụng được từ webcam đầu tiên mà pygame phát hiện. Có thể cần phải thay đổi độ phân giải để phù hợp với webcam của bạn. Thử nghiệm với một số giá trị để tìm ra giá trị nào phù hợp nhất.

Bước 6: Sử dụng Tệp thông số Dropbox

Vì vậy, bây giờ bạn nên có một tập lệnh làm việc, khi chạy theo hướng dẫn từ bước 4, sẽ cho phép Pi của bạn bắt đầu giám sát thư mục ứng dụng cho các đầu vào của bạn. Trong lần chạy đầu tiên của bạn, thư mục ứng dụng phải chứa các tệp thông số sau:

trì hoãn = 10

exitprogram = 0 imagerequest = 0 nhiệt độ = 0

Tương tác với chương trình được thực hiện bằng cách đổi tên thủ công các tệp tham số thông qua Dropbox. Để làm điều này, chỉ cần nhấp chuột phải vào một trong các tệp và chọn 'đổi tên'. Mỗi tệp tham số có một chức năng khác nhau:

- trì hoãn:

Tệp này cho chương trình giám sát biết phải chờ bao nhiêu giây giữa mỗi lần lặp lại vòng lặp giám sát. Khi tôi biết rằng mình sẽ không tương tác nhiều với chương trình, tôi đặt nó thành 60 hoặc 120. Khi tôi biết rằng tôi muốn yêu cầu dữ liệu từ Pi thường xuyên, tôi đặt nó thành 10.

- thoát chương trình:

Điều này nên được đặt thành 1 hoặc 0. Nếu chương trình phát hiện ra rằng nó được đặt thành 1, nó sẽ kết thúc tập lệnh. Nếu bạn đặt nó thành 1 và tập lệnh thoát, bạn sẽ cần đăng nhập lại vào Pi để bắt đầu sao lưu. Tham số này tồn tại để bạn có thể kết thúc chương trình giám sát một cách duyên dáng khi bạn không cần nó chạy nữa (ví dụ: nếu bạn đã trở về nhà và không còn muốn theo dõi webcam từ xa).

- imagerequest:

Đây có lẽ là thông số quan trọng nhất. Giá trị này phải được đặt thành 1 hoặc 0. Nếu chương trình phát hiện thấy nó được đặt thành 1, nó sẽ yêu cầu một hình ảnh từ webcam và tải nó lên thư mục ứng dụng (với tiêu đề 'image.jpg'). Nếu tồn tại một 'image.jpg' khác, nó sẽ ghi đè lên nó.

- nhiệt độ:

Đây là giá trị đọc nhiệt độ DS18B20 được thiết lập bởi hàm set_latest_temp (). Bạn không bao giờ cần phải chỉnh sửa tệp tham số này - nó được chương trình tự động thiết lập.

Lưu ý rằng nếu bạn đặt 'exitprogram' hoặc 'imagerequest' thành 1, chương trình sẽ tự động trả chúng về 0 trước khi thực thi mã liên quan. Điều này là để thuận tiện. Bạn cũng có thể nhận thấy rằng mã chứa rất nhiều khối 'thử' và 'ngoại trừ' xung quanh nhiều chức năng quan trọng. Điều này là để đảm bảo rằng tập lệnh sẽ không ném ra các ngoại lệ (và do đó sẽ ngừng chạy) nếu có sự cố xảy ra (chẳng hạn như sự cố kết nối internet ngăn không cho truy cập Dropbox).

Bước 7: Kết luận

Dự án này đã trình bày một cách để điều khiển Raspberry Pi bằng Python và Dropbox. Trong khi phần cứng được sử dụng trong dự án này là cảm biến nhiệt độ và webcam USB, có rất nhiều ứng dụng khác cho phương pháp điều khiển Pi này. Trên thực tế, bất kỳ thành phần phần cứng nào có thể truy cập thông qua GPIO đều có thể được điều khiển bằng cách sử dụng cấu trúc chương trình tương tự, làm cho hệ thống rất dễ mở rộng.

Bước tiếp theo, bạn cũng có thể sử dụng thư viện GUI như Tkinter cùng với API Dropbox để tạo một chương trình khách cho phép bạn sửa đổi các tệp tham số mà thậm chí không cần đăng nhập vào Dropbox.

Tôi hy vọng rằng hướng dẫn này đã rõ ràng, và nếu bạn có bất kỳ câu hỏi nào hoặc muốn tôi làm rõ bất cứ điều gì, vui lòng gửi bình luận!

Đề xuất: