Inhoudsopgave:

Raspberry Pi Home Monitoring met Dropbox - Ajarnpa
Raspberry Pi Home Monitoring met Dropbox - Ajarnpa

Video: Raspberry Pi Home Monitoring met Dropbox - Ajarnpa

Video: Raspberry Pi Home Monitoring met Dropbox - Ajarnpa
Video: Top 10 Raspberry Pi Projects for 2022 2024, November
Anonim
Raspberry Pi-thuisbewaking met Dropbox
Raspberry Pi-thuisbewaking met Dropbox

Deze tutorial laat je zien hoe je een eenvoudig en uitbreidbaar thuisbewakingssysteem maakt met een Raspberry Pi, een webcam, een paar elektrische componenten en je Dropbox-account. Met het voltooide systeem kun je op afstand afbeeldingen van je webcam opvragen en bekijken, terwijl je ook een kant-en-klare digitale temperatuursensor gebruikt om de temperatuur van je huis via internet te bewaken, allemaal met behulp van Dropbox.

Dit was het eerste project dat ik bedacht na ontvangst van een Raspberry Pi 2 model B. Mijn doel was om een op Python gebaseerd monitoringsysteem te maken dat ik via internet kon bedienen en ontvangen. Hoewel er veel verschillende manieren zijn om dit te doen, heb ik besloten om Dropbox te gebruiken als de interface tussen de Pi en het internet, omdat ze een eenvoudige Python-API hebben waarmee je bestanden in specifieke mappen kunt uploaden, wijzigen en zoeken met een paar regels tekst. code.

Ik wilde ook dat mijn oplossing licht en eenvoudig zou zijn en dat mijn Pi niet vol zou staan met onnodige bibliotheken en programma's. De softwarecomponent van dit project bestaat uit een enkel Python-script, wat betekent dat je je Pi gewoon kunt blijven gebruiken, zelfs als het monitoringsysteem draait.

Voor dit project heb je nodig:

Een Raspberry Pi. Elk model zou moeten werken, ik heb een alles-in-één starterkit gebruikt, maar misschien heb je alleen de centrale eenheid nodig

Een USB-webcam. Ik kocht een goedkope ADVENT AWC72015, die toevallig prima werkte. Het is misschien een goed idee om deze lijst met webcams te raadplegen waarvan is bevestigd dat ze met de Pi werken. Merk op dat sommige een aangedreven USB-hub nodig hebben (de mijne werkt prima zonder)

Een Dropbox-account. Ik gebruik mijn standaard gratis account omdat dit project niet veel opslagruimte vereist

Een DS18B20 digitale temperatuursensor en een weerstand van 4,7k. Je kunt de sensor hier kopen, en het is misschien de moeite waard om ook een pakket met verschillende weerstanden te pakken

Enkele accessoires voor het bouwen van circuits. Ik raad aan om een breadboard en wat startkabels te gebruiken om het circuitbouwproces zo eenvoudig mogelijk te maken

[Als u besluit een van deze producten te kopen, zou ik het zeer op prijs stellen als u de aanbiedingen opent via de bovenstaande links - op die manier krijg ik een klein deel van de winst zonder extra kosten voor u!]

Stap 1: Stel de hardware in

De hardware instellen
De hardware instellen

De eerste stap is ervoor te zorgen dat uw Pi en de bijbehorende randapparatuur zijn ingesteld.

Verbind eerst je Pi met internet. Dit is nodig om ervoor te zorgen dat het monitoringprogramma uw verzoeken kan ontvangen en gegevens kan uploaden naar Dropbox. Ik gebruik een ethernetverbinding om de betrouwbaarheid te garanderen, maar een Wi-Fi-verbinding zou ook goed moeten werken, terwijl het ook het voordeel heeft van verbeterde draagbaarheid. Kies je voor wifi, dan raad ik deze USB-dongle voor de Pi aan.

Sluit vervolgens je webcam aan op de Pi door hem in een van de USB-poorten te steken. Hoewel de instructies van mijn advent-webcam niet expliciet zeiden dat het met Linux zou werken, hoefde ik het alleen maar aan te sluiten en de Pi op te starten. Er was geen verdere installatie nodig. Andere webcams kunnen variëren. Je kunt met het volgende commando controleren of je webcam door Linux is gedetecteerd:

lsusb

In de bovenstaande afbeelding staat mijn webcam vermeld als '0c45:6340 Microdia'

Ten slotte kunt u uw DS18B20-temperatuursensor aansluiten op de GPIO-header van de Pi. Ik gebruik mijn breadboard om het maken van circuits gemakkelijker te maken, en ik raad je aan hetzelfde te doen, vooral omdat de DS18B20 een weerstand van 4,7 k vereist die tussen twee van de drie pinnen moet worden geplaatst. Deze link geeft een goed bedradingsschema dat laat zien hoe een breadboard kan worden gebruikt om deze temperatuursensor aan te sluiten.

