import time
from machine import I2C, Pin, SPI
from mfrc522 import MFRC522
from keypad import Keypad
from pico_i2c_lcd import I2cLcd
from lcd_api import LcdApi
from dht import DHT22
i2c = I2C( 0 , sda = Pin(0) , scl = Pin(1) , freq = 400000)
adress = i2c.scan()[0]
lcd = I2cLcd(i2c , adress , 4 , 20 )
dht = DHT22(Pin(19))
a12 =Pin(18, Pin.OUT)
buzzer= Pin(2, Pin.OUT) #set buzzer to GP16
buzzer.value(0)
true = Pin(8, Pin.OUT) #set Green LED to GP15
false = Pin(9, Pin.OUT) #set Red LED to GP14
sck = Pin(6, Pin.OUT) #set RFID sck to GP6
mosi = Pin(7, Pin.OUT) #set RFID mosi to GP7
miso = Pin(4, Pin.OUT) #set RFID miso to GP4
sda = Pin(5, Pin.OUT) #set RFID sda to GP5
rst = Pin(3, Pin.OUT) #set RFID rst to GP18
spi = SPI(0, baudrate=100000, polarity=0, phase=0, sck=sck, mosi=mosi, miso=miso) #initial SPI
card1 = "0xb329f769" #change this value to match your testing RFID card 1
card2 = "0xb3fa5c30" #change this value to match your testing RFID card 2
lcd.move_to(0 , 0)
lcd.putstr("Andy GT *****")
time.sleep(2)
lcd.move_to(0 , 1)
lcd.putstr("25.12.2024")
time.sleep(2)
lcd.clear()
#lcd.backlight_off()
lcd.move_to(0 , 1)
lcd.putstr("Raspberry Pi Pico ")
time.sleep(2)
lcd.clear()
# Konfiguration des Passwortes
secretCode = '1234'
geschlossen = True # Status gesperrt setzen
inbuffer = "----" # Reihenfolge der Tastenschläge speichern
def keyPressed(keyValue):
global geschlossen, inbuffer # Verwendung globaler Variablen
if geschlossen:
if keyValue == '#': # Eingabe nach PW um zu entsperren
if inbuffer == secretCode: # Wenn Code richtig ist
geschlossen = False
lcd.clear()
lcd.move_to(0 , 0)
lcd.putstr("Richtig, Auf")
print(" - Richtig, öffnen")
buzzer.value(1)
a12.on()
#servo.max()
time.sleep(2)
#isLocked = True
buzzer.value(0)
a12.off()
lcd.clear()
#servo.mid()
dht.measure()
temp = dht.temperature()
hum = dht.humidity()
print("Temperature: {}°C Humidity: {:.0f}% ".format(temp, hum))
lcd.clear()
lcd.putstr('Temperatur: ' + str(temp) + " C")
lcd.move_to(0,1)
lcd.putstr('Feuchte: ' + str(hum) + "% ")
else:
lcd.clear()
lcd.move_to(0 , 0)
lcd.putstr("Falsche Eingabe")
print(" - Falsche Eingabe")
time.sleep(2)
lcd.move_to(0 , 1)
lcd.putstr("Code eingeben")
inbuffer = "----" # Puffer zurücksentzen
else: # Bei Falscheingabe, neuer Versuch
inbuffer = inbuffer[1:] + keyValue # Verschiebung Puffer für neue Eingabe
print(keyValue, end="") # Betätigte Tasten anzeigen
elif keyValue == '*': # Wenn entsperrt ist, "*" drücken um erneut zu sperren
geschlossen = True
lcd.clear()
lcd.move_to(0 , 0)
lcd.putstr("Warte auf ")
lcd.move_to(0 , 1)
lcd.putstr("Eingabe")
print("Warte auf Eingabe")
#servo.mid()
# Konfigurieren der Tastatur mit den richtigen Pins und der Rückruffunktion
kp = Keypad(rows=(Pin(10), Pin(11), Pin(12), Pin(13)),
columns=(Pin(14), Pin(15), Pin(16), Pin(17)),
callback=keyPressed)
#Erststatusanzeige
lcd.move_to(0 , 0)
lcd.putstr("Code eingeben ")
print("Code eingeben")
while True:
dht.measure()
temp = dht.temperature()
hum = dht.humidity()
print("Temperature: {}°C Humidity: {:.0f}% ".format(temp, hum))
lcd.putstr('Temperatur: ' + str(temp) + " C")
lcd.move_to(0,1)
lcd.putstr('Feuchte: ' + str(hum) + "% ")
rdr = MFRC522(spi, sda, rst) #Initialiesiere Kartenleser
(stat, tag_type) = rdr.request(rdr.REQIDL) #Lese die Kartenidentnummer
if stat == rdr.OK:
(stat, raw_uid) = rdr.anticoll()
if stat == rdr.OK:
uid = ("0x%02x%02x%02x%02x" % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]))
print(uid)
if uid == card1: #if ID matches card 1, buzzer beep once, turn on Green LED
lcd.clear()
lcd.move_to(0 , 0)
lcd.putstr("Chip 1 erkannt")
print("card 1 detected!")
buzzer.value(1)
time.sleep(0.3)
buzzer.value(0)
true.value(1)
a12.on()
time.sleep(1)
true.value(0)
a12.off()
time.sleep(1)
lcd.clear()
dht.measure()
temp = dht.temperature()
hum = dht.humidity()
print("Temperature: {}°C Humidity: {:.0f}% ".format(temp, hum))
lcd.clear()
lcd.putstr('Temperatur: ' + str(temp) + " C")
lcd.move_to(0,1)
lcd.putstr('Feuchte: ' + str(hum) + "%")
elif uid == card2:
lcd.clear()
lcd.move_to(0 , 0)
lcd.putstr("Chip 2 erkannt")
print("card 2 detected!") #if ID matches card 2, buzzer beep twice, turn on Green LED
buzzer.value(1)
time.sleep(0.3)
buzzer.value(0)
time.sleep(0.3)
buzzer.value(1)
time.sleep(0.3)
buzzer.value(0)
a12.on()
true.value(1)
time.sleep(2)
a12.off()
true.value(0)
time.sleep(1)
lcd.clear()
dht.measure()
temp = dht.temperature()
hum = dht.humidity()
print("Temperature: {}°C Humidity: {:.0f}% ".format(temp, hum))
lcd.clear()
lcd.putstr('Temperatur: ' + str(temp) + " C")
lcd.move_to(0,1)
lcd.putstr('Feuchte: ' + str(hum) + "%")
else: #if ID doesn't match any card, long beep, turn on Red LED
print("invalid card!")
buzzer.value(1)
time.sleep(1)
buzzer.value(0)
false.value(1)
time.sleep(0.1)
false.value(0)
time.sleep(0.1)
false.value(1)
time.sleep(0.1)
false.value(0)
time.sleep(0.1)
false.value(1)
time.sleep(0.1)
false.value(0)
time.sleep(1)