Abbiamo pensato ad un sistema di controllo accessi per un edificio scolastico: ad ogni entrata/uscita occorre passare il proprio tag RFID ed il proprio PIN. Il sistema registrerà gli ultimi accessi e consentirà (o meno) l'accesso o l'uscita.
Il sistema comprende un microcontrollore Arduino ed un server su un Raspberry. La comunicazione tra i due avviene tramite Mosquitto (MQTT).
- Tastierino alfanumerico per inserimento PIN
- Ricevitore RFID/NFC
- Schermo per mostrare informazioni
- Broker MQTT
- MariaDB
- Python3
- Libreria Python paho-mqtt
- Expect (per unbuffer):
apt-get install expect
N. B. Arduino e Raspberry Pi si devono collegare alla stessa rete e devono avere (possibilmente) IP statici. Testato con Python 3
Prima di iniziare viene caricato il programma sketck_oracle_v3.ino aggiornato con l'ip del Raspberry Pi sul microcontrollore Arduino, che viene acceso. Viene eseguito lo script sub.py che si iscrive al topic "code" e rimane in attesa di nuovi messaggi. Alla ricezione di un messaggio verrà creato un sottoprocesso che eseguirà lo script check.py. Check.py si collegherà al DB MySQL ottenendo il nome della persona a cui è associato il PIN da verificare. Se non dovesse essere restituito alcun risultato sarà utilizzata una stringa ("Err") che indica un errore. Check.py provvederà ad avviare lo script send.py. Send.py invierà il nome ottenuto da Check.py nel topic "answer". Arduino Stamperà il nome ricevuto e farà illuminare di verde il LED. Se il nome ricevuto dovesse essere "Err", il led lampeggerà di rosso e sul display verrà stampato un messaggio di codice errato.
L'output di questi script viene salvato nel file ACS.log
Il form della pagina index.html chiamerà lo script php actionAdd.php che provvederà ad aggiungere un nuovo utente nel DB.
ATTENZIONE: lo script non effettua la verifica di eventuali duplicati (non avevamo tempo per implementarlo).
N. B. L'utente qui seguente ha solo permessi di eliminazione, aggiunta e selezione righe. Il DB non è accessibile dall'esterno.
- Nome DB: campusArcesso
- Utente: accesso
- Password: BONO
- Nome tabella: studenti
- id - Auto increment primary key
- matricola - Matricola dello studente
- nome - Nome dello studente
- cognome - Cognome dello studente
- pin - Pin dello studente
- rfid - MAC Address del tag NFC utilizzato per l'accesso
- ultimoAccesso - Timestamp ultimo accesso
Non dovrebbe essere necessario utilizzare nessuno di questi comandi in quanto lo script autostart.sh viene eseguito automaticamente all'avvio mediante CRON.
cd Desktop/
python3 sub.py
cd Desktop/
unbuffer python3 sub.py 2>&1|tee -a ACS.log
./autostart.sh
Solo gli script check.py e send.py necessitano argomenti aggiuntivi. Esempio
python3 check.py PIN
python3 send.py NOME
Dove al posto di PIN occorre inserire il PIN da verificare e al posto di NOME il nome dello studente da mostrare sul display collegato ad Arduino.