RFID-сканер не сканирует потом - PullRequest
0 голосов
/ 02 августа 2020

Я новичок в программировании, и я работаю над этим проектом, поэтому понятия не имею, почему он работает не так, как ожидалось. Прошу прощения, если я размещаю это неправильно, потому что это моя первая публикация в stackoverflow. Простите мой английский sh, если есть какой-то момент, в котором я не объяснил это правильно.

Это проект, который должен быть системой безопасности, где мы работаем со сканером RFID, камерой, светодиодами, сервоприводом и Датчик PIR.

Условия следующие: когда время с 7:00 до 23:00, датчик PIR будет выключен, а когда время с 23:00 до 7:00 утра, датчик PIR и камера будут включены. Где в любое время, пока количество людей в доме = 0 (определяется RFID), камера и датчик PIR также включатся.

У меня нет возможности даже проверить из моего кода logi c, потому что, когда я пытался запустить код, в части l oop возникает ошибка. «Отсканируйте зарегистрированную карту, чтобы пропустить регистрацию» будет печататься и «контрольная точка» будет печататься, но после этого код просто останавливается на этом. Предполагается, что он прослушивает сканер RFID, чтобы прочитать сканирование, но когда я коснулся своей карты на сканере RFID, ответа не последовало. И мой код там просто умирает. Поскольку я новичок в кодировании и python, я не знаю, где могут быть ошибки. Был бы признателен за предоставленную помощь !!

import RPi.GPIO as GPIO
from time import sleep
import sys
import requests
from datetime import datetime
from mfrc522 import SimpleMFRC522 #RFID
import os
import pygame, sys
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from pygame.locals import *
import pygame.camera

width = 640
height = 480

#initialise pygame
pygame.init()
pygame.camera.init()
cam = pygame.camera.Camera("/dev/video0",(width,height))
no=0


GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

GPIO.setup(24,GPIO.OUT) #LED
GPIO.setup(26,GPIO.OUT) #Servo
GPIO.setup(17,GPIO.IN) #PIR Sensor

current_time =datetime.now() #Current time

sleep(5)

reader = SimpleMFRC522() #RFID reader
auth = []
in_house =[]
p = open("presentlist.txt","a+")
p = open("presentlist.txt","r+")
present = 0

PIR_state =0 

PWM=GPIO.PWM(26,50) #Set 50hz PWM output at GPIO26
PWM.start(12) #To edit to actual 3oclock (Locked)


fromaddr = "pythonprogramtest123@gmail.com" # change the email address accordingly
toaddr = "pythonprogramtest123@gmail.com" # Same email
#password: abcdefgpython
mail = MIMEMultipart()
 
mail['From'] = fromaddr
mail['To'] = toaddr
mail['Subject'] = "Attachment"
body = "Unusual movement detected"


print('Door Locked') 
print("Hold card near the reader to register it in the database.")
print("Registration up to 10 cards")
print("Scan a registered card to skip registration")

for count in range (0,11):
    print("checkpoint1")
    id = reader.read_id()
    id = str(id)
    f = open("authlist.txt", "a+")
    f = open("authlist.txt", "r+")
    print("checkpoint2")
    if f.mode == "r+":
        auth=f.read()
    if id not in auth:
        f.write(id)
        f.write('\n')
        f.close()
        pos = auth.count('\n')
        print("New card with UID", id, "detected: registered as entry #",pos)
        count = count +1
    else:
        number = auth.split('\n')
        pos = number.index(id)
        print("Card with UID", id, "already registered as entry #", pos)
        count = 11
        break
    

