Բովանդակություն:

Raspberry Pi անվտանգության տեսախցիկ ՝ 11 քայլ (նկարներով)
Raspberry Pi անվտանգության տեսախցիկ ՝ 11 քայլ (նկարներով)

Video: Raspberry Pi անվտանգության տեսախցիկ ՝ 11 քայլ (նկարներով)

Video: Raspberry Pi անվտանգության տեսախցիկ ՝ 11 քայլ (նկարներով)
Video: BTT GTR v1.0/M5 v1.0 - Basics 2024, Նոյեմբեր
Anonim
Raspberry Pi անվտանգության տեսախցիկ
Raspberry Pi անվտանգության տեսախցիկ

Սա քայլ առ քայլ հրահանգելի է, թե ինչպես կարելի է ստեղծել IoT, շարժումով ակտիվացված անվտանգության տեսախցիկ ՝ օգտագործելով Raspberry Pi- ն: Դուք կսովորեք, թե ինչպես ստեղծել ֆոլսկի վեբ սերվեր և ձև, որը թույլ կտա օգտվողին կարգավորել տեսախցիկի զգայունությունն ու ձայնագրման ժամանակը, ձեռքով սկսել/դադարեցնել ձայնագրությունը և/կամ լուսանկարել, որը կպահվի տեղում:

Պարագաներ

  • Ազնվամորի Պի 3
  • Pi տեսախցիկ
  • PIR շարժման ցուցիչ
  • SD քարտ
  • Սնուցման աղբյուր

Քայլ 1: Հավաքեք սարքավորումները

Հավաքեք Սարքավորումը
Հավաքեք Սարքավորումը
Հավաքեք Սարքավորումը
Հավաքեք Սարքավորումը
Հավաքեք Սարքավորումը
Հավաքեք Սարքավորումը
Հավաքեք Սարքավորումը
Հավաքեք Սարքավորումը

Մինչ Pi- ն անջատված է, տեղադրեք micro-SD քարտը Pi- ի մեջ: Տեղադրեք ֆոտոխցիկի մոդուլի ժապավենը Pi- ի խցիկի մոդուլի պորտի մեջ: Այնուհետև, PRI շարժման դետեկտորի 3 կապում (պիտակավորված VCC, OUT և GND) միացրեք Pi- ի GPIO կապումներին: Միացրեք VCC- ն 5.5 Վ հզորության, GND- ը `գետնին, իսկ OUT- ը` Pi- ի 11 -ի կապակցիչին:

Քայլ 2: Համոզվեք, որ ձեր Pi- ն միացված է ինտերնետին

Համոզվեք, որ ձեր Pi- ն միացված է ինտերնետին
Համոզվեք, որ ձեր Pi- ն միացված է ինտերնետին

Այժմ միացրեք Pi- ն ՝ այն միացնելով էներգիայի աղբյուրին և հաստատեք, որ միացված եք ինտերնետին ՝ օգտագործելով ping հրամանը: Եթե չգիտեք, թե ինչպես միացնել ձեր Pi- ն ինտերնետին, կտտացրեք այստեղ:

sudo ping www.google.com

Եթե հաջողակ եք, ապա պետք է տեսնեք, որ տվյալները ստացվում են Google- ի կողմից:

Բացի այդ, կարող եք օգտագործել ifconfig ՝ ձեր IP հասցեն տեսնելու համար:

sudo ifconfig

Քայլ 3: Կարգավորեք տեսախցիկը

Օգտագործեք հետևյալ հրամանը ՝ կազմաձևման միջերեսը բացելու և տեսախցիկը միացնելու համար «միջերեսային ընտրանքներում»:

sudo raspi-config