De volgende pagina van de bovenstaande tutorial behandelt ook de stappen die nodig zijn om gegevens van de DS18B20 in te lezen, en laat zien hoe u kunt controleren of deze werkt. Het is belangrijk om deze installatiestappen uit te voeren voordat u de DS18B20 voor dit project kunt gebruiken. We zullen ook het voorbeeld van het Python-script uit de tutorial in ons monitoringprogramma integreren, dus misschien wil je deze code even doornemen.

Noteer ook het unieke nummer van uw DS18B20. Het is het nummer dat begint met '28-' dat je tegenkomt tijdens de installatiehandleiding. Je moet het invoeren in het aankomende Python-programma om het de temperatuur te laten lezen.

Stap 2: Dropbox instellen

Dropbox instellen
Dropbox instellen

Om je Pi te laten communiceren met Dropbox, moet je een nieuwe Dropbox-app instellen. Dit geeft je de details die je Pi nodig hebt om online bestandsbeheer uit te voeren met Python. Ervan uitgaande dat je een Dropbox-account hebt gemaakt en bent ingelogd, kun je een nieuwe app maken met behulp van de menuoptie 'Ontwikkelaars'. Zie bovenstaande afbeelding voor een samenvatting van de belangrijke stappen.

Selecteer in het menu 'Ontwikkelaars' 'Mijn apps' en druk vervolgens op de knop 'App maken'. Om het resulterende formulier in te vullen, selecteert u 'Dropbox API' gevolgd door 'App-map'. Ten slotte kun je binnen Dropbox een unieke naam voor je app kiezen. Klik op 'App maken'.

Je wordt dan naar de instellingenpagina van je app in Dropbox geleid. Er is nog maar één ding dat u hier hoeft te doen - genereer voor uzelf een Access Token. Scroll hiervoor naar beneden naar het gedeelte 'OAuth 2' en klik onder 'Generated access token' op de knop 'Genereren'.

Dit geeft je een lange reeks tekens die nodig zijn om toegang te krijgen tot je Dropbox-account met Python. Maak een notitie van deze toegangstoken, aangezien u deze later in uw code moet specificeren. Als je de token kwijtraakt, kun je teruggaan naar de instellingen van je app door op 'Mijn apps' in het Dropbox-gedeelte 'Ontwikkelaars' te klikken en een nieuwe token te genereren.

De overige instellingen kunt u laten zoals ze zijn. Om te bevestigen dat je app de benodigde mappen op je Dropbox-account heeft gemaakt, navigeer je naar de startpagina van je opslag en zoek je naar de map ' Apps '. In deze map zou een submap moeten staan met de naam die je hebt gekozen voor je nieuwe app. Hier worden alle bestanden voor uw monitoringsysteem geplaatst.

Stap 3: Je Dropbox-app-map voorbereiden

Je Dropbox-app-map voorbereiden
Je Dropbox-app-map voorbereiden

Nadat je je Dropbox-app hebt ingesteld, is het tijd om na te denken over hoe je de resulterende map in je Dropbox-account gaat gebruiken om met je Pi te communiceren. Dit wordt heel eenvoudig bereikt. Het Python-script dat op de Pi wordt uitgevoerd, gebruikt een subset van opdrachten van de Dropbox API om de namen van enkele lege, extensieloze bestanden in je app-map te zoeken en aan te passen. We zullen deze bestanden 'parameterbestanden' noemen, omdat u met elk ervan een ander aspect van het gedrag van het monitoringsysteem kunt controleren. De afbeelding hierboven toont de vier parameterbestanden die voor dit project in je Dropbox-app-map aanwezig moeten zijn. Het maken ervan is eenvoudig:

Begin met uw app-map helemaal leeg en open een teksteditorprogramma op uw computer. Hoewel dit met de Pi kon worden gedaan, vond ik het gemakkelijker om mijn Windows-laptop te gebruiken voor deze installatiefase. Zodra de teksteditor is geopend (ik gebruikte Kladblok op Windows 7), hoef je alleen maar een volledig leeg tekstbestand ergens op je computer op te slaan. Als ons eerste voorbeeld zullen we de eerste parameter in de headerafbeelding maken. Noem het bestand 'delay=10' wanneer u het opslaat.

Om samen te vatten: er zou nu een leeg tekstbestand op uw computer moeten staan met de naam 'delay=10'. Het bestand heeft ook de extensie '.txt' die al dan niet zichtbaar is.

De volgende stap is om dit bestand te uploaden naar je Dropbox-appmap. Dit is net als elke andere Dropbox-upload. Navigeer eenvoudig naar de map van uw app en klik op 'Uploaden' en kies uw 'delay=10'-bestand.

