forked from jeanGaston/RF-AD
Add screen saver for reader
This commit is contained in:
parent
bbbc9f6310
commit
8a06f39a71
@ -2,10 +2,11 @@ import network
|
|||||||
import urequests as requests
|
import urequests as requests
|
||||||
import ujson as json
|
import ujson as json
|
||||||
import time
|
import time
|
||||||
from machine import Pin, SPI, I2C
|
from machine import Pin, SPI, I2C, Timer
|
||||||
|
import _thread
|
||||||
from mfrc522 import MFRC522
|
from mfrc522 import MFRC522
|
||||||
from ssd1306 import SSD1306_I2C
|
from ssd1306 import SSD1306_I2C
|
||||||
from env import (DOOR_ID, WLAN_SSID, WLAN_SSID, WLAN_PASS, SERVER_IP, SERVER_PORT)
|
from env import DOOR_ID, WLAN_SSID, WLAN_SSID, WLAN_PASS, SERVER_IP, SERVER_PORT
|
||||||
|
|
||||||
|
|
||||||
# Initialize RFID reader
|
# Initialize RFID reader
|
||||||
@ -26,6 +27,12 @@ redled.on()
|
|||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
redled.off()
|
redled.off()
|
||||||
|
|
||||||
|
# Global variables
|
||||||
|
last_activity_time = time.time()
|
||||||
|
screensaver_active = False
|
||||||
|
screensaver_thread_running = False
|
||||||
|
inactivity_timer = Timer(-1)
|
||||||
|
|
||||||
|
|
||||||
def init_oled():
|
def init_oled():
|
||||||
global oled
|
global oled
|
||||||
@ -40,6 +47,10 @@ def init_oled():
|
|||||||
|
|
||||||
|
|
||||||
def display_message(message, ip_address):
|
def display_message(message, ip_address):
|
||||||
|
global last_activity_time, screensaver_active, screensaver_thread_running
|
||||||
|
last_activity_time = time.time()
|
||||||
|
screensaver_active = False
|
||||||
|
screensaver_thread_running = False
|
||||||
try:
|
try:
|
||||||
oled.fill(0)
|
oled.fill(0)
|
||||||
oled.text(f"Door ID: {DOOR_ID}", 0, 0) # Display Door ID at the top
|
oled.text(f"Door ID: {DOOR_ID}", 0, 0) # Display Door ID at the top
|
||||||
@ -57,6 +68,50 @@ def display_message(message, ip_address):
|
|||||||
print("display error:", e)
|
print("display error:", e)
|
||||||
init_oled()
|
init_oled()
|
||||||
|
|
||||||
|
|
||||||
|
def screensaver():
|
||||||
|
global screensaver_active, screensaver_thread_running
|
||||||
|
x, y = 0, 0
|
||||||
|
direction_x, direction_y = 1, 1
|
||||||
|
while screensaver_active:
|
||||||
|
oled.fill(0)
|
||||||
|
oled.text("RF-AD", x, y)
|
||||||
|
oled.show()
|
||||||
|
time.sleep(0.05)
|
||||||
|
|
||||||
|
x += direction_x
|
||||||
|
y += direction_y
|
||||||
|
|
||||||
|
if x <= 0 or x >= 128 - 36: # 36 is the length of "RF-AD"
|
||||||
|
direction_x *= -1
|
||||||
|
if y <= 0 or y >= 64 - 10: # 10 is the height of text
|
||||||
|
direction_y *= -1
|
||||||
|
|
||||||
|
# Check for activity
|
||||||
|
if time.time() - last_activity_time <= 60:
|
||||||
|
screensaver_active = False
|
||||||
|
screensaver_thread_running = False
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
def start_screensaver_thread():
|
||||||
|
global screensaver_active, screensaver_thread_running
|
||||||
|
if not screensaver_thread_running:
|
||||||
|
screensaver_active = True
|
||||||
|
screensaver_thread_running = True
|
||||||
|
_thread.start_new_thread(screensaver, ())
|
||||||
|
|
||||||
|
|
||||||
|
def handle_inactivity(timer):
|
||||||
|
if time.time() - last_activity_time > 60:
|
||||||
|
start_screensaver_thread()
|
||||||
|
|
||||||
|
|
||||||
|
def reset_inactivity_timer():
|
||||||
|
global last_activity_time
|
||||||
|
last_activity_time = time.time()
|
||||||
|
|
||||||
|
|
||||||
def test_server_connection(ip_address):
|
def test_server_connection(ip_address):
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
@ -87,6 +142,7 @@ def test_server_connection(ip_address):
|
|||||||
display_message(f"Reconnect Error\n{e}\nIP: {ip_address}", ip_address)
|
display_message(f"Reconnect Error\n{e}\nIP: {ip_address}", ip_address)
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
|
|
||||||
|
|
||||||
# Connect to WiFi
|
# Connect to WiFi
|
||||||
def connect_wifi(ssid, password):
|
def connect_wifi(ssid, password):
|
||||||
wlan = network.WLAN(network.STA_IF)
|
wlan = network.WLAN(network.STA_IF)
|
||||||
@ -102,6 +158,7 @@ def connect_wifi(ssid, password):
|
|||||||
display_message(f"Server Connected\nIP: {ip_address}", ip_address)
|
display_message(f"Server Connected\nIP: {ip_address}", ip_address)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
|
|
||||||
# Function to send RFID UID to the server
|
# Function to send RFID UID to the server
|
||||||
def send_rfid_to_server(rfid_uid):
|
def send_rfid_to_server(rfid_uid):
|
||||||
try:
|
try:
|
||||||
@ -113,7 +170,8 @@ def send_rfid_to_server(rfid_uid):
|
|||||||
return response.json()
|
return response.json()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
test_server_connection(ip_address=network.WLAN(network.STA_IF).ifconfig()[0])
|
test_server_connection(ip_address=network.WLAN(network.STA_IF).ifconfig()[0])
|
||||||
return {'access_granted': False}
|
return {"access_granted": False}
|
||||||
|
|
||||||
|
|
||||||
# Main loop to scan RFID tags
|
# Main loop to scan RFID tags
|
||||||
def main():
|
def main():
|
||||||
@ -129,12 +187,15 @@ def main():
|
|||||||
connect_wifi(WLAN_SSID, WLAN_PASS)
|
connect_wifi(WLAN_SSID, WLAN_PASS)
|
||||||
ip_address = network.WLAN(network.STA_IF).ifconfig()[0]
|
ip_address = network.WLAN(network.STA_IF).ifconfig()[0]
|
||||||
display_message("Scan your tag", ip_address)
|
display_message("Scan your tag", ip_address)
|
||||||
|
inactivity_timer.init(period=1000, mode=Timer.PERIODIC, callback=handle_inactivity)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
(status, tag_type) = reader.request(reader.REQIDL)
|
(status, tag_type) = reader.request(reader.REQIDL)
|
||||||
if status == reader.OK:
|
if status == reader.OK:
|
||||||
(status, uid) = reader.SelectTagSN()
|
(status, uid) = reader.SelectTagSN()
|
||||||
if status == reader.OK:
|
if status == reader.OK:
|
||||||
|
reset_inactivity_timer()
|
||||||
|
|
||||||
rfid_uid_decimal = "".join([str(i) for i in uid])
|
rfid_uid_decimal = "".join([str(i) for i in uid])
|
||||||
print("RFID UID:", rfid_uid_decimal)
|
print("RFID UID:", rfid_uid_decimal)
|
||||||
display_message("Checking...", ip_address)
|
display_message("Checking...", ip_address)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user