Վերագործարկվելուց հետո կարող եք ցուցադրել ձեր տեսախցիկի կարգավիճակը `ապահովելու համար, որ այն պատշաճ կերպով միացված է:

vcgencmd get_camera

Վերջապես, տեղադրեք picamera մոդուլը:

pip տեղադրել picamera

Քայլ 4: Տեղադրեք Flask

Տեղադրեք կոլբա և կոլբա հանգստացնող մոդուլ Python- ի համար.

sudo apt-get տեղադրեք python-dev python-pip

python -m pip install flask flask -restful

Հաջորդը, մենք կտեղադրենք python flask մոդուլ, որն օգտագործվում է ձևեր ստեղծելու համար:

pip տեղադրել flask-wtf

Քայլ 5: Ստեղծեք ձևի դաս

Ստեղծեք տեղեկատու iotProject անունով ՝ ձեր բոլոր ֆայլերը պահելու համար:

sudo mkdir iot Նախագիծ

Ստեղծեք «camControl.py» անունով պիթոնի ֆայլ:

sudo nano camControl.py

Այս ֆայլում մենք կստեղծենք մեր ձևի դասը, որը թույլ է տալիս մեզ ստեղծել վեբ ձև տեքստային տուփերով և բացվող ընտրացանկով, որպեսզի օգտվողը կարողանա փոխել տեսախցիկի կարգավորումները, ձեռքով սկսել/դադարեցնել ձայնագրությունը և նկարահանել տեսանյութ:

flask_wtf ներմուծումից FlaskFormfrom wtforms.validators- ից ներմուծում են տվյալները Պահանջվում է wtforms ներմուծումից SubmitField wtforms- ից ներմուծման վավերացուցիչներ, IntegerField, BooleanField, SelectField

class camFrame (FlaskForm):

videoDuration = IntegerField («Գրանցման ժամանակը (վայրկյաններով)»)

զգայունություն = IntegerField ('Շարժման զգայունություն (միջակայք 2500-10000) n Որքան մեծ է թիվը, այնքան զգայուն է տեսախցիկը', վավերացուցիչներ = [validators. NumberRange (min = 2500, max = 10000, հաղորդագրություն = 'Արժեքը սահմաններից դուրս')])

ընտրանքներ = SelectField («Ընտրանքներ», ընտրություններ = [(«ոչ», «Ոչ մի գործողություն»), («rec», «Սկսել ձայնագրումը»), («դադարեցնել», «դադարեցնել ձայնագրությունը»), ('նկար', 'Լուսանկարել')])

ներկայացնել = SubmitField ('Ներկայացնել')

Քայլ 6: Ստեղծեք շշերի ձևանմուշ

Ստեղծեք շշերի ձևանմուշ
Ստեղծեք շշերի ձևանմուշ

Օգտվողի միջերես ստեղծելու համար դուք պետք է ձևավորեք Ֆլասկի ձևանմուշ, որն օգտագործում է ձեր ստեղծած ձևը: Այս ֆայլը կգրվի html- ով և կպահվի ձևանմուշ կոչվող թղթապանակում, որը պետք է լինի ձեր ձևի նույն գրացուցակում:

Ձեր ձևանմուշների թղթապանակի ներսում ստեղծեք ֆայլ, որը կոչվում է index.html: Այս ֆայլի ներսում կրկնօրինակեք վերը նշված ծածկագիրը:

Քայլ 7: Կաղապարը մատուցիր

Այժմ ժամանակն է ստեղծել ֆայլ, որը մատուցում է ձևանմուշը: Ստեղծեք appCam.py անունով ֆայլ (համոզվեք, որ այլևս կաղապարների թղթապանակում չեք): Կաղապարում օգտագործվող ցանկացած դինամիկ բովանդակություն պետք է օգտագործվի որպես անվանված արգումենտ render_template () կոչում:

ներմուծել camControlfromb- ից ներմուծել շիշ, մատուցել_մոդել, հարցում, արձագանք flask_restful import Resource- ից, Api, reqparse

հավելված = Ֆլասկ (_ անուն _)

app.config ['SECRET_KEY'] = '13542' api = Api (հավելված)

վերլուծիչ = reqparse. RequestParser ()

parser.add_argument ('dur', type = int, help = 'Տեսանյութի տևողությունը, երբ շարժումը հայտնաբերվում է') parser.add_argument ('sens', type = int, help = 'Շարժման մակարդակը պահանջվում է ձայնագրությունը խթանելու համար') վերլուծիչ.add_argument ('opt', type = str, help = 'Ձեռքով տեսագրել կամ նկարել նկար')

դասի թարմացում (ռեսուրս).

#Stuff for wtforms def post (self): args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #գրել տեքստային ֆայլին, որը խոսում է զուգահեռ cameraSettingsFile = բաց տեսախցիկի հետ + '\ n') #write sens cameraSettingsFile.write (args ['opt'] + '\ n') #write opt cameraSettingsFile.close () return {'dur': args ['dur'], 'sens': args ['sense'], 'opt': args ['opt']}

@app.route ('/', մեթոդներ = ['GET', 'POST'])

def index ()..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') #գրել dur cameraSettingsFile.write (args [1] [1] + '\ n') #write sens cameraSettingsFile.write (args [2] [1] + '\ n') #գրել opt cameraSettingsFile.close () imageDictionary = {"filename": "image.jpg"} վերադարձնել render_template ('index.html', form = form, image = imageDictionary)

api.add_resource (Թարմացնել, '/թարմացնել/')

եթե _name_ == '_ հիմնական_':

app.run (host = '0.0.0.0', port = 80, debug = True, threaded = True)

Քայլ 8: Ստեղծեք տեսախցիկի օպերատորի դաս

Այժմ մենք ցանկանում ենք ստեղծել մի ֆայլ, որը կոչվում է camOperator.py: Դրանում մենք կդարձնենք տեսախցիկի դասարան `տեսախցիկը գործելու մեթոդներով` օգտագործելով արդեն հասանելի PiCamera գործառույթները: Հաջորդ քայլում մենք կօգտագործենք այս օբյեկտի օրինակ, որտեղ մենք կհամատեղենք տեսախցիկի և շարժման տվիչի ֆունկցիոնալությունը:

Այս դասում սահմանված մեթոդները փոխում են անվտանգության տեսախցիկի «ձայնագրման» կարգավորումները ՝ օգտվողի տրամադրած զգայունության և տևողության մուտքերի միջոցով ՝ միաժամանակ սահմանելով այս փոփոխականների կանխադրված արժեքները, եթե օգտագործողի մուտքը չկա:

ներմուծել RPi. GPIO- ն որպես GPIOimport time ներմուծել picamera datetime- ից data importetetetime

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

հայտնաբերել = 0

դասի տեսախցիկ Օպերատոր:

def _init _ (self):

#constructor self.cam = picamera. PiCamera () self.data = self.dur = 10 self.sens = 2500 self.opt = "ոչ մեկը"

def record (self, dur):

#Գրանցումներ տվյալ տևողության համար, որը սահմանվել է վերահսկիչի կողմից videoName = str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') Self.cam.start_recording ('/home/pi/iotProject/videos/' + videoName + '.h264') time.sleep (dur) self.cam.stop_recording ()

def գործողություն (self, dur, sens):

Տեսախցիկի #հիմնական աշխատանքը, որն անընդհատ ստուգում է ՝ արդյոք մոտակայքում մարդ կա՞, եթե մարդը բավականաչափ երկար է մնում, սկսում ենք ձայնագրել: գլոբալ հայտնաբերում i = GPIO.input (11), եթե i == 0: #Երբ շարժման սենսորից ելքը OWԱՐ է հայտնաբերում = 0 անգամ: քուն (0.1) elif i == 1: #Երբ շարժման տվիչից ելքը Բարձր տպագիր է (" շարժումը հայտնաբերված է " +str (հայտնաբերել)) եթե հայտնաբերել> = sens*10: self.record (dur) print (" RECORDED ") detect = 0 time.sleep (0.1) detective += 1

Քայլ 9: Ստեղծեք ձայնագրման մոդուլ

Այս ծրագրի համար անհրաժեշտ վերջին ծրագիրը գրված կլինի rec.py անունով ֆայլում: Այս ֆայլը տեսախցիկին պատմում է, թե երբ պետք է նկարահանել, որքան ժամանակ ձայնագրել և եթե/երբ նկարել: Դա անում է ՝ անընդհատ ստուգելով և կարդալով տեքստային ֆայլում գրված օգտվողի տվյալները 5 -րդ քայլից: pi- ն ՝.h264 կամ-j.webp

'' 'Գործում է կոլբայի սերվերին զուգահեռ `կարդալով սերվերի ձևերով սահմանված հսկողության փոփոխականները: Սերվերի կառավարման փոփոխականները ձևերը ներկայացնելուց հետո տեղադրվում են առանձին ֆայլում: Rec մոդուլը կարդում է այս փոփոխականները և դրանց հիման վրա թարմացնում տեսախցիկը: '' 'camOperator ներմուծել datetime ներմուծման datetime ներմուծման ժամանակ