while (True):
    id = reader.read_id()
    id = str(id)
    f = open("authlist.txt", "a+")
    f = open("authlist.txt", "r+")
    if current_time.hour >= 7 or current_time.hour <= 23 or present == 0: #awake or nobody in house
        #RFID is on
        if f.mode == "r+":
            auth=f.read()
        if id in auth and id not in in_house:
            p.write(id)
            p.write('\n')
            p.close()
            present = in_house.count('\n')
            print("Recognition successful \n Allowing Access")
            PWM.start(1) #Servo to actual 12 o clock position (Unlocking)
            print("Door unlocked for 30 seconds. Tap once more to change to 1 minute")
            if f.mode == "r+":
                auth=f.read()
            if id in auth:
                print("Unlocking door for 1 minute")
                sleep(60)
                PWM.start(12) #To edit to actual 3oclock (Locked)
                f.close()
        
            else: #no tap detected
                sleep(30)
                PWM.start(12) #To edit to actual 3oclock (Locked)
                f.close()
                break

        elif id in auth and id in in_house:
            p.remove(id)
            print("Recognition successful \n Allowing Access")
            PWM.start(1) #Servo to actual 12 o clock position (Unlocking)
            print("Door unlocked for 30 seconds. Tap once more to change to 1 minute")
            if f.mode == "r+":
                auth=f.read()
            if id in auth:
                print("Unlocking door for 1 minute")
                sleep(60)
                PWM.start(12) #To edit to actual 3oclock (Locked)
                f.close()
        
            else: #no tap detected
                sleep(30)
                PWM.start(12) #To edit to actual 3oclock (Locked)
                f.close()
                break
        else:
            print("Card not recognised \n Access Denied")
           
        break
    
    elif current_time.hour < 7 or current_time.hour > 23: #sleeping
        id = reader.read_id()
        id = str(id)
        f = open("authlist.txt", "a+")
        f = open("authlist.txt", "r+")
        #RFID is on
        if f.mode == "r+":
            auth=f.read()
        if id in auth:
            print("Recognition successful \n Allowing Access")
            PWM.start(1) #Servo to actual 12 o clock position (Unlocking)
            print("Door unlocked for 30 seconds. Tap once more to change to 1 minute")
            if f.mode == "r+":
                auth=f.read()
            if id in auth:
                print("Unlocking door for 1 minute")
                sleep(60)
                PWM.start(12) #To edit to actual 3oclock (Locked)
        
            else: #no tap detected
                sleep(30)
                PWM.start(12) #To edit to actual 3oclock (Locked)
                break
        else:
            print("Card not recognised \n Access Denied")
        break


        #Camera
        if GPIO.input(17): #read a HIGH i.e. motion is detected

            #LED Blink
            GPIO.output(24,1)
            sleep(1)
            GPIO.output(24,0)
            sleep(1)
            GPIO.output(24,1)
            sleep(1)
            GPIO.output(24,0)
            
            if PIR_state==0:
                print('detected HIGH i.e. motion detected')
                PIR_state=1
                
                #Camera
                cam.start() #start
                image = cam.get_image() #take pic
                cam.stop()
                no = no + 1
                saved_img=pygame.image.save(windowSurfaceObj,'picture' + "{:03d}".format(no) + '.jpg')

                #Thingspeak
                print("Updating Thingpseak")
                resp = requests.get("GET https://api.thingspeak.com/update?api_key=PQ44ZG5JR49ABODY&field1=0")
                #Email
                def sendMail(data):
                    mail.attach(MIMEText(body, 'plain'))
                    print (data)
                    dat='%s.jpg'%data
                    print (dat)
                    attachment = open(dat, 'rb')
                    image=MIMEImage(attachment.read())
                    attachment.close()
                    mail.attach(image)
                    server = smtplib.SMTP('smtp.gmail.com', 587)
                    server.starttls()
                    server.login(fromaddr, "abcdefgpython")
                    text = mail.as_string()
                    server.sendmail(fromaddr, toaddr, text)
                    server.quit()
                
        else: #read a LOW i.e. no motion is detected
            if PIR_state==1:
                print('detected LOW i.e. no motion detected')
                PIR_state=0
        sleep(1)
        print("...")
        break
    
    sleep(2)


    
         




         


    
         




        
...