Sisällysluettelo:
- Tarvikkeet
- Vaihe 1: Kokoa laitteisto
- Vaihe 2: Varmista, että Pi on yhteydessä Internetiin
- Vaihe 3: Asenna kamera
- Vaihe 4: Asenna pullo
- Vaihe 5: Luo lomakeluokka
- Vaihe 6: Luo pullomalli
- Vaihe 7: Muodosta malli
- Vaihe 8: Luo kameran käyttäjäluokka
- Vaihe 9: Luo tallennusmoduuli
- Vaihe 10: Käynnistä palvelin
- Vaihe 11: Kokeile
Video: Raspberry Pi -valvontakamera: 11 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:00
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
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
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
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
SSH osaksi pi ja käynnistä palvelin yllä olevan komentorivin avulla.
Vaihe 11: Kokeile
Siirry verkkosivulle IP -osoitteen avulla ja sinun pitäisi pystyä ohjaamaan kameraa etänä!
Suositeltava:
Smart Home by Raspberry Pi: 5 vaihetta (kuvilla)
Smart Home by Raspberry Pi: Siellä on jo useita tuotteita, jotka tekevät asunnostasi älykkäämmän, mutta suurin osa niistä on omia ratkaisuja. Mutta miksi tarvitset Internet -yhteyden vaihtaaksesi valon älypuhelimellasi? Se oli yksi syy minulle rakentaa oma Smar
Puinen LED -pelinäyttö Powered by Raspberry Pi Zero: 11 vaihetta (kuvilla)
Puinen LED -pelinäyttö Powered by Raspberry Pi Zero: Tämä projekti toteuttaa 20x10 pikselin WS2812 -pohjaisen LED -näytön, jonka koko on 78x35 cm ja joka voidaan helposti asentaa olohuoneeseen retro -pelejä pelaamaan. Tämän matriisin ensimmäinen versio rakennettiin vuonna 2016 ja monet muut ihmiset rakensivat sen uudelleen. Tämä esimerkki
Borderlands Raspberry Pi: 9 vaihetta (kuvilla)
Borderlands Raspberry Pi: Joten olin eräänä päivänä pelikaupassa ja näin tämän Borderlandsin rekvisiitan raivausosastolla hintaan 20 dollaria, enkä voinut vastustaa sen ostamista. Noin viikon kuluttua ajattelin itselleni: "Voisin suolen kokonaan ja ahdistaa piin sisälle". Silloin seikkailuni alkoi
Raspberry Pi NFS ja Samba -tiedostopalvelin: 11 vaihetta (kuvilla)
Raspberry Pi NFS ja Samba File Server: Tämä projekti on viimeinen tulosvaihe, joka yhdistää kaksi aiemmin tehtyä ja lähetettyä piiriä. *** 1. Raspberry Pi CPU CPU Indicator-Julkaistu 20. marraskuuta 2020https: //www.instructables.com/Raspberry-Pi-CPU-Tem…2. Vadelma Pi
Pultti - DIY -langaton latauskello (6 vaihetta): 6 vaihetta (kuvilla)
Pultti - DIY -langaton latausyökello (6 vaihetta): Induktiiviset lataukset (tunnetaan myös nimellä langaton lataus tai langaton lataus) on langattoman voimansiirron tyyppi. Se käyttää sähkömagneettista induktiota sähkön tuottamiseen kannettaville laitteille. Yleisin sovellus on langaton Qi -latauslaite