Wanneer dit bestand is geüpload, moet u de extensie '.txt' verwijderen die nu zichtbaar moet zijn in de bestandsnaam. Om dit te doen, klikt u met de rechtermuisknop op het bestand en selecteert u 'Naam wijzigen'. Verwijder het '.txt'-gedeelte van de bestandsnaam. U zou nu een bestand moeten hebben met de naam 'delay=10' zonder bestandsextensie, zoals weergegeven in de koptekst.

Het parameterbestand 'vertraging' is een van de vier die door het monitoringprogramma worden gebruikt. Om de andere te maken, kunt u uw 'vertraging'-bestand kopiëren en hernoemen door er met de rechtermuisknop op te klikken. Nadat u drie exemplaren hebt gemaakt, geeft u ze een naam zoals weergegeven in de koptekst, zodat uw app-map identiek is aan die aan het begin van deze stap.

Stap 4: Aan de slag met de code

Zoals besproken, zal de kern van ons monitoringsysteem bestaan uit een enkel Python-script dat zal communiceren met Dropbox. Om ervoor te zorgen dat het monitoringprogramma actief is, moet dit script op de achtergrond op uw Pi worden uitgevoerd. Ik denk dat het het meest nauwkeurig wordt beschreven als een 'daemon'-script, wat betekent dat je het gewoon kunt laten draaien en het kunt vergeten. Het script is aan deze stap gekoppeld, dus het heeft geen zin om de code hier te herhalen. Dit is misschien een goed moment om het te downloaden en er vertrouwd mee te raken.

Voordat u het script kunt uitvoeren, is het belangrijk om ervoor te zorgen dat de relevante Python-bibliotheken zijn geïnstalleerd. Degene die je nodig hebt, staan bovenaan het bijgevoegde script. Zij zijn:

importeer dropbox

import pygame.camera import os import tijd

De Python-installatie op mijn Pi bevatte al pygame, os en time, dus de enige die ik moest installeren was Dropbox. Ik deed dit met behulp van hun zeer eenvoudige installatie-instructies met pip.

Zodra je bibliotheken zijn ingesteld, moet je de bovenste twee regels van het bijgevoegde script aanpassen aan je Dropbox Access Token en de unieke identificatie van je DS18B20-temperatuursensor. Dit zijn de twee regels die moeten worden bewerkt:

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

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

Vervang gewoon de ****'s door de juiste waarden. Op dit punt bent u eigenlijk klaar om het monitoringprogramma te gaan gebruiken! In plaats van er gewoon in te springen, raad ik je aan door te gaan naar de volgende stap voor een algemeen overzicht van de code.

BELANGRIJK: Wanneer je dit script uitvoert, wil je dat het op de achtergrond draait, zodat a) je de Pi kunt blijven gebruiken, en b) wanneer je je SSH-sessie sluit, het script blijft draaien. Dit is de opdracht die ik gebruik wanneer ik het script uitvoer:

nohup python DropCamTherm.py &

Dit bereikt drie dingen: het zal het script uitvoeren ('python DropCamTherm.py'), het zal de controle onmiddellijk teruggeven aan de opdrachtregel, zodat je de Pi kunt blijven gebruiken ('&'), en het zal Python-outputs sturen die normaal gesproken op de opdrachtregel worden weergegeven in een bestand met de naam 'nohup.out'. Dit kan worden gelezen met behulp van een Linux-teksteditor (mijn favoriet is nano), en wordt automatisch gemaakt in de map van waaruit het script wordt uitgevoerd.

Stap 5: Dieper in de code graven

Wanneer u het script opent, zult u merken dat het uit drie functies bestaat, samen met een codeblok dat deze functies implementeert wanneer het script wordt uitgevoerd. De functies gebruiken de Dropbox API en hebben toegang tot het temperatuurlogbestand van de DS18B20 om te luisteren naar commando's van Dropbox en de laatste temperatuurmeting te uploaden. Hieronder vindt u een overzicht van wat de functies doen en hoe ze worden gebruikt om het monitoringsysteem te laten werken:

- poll_parameter():

Deze functie toont het doel van de Dropbox-parameterbestanden die we in stap 3 hebben gemaakt. Het zoekt in de Dropbox-appmap naar een bestand met de tekst 'param='. Vervolgens extraheert het de tekst na de '=' en probeert het om te zetten in een geheel getal. U kunt zien dat dit ons in staat stelt het programma te besturen door handmatig relevante nummers aan het einde van de parameterbestanden toe te voegen. De volgende stap bevat een korte instructiehandleiding die u laat zien hoe u elk van de parameterbestanden kunt gebruiken om een aspect van het programma te besturen.

- set_parameter():

Met deze functie kan het programma een parameterbestand hernoemen vanuit Python. Het doet dit een paar keer, voornamelijk om de noodzaak van overmatig handmatig hernoemen van de bestanden te verminderen.

