Я только начал изучать Python около 2 месяцев назад для университетского проекта, над которым я работаю.
Я хотел создать «университетскую» веб-страницу, которая могла бы считывать метки RFID-карт для доступа к различным HTML-файлам (файлам студентов) в зависимости от уникального идентификационного номера тега карты. Сам код не показывает ошибок, но проблема в том, что HTML-код, к которому я хочу получить доступ, не отображается, когда я помещаю тег в сканер. Сам сканер работает в основном файле для чтения и записи, не связанном с проектом, поэтому я уверен, что сканер работает. Итак, вопрос: есть ли лучший способ исправить это и рекомендовать ссылку для изучения, чтобы идея заработала?
РЕДАКТИРОВАТЬ: Я перефразирую вопрос, кто-нибудь знает способ подключения сервера Flask с помощью файла чтения и записи в теге RFID с использованием определенного стороннего модуля?
Функция: после того, как метка RFID отображается на сканере, дисплей должен измениться, что запрограммировано для конкретной метки RFID.
Вот соответствующая информация в файле Python Flask:
import RPi.GPIO as GPIO
from flask import Flask, render_template
import SimpleMFRC522
#HTML & CSS to Python Flask Connection (Web Server)
frame_python = Flask(__name__)
@frame_python.route('/')
def frame_main():
return render_template('Main.html') .... # cut it short cuz not needed
#RFID Student section
@frame_python.route('/Student/Student_Welcome')
def frame_stud_welcome():
reader = SimpleMFRC522.SimpleMFRC522() #information from a different file below
id = reader.read()
a = 81143208559 #Variables a,b and c are the uid# of the card tags
b = 628549754026
c = 985039970922
try:
if a == id:
return render_template('stud1_welcome.html')
elif b == id:
return render_template('stud2_welcome.html')
elif c == id:
return render_template('stud3_welcome.html')
finally:
GPIO.cleanup()
if __name__ == '__main__':
frame_python.run(host='0.0.0.0',port=8080,debug=True)
#Faculty Section
Файл stud1_welcome.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<meta name="description" content="Middle C, Christ at the center!">
<meta name="keywords" content="HTML, CSS, MySQL, Python & Flask Python add-on">
<meta name="author" content="name">
<title>Smart Campus Information Board | Welcome!</title>
<link rel="stylesheet" href="/static/style.css">
</head>
<section id="background">
<body>
<header>
<div class="container">
<div id="Branding">
<h1><span class="highlight">Smart Campus</span> Information Board</h1>
</div>
</header>
<section id="logo">
<div class="container">
<img src="/static/img/AMA_logo.png">
<h3>AMA International University Bahrain</h3>
<p>Student ID accepted! Welcome Student 1!</p>
</div>
</section>
<section id="choices">
<div class="container">
<form>
<button type="Back to Menu" class="button_1"><a href="{{ url_for('frame_main') }}">Guest</a></button>
</form>
</div>
</section>
</section>
<footer>
<p>SCIB Designs, 2019</p>
</footer>
</body>
</html>
SimpleMFRC522 () - это файл с библиотекой, который я взял из учебника (https://pimylifeup.com/raspberry-pi-rfid-rc522/).
# Code by Simon Monk https://github.com/simonmonk/
import MFRC522
import RPi.GPIO as GPIO
class SimpleMFRC522:
READER = None;
KEY = [0xFF,0xFF,0xFF,0xFF,0xFF,0xFF]
BLOCK_ADDRS = [8, 9, 10]
def __init__(self):
self.READER = MFRC522.MFRC522()
def read(self):
id, text = self.read_no_block()
while not id:
id, text = self.read_no_block()
return id, text
def read_id(self):
id = self.read_id_no_block()
while not id:
id = self.read_id_no_block()
return id
def read_id_no_block(self):
(status, TagType) = self.READER.MFRC522_Request(self.READER.PICC_REQIDL)
if status != self.READER.MI_OK:
return None
(status, uid) = self.READER.MFRC522_Anticoll()
if status != self.READER.MI_OK:
return None
return self.uid_to_num(uid)
def read_no_block(self):
(status, TagType) = self.READER.MFRC522_Request(self.READER.PICC_REQIDL)
if status != self.READER.MI_OK:
return None, None
(status, uid) = self.READER.MFRC522_Anticoll()
if status != self.READER.MI_OK:
return None, None
id = self.uid_to_num(uid)
self.READER.MFRC522_SelectTag(uid)
status = self.READER.MFRC522_Auth(self.READER.PICC_AUTHENT1A, 11, self.KEY, uid)
data = []
text_read = ''
if status == self.READER.MI_OK:
for block_num in self.BLOCK_ADDRS:
block = self.READER.MFRC522_Read(block_num)
if block:
data += block
if data:
text_read = ''.join(chr(i) for i in data)
self.READER.MFRC522_StopCrypto1()
return id, text_read
def write(self, text):
id, text_in = self.write_no_block(text)
while not id:
id, text_in = self.write_no_block(text)
return id, text_in
def write_no_block(self, text):
(status, TagType) = self.READER.MFRC522_Request(self.READER.PICC_REQIDL)
if status != self.READER.MI_OK:
return None, None
(status, uid) = self.READER.MFRC522_Anticoll()
if status != self.READER.MI_OK:
return None, None
id = self.uid_to_num(uid)
self.READER.MFRC522_SelectTag(uid)
status = self.READER.MFRC522_Auth(self.READER.PICC_AUTHENT1A, 11, self.KEY, uid)
self.READER.MFRC522_Read(11)
if status == self.READER.MI_OK:
data = bytearray()
data.extend(bytearray(text.ljust(len(self.BLOCK_ADDRS) * 16).encode('ascii')))
i = 0
for block_num in self.BLOCK_ADDRS:
self.READER.MFRC522_Write(block_num, data[(i*16):(i+1)*16])
i += 1
self.READER.MFRC522_StopCrypto1()
return id, text[0:(len(self.BLOCK_ADDRS) * 16)]
def uid_to_num(self, uid):
n = 0
for i in range(0, 5):
n = n * 256 + uid[i]
return n