rc = camOperator.cameraOperator ()

cameraSettingsFile = բաց ("cameraSettings.txt", 'w') cameraSettingsFile.close () #այստեղ, մենք բացում և փակում ենք գրելու ռեժիմում, որպեսզի ֆայլը պարունակող բովանդակությունը ջնջվի մինչև հիմնական օղակի գործարկումը

#Շարունակական հանգույց, որը հետևում է ՝ արդյոք մարդիկ մոտակայքում են: Եթե նրանք են, ապա

#տեսախցիկը սկսում է ձայնագրվել: Այս գործառույթը միաժամանակ աշխատում է #խցիկի սերվերի միջոցով, որը վերահսկում է այս տեսախցիկը: recordingInProcess = False while True: #check/record if (recordingInProcess == False): rc.operation (rc.dur, rc.sens) #փոխել տեսախցիկի կարգավորումները ՝ հիմնված սերվերի cameraSettingsFile = բաց ("cameraSettings.txt", 'r') settingNum = 0 cameraSettingsFile.readlines (). if settingNum == 0: #Duration change rc.dur = int (setting) elif settingNum == 1: #ensգայունության փոփոխություն rc.sens = int (պարամետր) elif settingNum == 2: #Գործողության փոփոխություն rc.opt = կարգավորումը settingNum += 1 ֆոտոխցիկ