- set_latest_temp():

Deze functie maakt gebruik van set_parameter() om de laatste temperatuur te uploaden naar de Dropbox-app-map door deze toe te voegen aan het parameterbestand 'temperatuur'. De functie leest de laatste temperatuur uit het logbestand van de DS18B20 (dat onder Linux beschikbaar is via het pad dat wordt aangegeven door de variabele THERMOMETER_FILE).

Het laatste deel van het programma bevat de code die wordt uitgevoerd wanneer het script wordt uitgevoerd. Na enkele installatiestappen die nodig zijn voor de DS18B20-sensor, opent deze een Dropbox-sessie met uw Access Token en gebruikt pygame om uw webcam te zoeken. Als een webcam wordt gevonden, komt deze in een lus waarin deze poll_parameter() gebruikt om informatie uit Dropbox te halen en ernaar te handelen.

BELANGRIJK: u ziet de volgende regel code:

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

… dit probeert een bruikbare camera-interface te maken van de eerste webcam die pygame detecteert. De resolutie moet mogelijk worden gewijzigd zodat deze overeenkomt met uw webcam. Experimenteer met een aantal waarden om te vinden wat het beste werkt.

Stap 6: De Dropbox-parameterbestanden gebruiken

Dus nu zou je een werkend script moeten hebben dat, wanneer het wordt uitgevoerd met behulp van de instructies uit stap 4, je Pi in staat stelt om de app-map voor je invoer te controleren. Bij uw eerste run moet de app-map de volgende parameterbestanden bevatten:

vertraging = 10

exitprogram=0 imagerequest=0 temperatuur=0

Interactie met het programma wordt bereikt door de parameterbestanden handmatig te hernoemen via Dropbox. Om dit te doen, klikt u met de rechtermuisknop op een van de bestanden en selecteert u 'hernoemen'. Elk parameterbestand heeft een andere functie:

- vertraging:

Dit bestand vertelt het bewakingsprogramma hoeveel seconden er gewacht moet worden tussen elke iteratie van de bewakingslus. Als ik weet dat ik niet veel met het programma zal werken, stel ik het in op 60 of 120. Als ik weet dat ik vaak gegevens van de Pi wil opvragen, stel ik het in op 10.

- exitprogramma:

Dit moet worden ingesteld op 1 of 0. Als het programma detecteert dat het is ingesteld op 1, zal het het script beëindigen. Als je het op 1 zet en het script wordt afgesloten, moet je opnieuw inloggen op de Pi om het weer op te starten. Deze parameter bestaat zodat u het bewakingsprogramma netjes kunt beëindigen wanneer u het niet langer nodig heeft (bijvoorbeeld als u thuis bent gekomen en de webcam niet langer op afstand wilt controleren).

- beeldverzoek:

Dit is misschien wel de belangrijkste parameter. Deze moet op 1 of 0 staan. Als het programma detecteert dat deze op 1 staat, zal het een afbeelding opvragen bij de webcam en deze uploaden naar de app-map (met de titel 'image.jpg'). Als er een andere 'image.jpg' bestaat, zal deze deze overschrijven.

- temperatuur:

Dit is de temperatuurmeting van de DS18B20 die is ingesteld door de functie set_latest_temp(). U hoeft dit parameterbestand nooit te bewerken - het wordt automatisch ingesteld door het programma.

Merk op dat als je 'exitprogram' of 'imagerequest' instelt op 1, het programma ze automatisch terugzet naar 0 voordat de relevante code wordt uitgevoerd. Dit is voor het gemak. Het is je misschien ook opgevallen dat de code veel 'try'- en 'behalve'-blokken bevat die veel van de kritieke functies omringen. Dit is om ervoor te zorgen dat het script geen uitzonderingen genereert (en dus stopt) als er iets misgaat (zoals een probleem met de internetverbinding dat Dropbox-toegang verhindert).

Stap 7: Conclusie

Dit project heeft een manier gepresenteerd om een Raspberry Pi te besturen met Python en Dropbox. Hoewel de hardware die in dit project wordt gebruikt een temperatuursensor en een USB-webcam is, zijn er veel andere toepassingen voor deze methode om de Pi te besturen. In feite kan elke hardwarecomponent die toegankelijk is via GPIO worden bestuurd met een vergelijkbare programmastructuur, waardoor het systeem zeer eenvoudig uit te breiden is.

Als volgende stap zou je ook een GUI-bibliotheek zoals Tkinter samen met de Dropbox API kunnen gebruiken om een clientprogramma te maken waarmee je de parameterbestanden kunt wijzigen zonder dat je je zelfs maar hoeft aan te melden bij Dropbox.

Ik hoop dat deze tutorial duidelijk is geweest, en als je vragen hebt of wilt dat ik iets verduidelijk, plaats dan een reactie!

Aanbevolen: