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()

この記事が気に入ったらサポートをしてみませんか?