Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ################################################################################
- # PROJETO FingerPrint_Rack 20/02/2018
- # ORMEL - DESENVOLVIMENTO DE SOFTWARE
- # http://www.ormel.com.br/
- # Avenida Washington Soares, 2400 - Edson Queiroz, Fortaleza - CE, 60811-341
- ################################################################################
- #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////////
- #|||||||||||||||||||||||||||||||| Bibliotecas ||||||||||||||||||||||||||||||||
- from pyfingerprint.pyfingerprint import PyFingerprint
- from email.mime.multipart import MIMEMultipart
- from email.mime.text import MIMEText
- import Adafruit_CharLCD as LCD
- import RPi.GPIO as gpio
- import subprocess as sp
- import threading
- import smtplib
- import time
- import sys
- import os
- #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////////
- #|||||||||||||||||||||||||||||| Inicializações |||||||||||||||||||||||||||||||
- PIR = 26
- ALM_LED = 21
- BUZZER = 20
- RELE = 16
- RS = 18
- EN = 23
- D4 = 24
- D5 = 25
- D6 = 8
- D7 = 7
- LCD_C = 16
- LCD_L = 2
- LCD_BL = 1
- OK_B = 5
- # DEL = 6
- INC = 13
- DEC = 19
- HIGH = 1
- LOW = 0
- Reg_Mstr = True
- Conf_Mode = False
- Mstr_Flag = False
- Alarm = True
- TA = False
- alarm_Tcount = 0
- OPT_count = 0
- gpio.setwarnings(False)
- gpio.setmode(gpio.BCM)
- gpio.setup(OK_B, gpio.IN, pull_up_down=gpio.PUD_UP)
- # gpio.setup(DEL, gpio.IN, pull_up_down=gpio.PUD_UP)
- gpio.setup(INC, gpio.IN, pull_up_down=gpio.PUD_UP)
- gpio.setup(DEC, gpio.IN, pull_up_down=gpio.PUD_UP)
- gpio.setup(PIR, gpio.IN, pull_up_down=gpio.PUD_DOWN)
- gpio.setup(ALM_LED, gpio.OUT)
- gpio.setup(BUZZER, gpio.OUT)
- gpio.setup(RELE, gpio.OUT)
- lcd = LCD.Adafruit_CharLCD(RS, EN, D4, D5,D6, D7, LCD_C, LCD_L,LCD_BL)
- #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////////
- #///////////////////////////////// Funções \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
- #============================= TIMER_ALARM ===================================
- #===============================================================================
- def timer_Alarm():
- global Alarm
- Alarm = True
- gpio.output(RELE, HIGH)
- print('Alarme Ativo!')
- lcd.clear()
- lcd.message(' Alarme ')
- lcd.message('\n Reativado ')
- time.sleep(2)
- lcd.clear()
- lcd.message('= Press. Botao =')
- lcd.message('\n Biometria:')
- #================================ INC_MSSG ===================================
- #===============================================================================
- def intro_MSSG():
- global Alarm
- if (Conf_Mode):
- lcd.clear()
- lcd.message(' Mestre ')
- lcd.message('\n Reconhecido ')
- time.sleep(1)
- lcd.clear()
- lcd.message(' Alarme ')
- lcd.message('\n Desativado ')
- time.sleep(1)
- lcd.clear()
- lcd.message(' Modo ')
- lcd.message('\n Configuracao')
- time.sleep(1)
- lcd.clear()
- lcd.message(' Selecionar ')
- lcd.message('\n Opcao: ')
- time.sleep(1)
- print('== Biometria Mestra Reconhecida! ==')
- print('== Alarme Desativado ==')
- print('== Modo de Configuração ==')
- print('Selcione uma das Opções de Configuração:')
- print('Enroll')
- print('Del')
- print('Exit')
- else:
- if (Alarm == True):
- lcd.clear()
- lcd.message('= Press. Botao =')
- lcd.message('\n Biometria:')
- print('Pressione Qualquer Tecla para Identificação Biométrica:')
- else:
- lcd.clear()
- lcd.message(' Biometria ')
- lcd.message('\n Reconhecida ')
- time.sleep(1)
- lcd.clear()
- lcd.message(' Alarme ')
- lcd.message('\n Desativado ')
- time.sleep(1)
- lcd.clear()
- lcd.message(' Passagem ')
- lcd.message('\n Liberada ')
- time.sleep(1)
- print('== Biometria Reconhecida ==')
- print('== Alarme Desativado ==')
- print('== Passagem Liberada ==')
- #================================ E-MAIL =====================================
- #===============================================================================
- def mailMSG(body):
- fromaddr = "dsoftware46.cc@interconta.com.br"
- toaddr = "alexistpw@gmail.com"
- msg = MIMEMultipart()
- msg['From'] = fromaddr
- msg['To'] = toaddr
- msg['Subject'] = "Controle de Acesso Rack"
- #body = "Super Raspberry E-Mail!"
- msg.attach(MIMEText(body, 'plain'))
- server = smtplib.SMTP('smtp.gmail.com', 587)
- server.starttls()
- server.login(fromaddr, "lex11965611")
- text = msg.as_string()
- server.sendmail(fromaddr, toaddr, text)
- server.quit()
- #================================ OK_BOL ======================================
- #===============================================================================
- def enrollFinger():
- global Reg_Mstr
- count_T = 0
- lcd.clear()
- lcd.message(' Inserir ')
- lcd.message('\n Digital... ')
- print('Waiting for finger...')
- while (f.readImage() == False):
- time.sleep(.3)
- count_T += 1
- if (count_T == 33):
- lcd.clear()
- lcd.message(' Digital ')
- lcd.message('\n nao Inserida ')
- time.sleep(1)
- print('Finger not Found')
- return
- f.convertImage(0x01)
- result = f.searchTemplate()
- positionNumber = result[0]
- if ( positionNumber >= 0 ):
- print('Template already exists at position #' + str(positionNumber))
- lcd.clear()
- lcd.message(' Digital #'+str(positionNumber))
- lcd.message('\n ja Cadastrada ')
- time.sleep(2)
- return
- print('Remove finger...')
- lcd.clear()
- lcd.message(' Remover')
- lcd.message('\n Digital ')
- while (f.readImage() == True):
- pass
- print('Waiting for same finger again...')
- lcd.clear()
- lcd.message(' Reinserir')
- lcd.message('\n Digital ')
- while (f.readImage() == False):
- pass
- f.convertImage(0x02)
- if (f.compareCharacteristics() == 0):
- print ('Fingers do not match')
- lcd.clear()
- lcd.message('!! ERRO !!')
- lcd.message('\n Paridade')
- time.sleep(2)
- return
- f.createTemplate()
- if (Reg_Mstr == False):
- f.storeTemplate(0)
- # mssg = "New Master Biometry Registered at FP_0"
- # mailMSG(mssg)
- Reg_Mstr = True
- else:
- positionNumber = f.storeTemplate()
- # mssg = "New template position at FP_" + str(positionNumber)
- # mailMSG(mssg)
- print('Finger Enrolled successfully!')
- lcd.clear()
- lcd.message('Biometria #' + str(positionNumber))
- lcd.message('\n Cadastrada!')
- time.sleep(2)
- #============================== BUSCA BIOMETRIA ==============================
- #===============================================================================
- def searchFinger():
- global Mstr_Flag
- global Alarm
- count_T = 0
- try:
- print('Waiting for finger...')
- lcd.clear()
- lcd.message(' Inserir ')
- lcd.message('\n Digital... ')
- while( f.readImage() == False ):
- time.sleep(.3)
- count_T += 1
- if (count_T == 33):
- print('Finger not Found')
- lcd.clear()
- lcd.message(' Digital ')
- lcd.message('\n nao Inserida ')
- time.sleep(2)
- return False
- f.convertImage(0x01)
- result = f.searchTemplate()
- positionNumber = result[0]
- accuracyScore = result[1]
- if (positionNumber == -1) :
- print('No match found!')
- lcd.clear()
- lcd.message('! Biometria !')
- lcd.message('\n nao Cadastrada')
- time.sleep(2)
- return False
- elif (positionNumber == 0):
- Mstr_Flag = True
- Alarm = False
- print('Found template at position #' + str(positionNumber))
- lcd.clear()
- lcd.message(' Biometria #' + str(positionNumber))
- lcd.message('\n Identificada')
- # mssg = "Master Biometry Confirmed!"
- # mailMSG(mssg)
- time.sleep(2)
- return True
- else:
- Alarm = False
- Mstr_Flag = False
- print('Found template at position #' + str(positionNumber))
- lcd.clear()
- lcd.message(' Biometria #' + str(positionNumber))
- lcd.message('\n Identificada')
- # mssg = "Entrada Autorizada para FP_" + str(positionNumber)
- # mailMSG(mssg)
- time.sleep(1)
- return True
- except Exception as e:
- print('Operation failed!')
- print('Exception message: ' + str(e))
- exit(1)
- #============================== DELETA BIOMETRIA =============================
- #===============================================================================
- def delFinger():
- positionNumber = 0
- count=0
- print('Deleting FingerPrint!')
- lcd.clear()
- lcd.message('=Del. Biometria=')
- lcd.message('\nTemplate #' + str(count))
- while (gpio.input(OK_B) == 1): # here OK_B key means ok
- if (gpio.input(INC) == 0):
- count=count+1
- if count>1000:
- count=1000
- print('Position: ' + str(count))
- lcd.clear()
- lcd.message('=Del. Biometria=')
- lcd.message('\nTemplate #' + str(count))
- time.sleep(0.3)
- elif (gpio.input(DEC) == 0):
- count=count-1
- if count<0:
- count=0
- print('Position: ' + str(count))
- lcd.clear()
- lcd.message('=Del. Biometria=')
- lcd.message('\nTemplate #' + str(count))
- time.sleep(0.3)
- positionNumber=count
- if (f.deleTemplate(positionNumber) == True):
- print('Template deleted!')
- lcd.clear()
- lcd.message('= Biometria =')
- lcd.message('\n Deletada')
- # mssg = "FingerPrint FP_" + str(positionNumber) + "Deletado!"
- # mailMSG(mssg)
- time.sleep(2)
- #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////////
- #||||||||||||||||||||||||||||||||||| SETUP |||||||||||||||||||||||||||||||||||
- gpio.output(BUZZER, HIGH)
- gpio.output(RELE, HIGH)
- try:
- f = PyFingerprint('/dev/ttyUSB0', 57600, 0xFFFFFFFF, 0x00000000)
- if ( f.verifyPassword() == False ):
- raise ValueError('The given fingerprint sensor password is wrong!')
- lcd.clear()
- lcd.message('!! ERRO !!')
- lcd.message('\n Sensor Biom.')
- time.sleep(2)
- except Exception as e:
- print('Exception message: ' + str(e))
- gpio.cleanup()
- exit(1)
- print('Currnetly used templates: ' + str(f.getTemplateCount()) + '/' + str(f.getStorageCapacity()))
- try:
- print('Testando Mestre:')
- tableIndex = f.getTemplateIndex(0) #index page (0, 1, 2, 3) cada página com 250 registros (1000 ao todo)
- if tableIndex[0] == True:
- print('Mestre Definido.')
- else:
- print('Mestre Não Definido.')
- lcd.clear()
- lcd.message(' Mestre Nao')
- lcd.message('\n Definido!')
- time.sleep(2)
- Reg_Mstr = False
- while (Reg_Mstr == False):
- enrollFinger()
- print('Mestre Definido.')
- lcd.clear()
- lcd.message(' Mestre')
- lcd.message('\n Definido!')
- time.sleep(2)
- except Exception as e:
- print('Operation failed!')
- lcd.clear()
- lcd.message(' Operacao')
- lcd.message('\n Falhou!')
- time.sleep(2)
- print('Exception message: ' + str(e))
- intro_MSSG()
- #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////////
- #||||||||||||||||||||||||||||||||||| LOOP ||||||||||||||||||||||||||||||||||||
- while(1):
- if (Conf_Mode):
- if (gpio.input(OK_B) == 0):
- while (gpio.input(OK_B) == 0):
- pass
- if OPT_count == 0:
- enrollFinger()
- if OPT_count == 1:
- OPT_count = 0
- delFinger()
- if OPT_count == 2:
- OPT_count = 0
- Conf_Mode = False
- Alarm = True
- print('Encerrando Modo de Configuração')
- lcd.clear()
- lcd.message(' Encerrando')
- lcd.message('\n Modo Conf.')
- gpio.output(RELE, HIGH)
- time.sleep(1)
- intro_MSSG()
- time.sleep(0.6)
- if (gpio.input(INC) == 0):
- OPT_count += 1
- if OPT_count > 2: OPT_count = 2
- # if OPT_count == 0:
- # print('== Cadastrar Nova Biometria ==')
- if OPT_count == 1:
- print('== Deletar Biometria ==')
- lcd.clear()
- lcd.message('= Deletar =')
- lcd.message('\n Biometria')
- if OPT_count == 2:
- print('== Sair do Modo de Configuração ==')
- lcd.clear()
- lcd.message('= Sair =')
- lcd.message('\nModo de Config.')
- time.sleep(2)
- while gpio.input(INC) == 0:
- pass
- time.sleep(0.6)
- if gpio.input(DEC) == 0:
- OPT_count -= 1
- if OPT_count < 0: OPT_count = 0
- if OPT_count == 0:
- print('== Cadastrar Nova Biometria ==')
- lcd.clear()
- lcd.message('= Cadastrar =')
- lcd.message('\n Biometria ')
- if OPT_count == 1:
- print('== Deletar Biometria ==')
- lcd.clear()
- lcd.message('= Deletar =')
- lcd.message('\n Biometria')
- # if OPT_count == 2:
- # print('== Sair do Modo de Configuração ==')
- while gpio.input(DEC) == 0:
- pass
- time.sleep(0.6)
- else:
- if (gpio.input(OK_B) == 0) or (gpio.input(INC) == 0) or (gpio.input(DEC) == 0):
- if (searchFinger() == True):
- Alarm = False
- if (Mstr_Flag == True):
- Conf_Mode = True
- gpio.output(RELE, LOW)
- intro_MSSG()
- else:
- gpio.output(RELE, LOW)
- intro_MSSG()
- if (gpio.input(PIR) == 1) and (Alarm == True):
- print('Presença Detectada!')
- lcd.clear()
- lcd.message('! Presença !')
- lcd.message('\n Detectada')
- while gpio.input(PIR) == 1:
- time.sleep(1)
- alarm_Tcount += 1
- if (alarm_Tcount == 3):
- alarm_Tcount = 0
- extProc_00 = sp.Popen(['sudo','service','motion','start'])
- extProc_01 = sp.Popen(['python3','Documents/Alexis/Rasp_Teste/Hack_CA_Alarm.py']) # runs myPyScript.py # subprocess.call("Hack_CA_Alarm.py")
- status_00 = sp.Popen.poll(extProc_00)
- status_01 = sp.Popen.poll(extProc_01)
- print(status_00)
- print(status_01)
- # mssg = "Entrada Não Autorizada Detectada no Hack! Alarme Disparado!"
- # mailMSG(mssg)
- while (Alarm == True):
- while (gpio.input(OK_B) != 0) and (gpio.input(INC) != 0) and (gpio.input(DEC) != 0):
- pass
- if (searchFinger()):
- extProc_02 = sp.Popen(['sudo','service','motion','stop'])
- status_02 = sp.Popen.poll(extProc_02)
- sp.Popen.terminate(extProc_01) # closes the process
- status_01 = sp.Popen.poll(extProc_01) # status should now be something other than 'None'
- print(status_01)
- print(status_02)
- gpio.output(BUZZER, HIGH)
- gpio.output(ALM_LED, HIGH)
- gpio.output(RELE, LOW)
- print('Alarm Deactivated!')
- break
- else: alarm_Tcount = 0
- while (Alarm == False) and (Conf_Mode == False):
- if (gpio.input(PIR) == 1) and (TA == True):
- t_a.cancel()
- TA = False
- # while (gpio.input(PIR) == 1):
- # pass
- if (gpio.input(PIR) == 0) and (TA == False):
- t_a = threading.Timer(20, timer_Alarm)
- t_a.start()
- TA = True
- # while (gpio.input(PIR) == 0):
- # pass
- if (gpio.input(PIR) == 0):
- gpio.output(BUZZER, LOW)
- time.sleep(0.1)
- gpio.output(BUZZER, HIGH)
- time.sleep(2)
- ################################################################################
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement