Sisällysluettelo:

Raspberry Pi -valvontakamera: 11 vaihetta (kuvilla)
Raspberry Pi -valvontakamera: 11 vaihetta (kuvilla)

Video: Raspberry Pi -valvontakamera: 11 vaihetta (kuvilla)

Video: Raspberry Pi -valvontakamera: 11 vaihetta (kuvilla)
Video: Электрика в квартире своими руками. Финал. Переделка хрущевки от А до Я. #11 2024, Marraskuu
Anonim
Raspberry Pi -valvontakamera
Raspberry Pi -valvontakamera

Tämä on askel askeleelta opastettava IoT, liike -aktivoidun turvakameran luominen Raspberry Pi: n avulla. Opit luomaan pullon verkkopalvelimen ja lomakkeen, jonka avulla käyttäjä voi säätää kameran herkkyyttä ja tallennusaikaa, aloittaa/lopettaa tallennuksen manuaalisesti ja/tai ottaa kuvan, joka tallennetaan paikallisesti.

Tarvikkeet

  • Raspberry Pi 3
  • Pi -kamera
  • PIR -liiketunnistin
  • Sd-kortti
  • Virtalähde

Vaihe 1: Kokoa laitteisto

Kokoa laitteisto
Kokoa laitteisto
Kokoa laitteisto
Kokoa laitteisto
Kokoa laitteisto
Kokoa laitteisto
Kokoa laitteisto
Kokoa laitteisto

Kun Pi on pois päältä, aseta micro-SD-kortti Pi: hen. Liitä kameramoduulin nauhakaapeli Pi: n kameramoduuliporttiin. Liitä sitten PRI -liiketunnistimen 3 nastaa (merkitty VCC, OUT ja GND) Pi: n GPIO -nastoihin. Liitä VCC 5,5 V: n virtalähteeseen, GND maahan ja OUT liittimeen Pi.

Vaihe 2: Varmista, että Pi on yhteydessä Internetiin

Varmista, että Pi on yhteydessä Internetiin
Varmista, että Pi on yhteydessä Internetiin

Käynnistä nyt Pi kytkemällä se virtalähteeseen ja varmista, että olet yhteydessä Internetiin ping -komennolla. Jos et tiedä miten liittää Pi Internetiin, napsauta tätä.

sudo ping www.google.com

Jos onnistut, sinun pitäisi nähdä, että Google vastaanottaa tietoja.

Lisäksi voit käyttää ifconfig -sovellusta nähdäksesi IP -osoitteesi.

sudo ifconfig

Vaihe 3: Asenna kamera

Avaa konfigurointiliitäntä seuraavalla komennolla ja ota kamera käyttöön "rajapinta -asetuksissa".

sudo raspi-config

Uudelleenkäynnistyksen jälkeen voit näyttää kameran tilan ja varmistaa, että se on liitetty oikein.

vcgencmd get_camera

Asenna lopuksi picamera -moduuli.

pip asenna picamera

Vaihe 4: Asenna pullo

Asenna pullo ja pulloa rauhoittava moduuli Pythonille:

sudo apt-get install python-dev python-pip

python -m pip asenna kolvipullo -levollinen

Seuraavaksi asennamme lomakkeiden luomiseen käytettävän python -pullo -moduulin.

pip asenna pullo-wtf

Vaihe 5: Luo lomakeluokka

Tee hakemisto nimeltä iotProject tallentaaksesi kaikki tiedostosi.

sudo mkdir iotProject

Luo python -tiedosto nimeltä "camControl.py".

sudo nano camControl.py

Tässä tiedostossa luomme lomakeluokan, jonka avulla voimme luoda verkkolomakkeen, jossa on tekstikenttiä ja avattava valikko, jotta käyttäjä voi muuttaa kameran asetuksia, aloittaa/lopettaa tallennuksen manuaalisesti ja ottaa videon.

from flask_wtf import FlaskFormfrom wtforms.validators import DataT Required from wtforms import SubmitField from wtforms import validators, IntegerField, BooleanField, SelectField

luokka camFrame (FlaskForm):

videoDuration = IntegerField ('Tallennusaika (sekunteina)')