#կատարել գործողություն

# if rc.opt == "none": # շարունակել, եթե rc.opt == "rec / n" և recordingInProcess == Սխալ. տպել («Գործարկվում է վերահսկիչից ձայնագրության հրամանը») # Ստեղծել տեսանյութի անուն ՝ ներկայիս ժամանակի տեսանյութի անունով = "snappedVid _"+str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') rc.cam.start_recording ('/home/pi/iotProject /videos/' + videoName +'.h264 ') recordingInProcess = True elif rc.opt == "stop / n" and recordingInProcess == True: print ("Stop control record from controller") rc.cam.stop_recording () recordingInProcess = Կեղծ cameraSettingsFile = բաց ("cameraSettings.txt", 'w') cameraSettingsFile.write (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile գրել ("none / n") rc.opt = "none / n" elif rc.opt == "pic / n" and recordingInProcess == False: print ("Snap a pic command from controller") pictureName = "snappedPic_ "+str (datetime.now ()) pictureName = pictureName.replace (':', ') pictureName = pictureName.replace ('. ',') rc.cam.st art_preview () time.sleep (5) rc.cam.capture ('pictures/' + pictureName + '.jpg') rc.cam.stop_preview () cameraSettingsFile = open ("cameraSettings.txt", 'w') cameraSettingsFile: գրել (str (rc.dur)+'\ n') cameraSettingsFile.write (str (rc.sens)+'\ n') cameraSettingsFile.write ("none / n") rc.opt = "none / n"

Քայլ 10: Սկսեք սերվերը

Սկսեք սերվերը
Սկսեք սերվերը

SSH- ն pi- ում և գործարկեք սերվերը ՝ օգտագործելով վերևում նշված հրամանի տողը:

Քայլ 11: ՓՈՐՁԵՔ

ՓՈՐՁԱՐԿԵԼ!
ՓՈՐՁԱՐԿԵԼ!
ՓՈՐՁԱՐԿԵԼ!
ՓՈՐՁԱՐԿԵԼ!

Մուտք գործեք կայք ՝ օգտագործելով IP հասցեն, և դուք պետք է կարողանաք վերահսկել տեսախցիկը հեռակա կարգով:

Խորհուրդ ենք տալիս: