Мазмұны:

Raspberry Pi қауіпсіздік камерасы: 11 қадам (суреттермен)
Raspberry Pi қауіпсіздік камерасы: 11 қадам (суреттермен)

Бейне: Raspberry Pi қауіпсіздік камерасы: 11 қадам (суреттермен)

Бейне: Raspberry Pi қауіпсіздік камерасы: 11 қадам (суреттермен)
Бейне: BTT - Manta M4P CB1 Klipper install 2024, Қараша
Anonim
Raspberry Pi қауіпсіздік камерасы
Raspberry Pi қауіпсіздік камерасы

Бұл қадамдық нұсқаулық, Raspberry Pi көмегімен IoT, қозғалысты белсендірілген қауіпсіздік камерасын жасау әдісі. Сіз қолданушыға камераның сезімталдығы мен жазылу уақытын реттеуге, жазбаны қолмен бастауға/тоқтатуға және/немесе жергілікті сақталатын суретке түсуге мүмкіндік беретін колбаның веб -сервері мен формасын жасауды үйренесіз.

Жабдықтар

  • Таңқурай Pi 3
  • Pi камерасы
  • PIR қозғалыс сенсоры
  • SD картасы
  • Қуат көзі

1 -қадам: Жабдықты жинаңыз

Аппараттық құралдарды жинаңыз
Аппараттық құралдарды жинаңыз
Аппараттық құралдарды жинаңыз
Аппараттық құралдарды жинаңыз
Аппараттық құралдарды жинаңыз
Аппараттық құралдарды жинаңыз
Аппараттық құралдарды жинаңыз
Аппараттық құралдарды жинаңыз

Pi өшірілген кезде, micro SD картасын Pi ұясына салыңыз. Камера модулінің таспалы кабелін Pi камералық модуль портына салыңыз. Содан кейін PRI қозғалыс детекторының 3 түйреуішін (VCC, OUT және GND деп белгіленген) Pi GPIO түйреуіштеріне қосыңыз. VCC -ті 5,5 В қуатына, GND -ді жерге және OUT -ті Пи -ге 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

Соңында пикамера модулін орнатыңыз.

пикамераны орнатыңыз

4 -қадам: Колбаны орнатыңыз

Python үшін колбаны және колбаға демалатын модульді орнатыңыз:

sudo apt-get python-dev python-pip орнатыңыз

python -m pip колбасын орнатады

Әрі қарай, біз формаларды жасау үшін қолданылатын питон колбасы модулін орнатамыз.

pip flask-wtf орнатыңыз

5 -қадам: Форма класын жасаңыз

Барлық файлдарды сақтау үшін iotProject деп аталатын каталог жасаңыз.

sudo mkdir iotProject

«CamControl.py» деп аталатын питон файлын жасаңыз.

sudo nano camControl.py

Бұл файлда біз пайдаланушыға камера параметрлерін өзгертуге, қолмен жазуды бастау/тоқтатуға және бейне түсіруге мүмкіндік беретін мәтін ұялары мен ашылмалы мәзірі бар веб -форма жасауға мүмкіндік беретін біздің форма класын құрамыз.

flask_wtf импортынан FlaskFormfrom wtforms.validators импорттау DataRequired wtforms импорттау SubmitField wtforms импорт валидаторларынан, IntegerField, BooleanField, SelectField

сынып camFrame (FlaskForm):

videoDuration = IntegerField ('Жазу уақыты (секундпен)')

сезімталдық = IntegerField ('Қозғалыс сезімталдығы (диапазоны 2500-10000) nСан неғұрлым жоғары болса, камераның сезімталдығы соғұрлым төмен болады', валидаторлар = [validators. NumberRange (min = 2500, max = 10000, хабарлама = 'Мәннен тыс' '])

options = SelectField ('Options', choices = [('none', 'Action'), ('rec', 'Start Recording'), ('stop', 'Stop Stop'), ('сурет', 'Суретке түсіру')])

жіберу = SubmitField ('Жіберу')

6 -қадам: Колбаның үлгісін жасаңыз

Колбаның үлгісін жасаңыз
Колбаның үлгісін жасаңыз

Пайдаланушы интерфейсін құру үшін сіз жаңа жасаған пішінді қолданатын Flask үлгісін жасауыңыз керек. Бұл файл html -де жазылады және сіздің пішініңізбен бір каталогта болуы керек шаблондар қалтасында сақталады.

Үлгілер қалтасының ішінде index.html деп аталатын файл жасаңыз. Бұл файлдың ішінде жоғарыда көрсетілген кодты қайталаңыз.

7 -қадам: Үлгіні көрсету

Енді үлгіні көрсететін файлды жасау уақыты келді. AppCam.py атты файл жасаңыз (бұдан былай шаблондар қалтасында болмағаныңызға көз жеткізіңіз). Үлгіде пайдаланылатын кез келген динамикалық мазмұн render_template () шақыруында аталған аргумент ретінде қолданылуы керек.

import camControlfrom колбадан импорттау Колбасы, render_template, сұрау, flask_restful импорттаудың жауабы Resource, Api, reqparse

app = Flask (_ аты _)

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 = 'Қолмен бейне жазу немесе суретке түсіру')

сынып жаңарту (ресурс):

Wtforms def post (self) үшін материалдар: args = parser.parse_args () #rc.input (args ['dur'], args ['sens'], args ['opt']) #мәтіндік файлға жазу параллель жұмыс істейтін камерамен сөйлеседі cameraSettingsFile = open («cameraSettings.txt», 'w') cameraSettingsFile.write (args ['dur'] + '\ n') #write dur cameraSettingsFile.write (args ['sens'] + '\ n') #write sensor cameraSettingsFile.write (args ['opt'] + '\ n') #write opt cameraSettingsFile.close () return {'dur': args ['dur'], 'sens': args ['сезім'], 'таңдау': args ['таңдау']}

@app.route ('/', әдістер = ['АЛУ', 'ПОСТ'])

def index (): «» «Контроллердің бастапқы беті» «» form = camControl.camFrame () #бұл сұраныс.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') #жазу камерасыSettingsFile.write (args [2] [1] + '\ n') #write opt cameraSettingsFile.close () imageDictionary = {«файл атауы»: «image.jpg»} қайтару render_template ('index.html', форма = пішін, сурет = imageDictionary))

api.add_resource (Жаңарту, '/update/')

егер _ аты _ == '_ негізгі _':

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

8 -қадам: Камера операторы класын жасаңыз

Енді біз camOperator.py деп аталатын файл жасағымыз келеді. Онда біз бұрыннан бар PiCamera функцияларын қолдана отырып, камераны басқару әдістері бар камера сыныбын жасаймыз. Келесі қадамда біз осы объектінің данасын қолданамыз, онда біз камера мен қозғалыс сенсорының функционалдығын біріктіреміз.

Бұл сыныпта анықталған әдістер қолданушы беретін сезімталдық пен ұзақтықты енгізуді қолдана отырып, қауіпсіздік камерасындағы «жазба» параметрлерін өзгертеді, ал егер пайдаланушы енгізуі болмаса, осы айнымалылар үшін әдепкі мәндерді орнатады.

RPi. GPIO импорттау уақыты GPIO импорттық уақытты импорттау датамадан datetime импорттау

GPIO.setmode (GPIO. BOARD)

GPIO.setup (11, GPIO. IN)

анықтау = 0

сынып камерасы Оператор:

def _init _ (өзін):

#конструктор self.cam = picamera. PiCamera () self.data = self.dur = 10 self.sens = 2500 self.opt = «none»

def рекорды (өзіндік, ұзақ):

#NameVideoName = 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 операциясы (өзіндік, ұзақ, сезім):

#Камераның негізгі жұмысы, ол адамның жанында екенін тексереді, егер адам жеткілікті ұзақ болса, біз жазуды бастаймыз! жаһандық анықтау i = GPIO.input (11) if i == 0: #Қозғалыс сенсорынан шығыс LOW анықталса = 0 уақыт.ұйқы (0.1) қозғалыс анықталды « +str (анықтау)) егер анықтау> = sens*10: self.record (dur) басып шығару (» RECORDED «) анықтау = 0 уақыт.ұйқы (0.1) анықтау += 1

9 -қадам: Жазу модулін жасаңыз

Бұл жобаға қажет соңғы бағдарлама rec.py файлында жазылады. Бұл файл камераға қашан жазылатынын, қанша уақыт жазылатынын және егер/қашан суретке түсіру керектігін айтады. Ол 5 -қадамнан бастап мәтіндік файлға жазылған пайдаланушы деректерін үнемі тексеріп, оқу арқылы жасайды, егер файл жаңартылған болса, ол сәйкесінше сезімталдық пен ұзақтық мәндерін реттейді, содан кейін, егер жазба немесе сурет түсірілсе, ол мазмұнды сақтайды. pi.h264 немесе-j.webp

'' 'Колба серверімен қатар жұмыс істейді, сервер формалары орнатқан басқару айнымалыларын оқиды. Пішіндер жіберілгеннен кейін серверді басқару айнымалылары бөлек файлда орнатылады. Rec модулі бұл айнымалыларды оқиды және олардың негізінде камераны жаңартады. '' 'camOperator -ды datetime импорттау datetime импорттау уақыты

rc = camOperator.cameraOperator ()

cameraSettingsFile = open («cameraSettings.txt», 'w') cameraSettingsFile.close () #мұнда біз негізгі цикл іске қосылмай тұрып файл ішіндегі мазмұнды жою үшін жазу режимінде ашамыз және жабамыз.

#Адамдардың жақын жерде екенін тексеретін үздіксіз цикл. Егер олар болса, онда

#камера жазуды бастайды. Бұл функция осы камераны басқаратын #server колбасымен қатар жұмыс істейді. recordInProcess = «False» кезінде «жалған»: #тексеріңіз/жазыңыз, егер (recordInProcess == False): rc.operation (rc.dur, rc.sens) #камераның параметрлерін камераныңSettingsFile = open негізінде өзгертіңіз («cameraSettings.txt», 'r') settingNum = 0 cameraSettingsFile.readlines () параметріне орнатуға арналған (): if settingNum == 0: #Ұзақтықты өзгерту rc.dur = int (параметр) elif settingNum == 1: #Сезімталдықты өзгерту rc.sens = int (параметр) elif settingNum == 2: #Action change rc.opt = setting settingNum += 1 cameraSettingsFile.close ()

#әрекетті орындау

# if rc.opt == «none»: # жалғастырыңыз, егер rc.opt == «rec / n» және recordInProcess == False: print (басып шығару («Контроллерден жазу пәрмені»)) # Ағымдағы уақытқа байланысты бейне атауын жасаңыз videoName = «snappedVid _»+str (datetime.now ()) videoName = videoName.replace (':', ') videoName = videoName.replace ('. ',') rc.cam.start_recording ('/home/pi/iotProject) /videos/' + videoName +'.h264 ') recordInProcess = True elif rc.opt == «stop / n» and recordInProcess == True: басып шығару («Контроллерден жазба пәрменін тоқтату») rc.cam.stop_recording () recordInProcess = 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 («Контроллерден суретке түсіру командасын алу») pictureName = «snappedPic_ «+str (datetime.now ()) pictureName = pictureName.replace (':', ') pictureName = pictureName.replace ('. ',') rc.cam.st art_preview () time.sleep (5) rc.cam.capture ('суреттер/' + сурет атауы + '.jpg') rc.cam.stop_preview () cameraSettingsFile = ашық («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 -адрес арқылы веб -бетке кіріңіз, сонда сіз камераны қашықтан басқара аласыз!

Ұсынылған: