Door_System.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"]]
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="解錠"
print ("認証されたユーザーです。ドアを" + message_door + "します。")
self.door_id= not self.door_id
else:
print ("認証されていないユーザーです。" + str(idm))
return True
def read_id(self):
clf = nfc.ContactlessFrontend('usb:000000000')
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()
DoorSystem.log
Get IDm
2024-04-25 18:13:19.192321
True
認証されたユーザーです。ドアを解錠します。
Please Touch
Get IDm
2024-04-25 18:13:21.392185
True
認証されたユーザーです。ドアを施錠します。
Please Touch
Get IDm
2024-04-25 18:13:23.037331
True
認証されたユーザーです。ドアを解錠します。
Please Touch
Get IDm
2024-04-25 18:13:30.084601
True
認証されたユーザーです。ドアを解錠します。
Please Touch