DoorSystem.py 更新版
import binascii
import nfc
import os
import pigpio
import time
import json
import datetime
import sys
SERVO_PIN = 18
pi = pigpio.pi()
json_open = open('Pass_ID.json', 'r')
Pass_data = json.load(json_open)
id_list = [obj["id"] for obj in Pass_data["user"]]
PassData_list = Pass_data["user"]
def set_angle(angle):
assert 0 <= angle <= 180.
pulse_width = (angle / 180) * (2500 - 500) + 500
pi.set_servo_pulsewidth(SERVO_PIN, pulse_width)
class MyCardReader(object):
def __init__(self):
self.door_id = False
def on_connect(self, tag):
sys.stdout = open("DoorSystem.log", "a")
idm = binascii.hexlify(tag._nfcid)
print("Get IDm")
dt_now = datetime.datetime.now()
print(dt_now)
if str(idm) in id_list:
print (str(idm) in id_list)
if self.door_id:
set_angle(95)
time.sleep(1)
message_door="施錠"
else:
set_angle (0)
message_door="解錠"
Name = [UserData["name"] for UserData in PassData_list if str(idm)==UserData["id"]]
print ("同志" + Name[0] + "は認証されたユーザーです。ドアを" + message_door + "します。")
self.door_id= not self.door_id
else:
print ("認証されていないユーザーです。" + str(idm))
return True
def read_id(self):
clf = nfc.ContactlessFrontend('usb:000000')
try:
clf.connect(rdwr={'on-connect': self.on_connect})
finally:
clf.close()
if __name__ == '__main__':
cr = MyCardReader()
while True:
#最初に表示
print("Please Touch")
#タッチ待ち
cr.read_id()
この記事が気に入ったらサポートをしてみませんか?