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

いいなと思ったら応援しよう!