herkkyys = IntegerField ('Liikeherkkyys (alue 2500-10000) n Mitä suurempi luku, sitä vähemmän herkkä kamera on', validators = [validators. NumberRange (min = 2500, max = 10000, message = 'Arvo alueen ulkopuolella'])

options = SelectField ('Options', options = [('none', 'No action'), ('rec', 'Start Recording'), ('stop', 'Stop Recording'), ('kuva', 'Ota kuva')])

lähetä = SubmitField ('Lähetä')

Vaihe 6: Luo pullomalli

Luo kolvimalli
Luo kolvimalli

Käyttöliittymän luomiseksi sinun on suunniteltava kolvimalli, joka käyttää juuri luomasi lomaketta. Tämä tiedosto kirjoitetaan html -muodossa ja tallennetaan kansioon nimeltä malleja, jonka pitäisi olla samassa hakemistossa lomakkeen kanssa.

Luo mallikansioosi tiedosto index.html. Toista yllä näkyvä koodi tässä tiedostossa.

Vaihe 7: Muodosta malli

Nyt on aika luoda tiedosto, joka tekee mallin. Luo tiedosto nimeltä appCam.py (varmista, ettet ole enää mallipohjassa). Kaikkia mallissa käytettyjä dynaamisia sisältöjä on käytettävä nimettyinä argumentteina render_template () -kutsussa.

import camControl pulloista tuonti Pullo, render_template, request, Response from flask_restful import Resource, Api, reqparse

app = Pullo (_ name_)

app.config ['SECRET_KEY'] = '13542' api = Api (sovellus)

parser = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Videon kesto liikkeen havaitessa') parser.add_argument ('sens', type = int, help = 'tallennuksen käynnistämiseen vaadittava liikkeen taso') parser.add_argument ('opt', type = str, help = 'Tallenna video manuaalisesti tai ota kuva')

luokan päivitys (resurssi):

#Stuff for wtforms def post (self): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #kirjoita tekstitiedostoon, joka puhuu rinnakkain toimivan kameran kanssa CameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.write (args ['dur'] + '\ n') #write dur cameraSettingsFile.write (args ['sens'] + '\ n') #write sens cameraSettingsFile.write (args ['opt'] + '\ n') #write opt cameraSettingsFile.close () return {'dur': args ['dur'], 'sens': args ['sense'], 'opt': args ['opt']}

@app.route ('/', method = ['GET', 'POST'])

def index (): "" "Ohjaimen kotisivu" "" form = camControl.camFrame () #tämä on lomake, jos request.method == 'POST': print (request.form) args = [i for i in request.form.items ()] #rc.input (int (args [0] [1]), int (args [1] [1]), args [2] [1]) cameraSettingsFile = open ("cameraSettings.txt ", 'w') cameraSettingsFile.write (args [0] [1] + '\ n') #write dur cameraSettingsFile.write (args [1] [1] + '\ n') #write sens cameraSettingsFile.write (args [2] [1] + '\ n') #write opt cameraSettingsFile.close () imageDictionary = {"tiedostonimi": "image.jpg"} return render_template ('index.html', form = form, image = imageDictionary)

api.add_resource (Päivitys, '/update/')

jos _name_ == '_main_':

app.run (isäntä = '0.0.0.0', port = 80, debug = True, threaded = True)

Vaihe 8: Luo kameran käyttäjäluokka

Nyt haluamme luoda tiedoston nimeltä camOperator.py. Siinä teemme kameraluokan kameran käyttömenetelmillä hyödyntäen jo saatavilla olevia PiCamera -toimintoja. Käytämme tämän objektin esiintymää seuraavassa vaiheessa, jossa yhdistämme kameran ja liikeanturin toiminnot.

Tässä luokassa määritellyt menetelmät muuttavat turvakameran "tallennus" -asetuksia käyttämällä käyttäjän antamia herkkyys- ja kesto -syötteitä ja määrittävät näille muuttujille oletusarvot, jos käyttäjän syöttöä ei ole.

tuoda RPi. GPIO GPIO -laitteena tuoda ajan tuonti picamera päivämäärän ja ajan tuonnin päivämäärästä

GPIO.setmode (GPIO. BOARD)

GPIO.asetukset (11, GPIO. IN)

havaita = 0

luokan kamera

def _init _ (itse):

#constructor self.cam = picamera. PiCamera () self.data = self.dur = 10 self.sens = 2500 self.opt = "none"

ennätys (itse, kesto):

#Records tiettyä aikaa varten, jonka ohjain on asettanut '/home/pi/iotProject/videos/' + videoName + '.h264') time.sleep (dur) self.cam.stop_recording ()

def -toiminto (itse, dur, sens):

#Kameran pääkäyttö, joka tarkistaa jatkuvasti, onko ihminen lähellä, jos ihminen pysyy lähellä tarpeeksi kauan, aloitamme tallennuksen! globaali tunnistus i = GPIO.tulo (11), jos i == 0: #Kun liikeanturin lähtö on LOW -tunnistus = 0 aika. unen (0,1) elif i == 1: #Kun liikeanturin lähtö on HIGH print (" liike havaittu " +str (havaita)), jos tunnistaa> = sens*10: itsetallennus (dur) print (" RECORDED ") havaitse = 0 aika. unen (0,1) tunnistus += 1

Vaihe 9: Luo tallennusmoduuli

Viimeinen tähän projektiin tarvittava ohjelma kirjoitetaan tiedostoon nimeltä rec.py. Tämä tiedosto kertoo kameralle, milloin tallennetaan, kuinka kauan tallennetaan ja otetaanko/milloin kuva. Se tekee tämän tarkistamalla ja lukemalla jatkuvasti tekstitiedostoon kirjoitettuja käyttäjätietoja vaiheesta 5. Jos tiedosto on päivitetty, se säätää herkkyys- ja kestoarvot vastaavasti ja sitten, jos tallenne tai kuva otetaan, se tallentaa sisällön pi, joko.h264- tai-j.webp

'' Toimii rinnakkain pulveripalvelimen kanssa ja lukee palvelinmuotojen asettamat ohjausmuuttujat. Palvelimen ohjausmuuttujat asetetaan erilliseen tiedostoon lomakkeiden lähettämisen jälkeen. Rec -moduuli lukee nämä muuttujat ja päivittää kameran niiden perusteella. '' 'tuonti camOperator päivämäärän tuonnin päivämäärän tuonti -ajalta

rc = camOperator.cameraOperator ()

cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.close () #here, avaamme ja suljemme kirjoitustilassa, jotta voimme poistaa tiedoston sisällön ennen pääsilmukan kulkua

#Jatkuva silmukka, joka tarkkailee, onko ihmisiä lähellä. Jos ovat, niin sitten

#kamera aloittaa tallennuksen. Tämä toiminto toimii rinnakkain tätä kameraa hallitsevan pullon #palvelin kanssa. recordInProcess = False kun True: #tarkista/tallenna jos (recordInProcess == False): rc.operation (rc.dur, rc.sens) #muuta kameran asetuksia palvelinkameran perusteellaSettingsFile = open ("cameraSettings.txt", 'r') settingNum = 0 kameran asetusten asettamiseen) elif settingNum == 2: #Action change rc.opt = setting settingNum += 1 cameraSettingsFile.close ()

#suorita toiminto

# if rc.opt == "none": # jatka jos rc.opt == "rec / n" ja recordInProcess == False: print ("Suorittaa tietuekomennon ohjaimesta") #Luo videolle nimi nykyisen ajan mukaan videoName = "snappedVid _"+str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') rc.cam.start_recording ('/home/pi/iotProject /videos/' + videoName +'. h264 ') = False cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile.write (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile. write ("none / n") rc.opt = "none / n" elif rc.opt == "pic / n" and recordInProcess == False: print ("Napsauta pikakomento ohjaimesta") pictureName = "snappedPic_ "+str (datetime.now ()) pictureName = pictureName.replace (':', ') pictureName = pictureName.replace ('. ',') rc.cam.st art_preview () time.sleep (5) rc.cam.capture ('kuvat/' + pictureName + '.jpg') rc.cam.stop_preview () cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile. kirjoittaa (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile.write ("none / n") rc.opt = "none / n"

Vaihe 10: Käynnistä palvelin

Käynnistä Palvelin
Käynnistä Palvelin

SSH osaksi pi ja käynnistä palvelin yllä olevan komentorivin avulla.

Vaihe 11: Kokeile

Kokeile sitä!
Kokeile sitä!
Kokeile sitä!
Kokeile sitä!

Siirry verkkosivulle IP -osoitteen avulla ja sinun pitäisi pystyä ohjaamaan kameraa etänä!

Suositeltava: