I was making a simple program that should be able to pair to an NFC/RFID card using its UID and then be able to compare the saved UID against another scanned card's UID.
This is the Python code output from UIFlow:
import os, sys, io
import M5
from M5 import *
from hardware import *
import time
mode = None
status = None
rfid = None
savedcard = None
# Describe this function...
def pair():
global savedcard, mode, status, rfid
Speaker.tone(3500, 50)
Widgets.fillScreen(0xff6600)
mode.setText(str('Setup Mode'))
status.setText(str('Scan tag to pair'))
while not (rfid.is_new_card_present()):
continue
savedcard = rfid.read_card_uid()
status.setText(str(str((rfid.read_card_uid()))))
time.sleep(1)
Speaker.tone(3500, 50)
reset()
# Describe this function...
def active():
global savedcard, mode, status, rfid
Widgets.fillScreen(0x666666)
if savedcard == None:
mode.setText(str('Active Mode'))
status.setText(str('No tag paired'))
time.sleep(1)
pair()
else:
mode.setText(str('Active Mode'))
status.setText(str('Waiting for tag'))
while not (rfid.is_new_card_present()):
pass
if (rfid.read_card_uid()) == savedcard:
Widgets.fillScreen(0x33cc00)
status.setText(str('Access granted'))
Speaker.tone(3500, 50)
time.sleep(1)
else:
Widgets.fillScreen(0xcc0000)
status.setText(str('Access denied'))
for count in range(3):
Speaker.tone(3500, 50)
time.sleep_ms(60)
time.sleep(1)
reset()
# Describe this function...
def reset():
global savedcard, mode, status, rfid
Widgets.fillScreen(0x000000)
mode.setText(str('Idle'))
status.setText(str('Click to wake'))
def btnA_wasClicked_event(state):
global mode, status, rfid, savedcard
active()
def btnA_wasHold_event(state):
global mode, status, rfid, savedcard
pair()
def setup():
global mode, status, rfid, savedcard
rfid = RFID()
M5.begin()
mode = Widgets.Label("[mode]", 36, 87, 1.0, 0xffffff, 0x000000, Widgets.FONTS.DejaVu18)
status = Widgets.Label("[status]", 35, 122, 1.0, 0xffffff, 0x000000, Widgets.FONTS.DejaVu18)
BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btnA_wasClicked_event)
BtnA.setCallback(type=BtnA.CB_TYPE.WAS_HOLD, cb=btnA_wasHold_event)
reset()
Speaker.setVolumePercentage(1)
def loop():
global mode, status, rfid, savedcard
M5.update()
if __name__ == '__main__':
try:
setup()
while True:
loop()
except (Exception, KeyboardInterrupt) as e:
try:
from utility import print_error_msg
print_error_msg(e)
except ImportError:
print("please update to latest firmware")
When I hold the button to enter Setup Mode and scan a tag, the output of the UID read always comes out as "None" meaning nothing's there. I don't know why this is happening, so this is why I'm sending this as a bug report.