.. note:: Ciao, benvenuto nella Community su Facebook per gli appassionati di SunFounder Raspberry Pi, Arduino e ESP32! Approfondisci l'uso di Raspberry Pi, Arduino e ESP32 con altri appassionati. **Perché unirsi?** - **Supporto da esperti**: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team. - **Impara e condividi**: Scambia consigli e tutorial per migliorare le tue abilità. - **Anteprime esclusive**: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime. - **Sconti speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti. - **Promozioni festive e giveaway**: Partecipa ai giveaway e alle promozioni festive. 👉 Sei pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi stesso! 2.2.7 Modulo RFID MFRC522 ============================= Introduzione ------------------ L'identificazione a radiofrequenza (RFID) fa riferimento a tecnologie che utilizzano la comunicazione wireless tra un oggetto (o tag) e un dispositivo interrogante (o lettore) per tracciare e identificare automaticamente tali oggetti. Alcune delle applicazioni più comuni per questa tecnologia includono catene di approvvigionamento al dettaglio, militari, metodi di pagamento automatici, monitoraggio e gestione bagagli, tracciamento documenti e gestione farmaceutica, tra le altre. In questo progetto, utilizzeremo RFID per la lettura e la scrittura. Componenti -------------- .. image:: img/list_2.2.7.png Principio ------------ **RFID** L'identificazione a radiofrequenza (RFID) coinvolge tecnologie che utilizzano la comunicazione wireless tra un oggetto (o tag) e un dispositivo interrogante (o lettore) per tracciare e identificare automaticamente tali oggetti. La portata di trasmissione del tag è limitata a pochi metri dal lettore. Non è necessariamente richiesta una linea di vista chiara tra lettore e tag. La maggior parte dei tag contiene almeno un circuito integrato (IC) e un’antenna. Il microchip memorizza le informazioni ed è responsabile della gestione della comunicazione a radiofrequenza (RF) con il lettore. I tag passivi non hanno una fonte di energia indipendente e dipendono da un segnale elettromagnetico esterno fornito dal lettore per alimentare le loro operazioni. I tag attivi, invece, contengono una fonte di energia indipendente, come una batteria, e possono quindi avere maggiori capacità di elaborazione, trasmissione e portata. .. image:: img/image230.png **MFRC522** MFRC522 è un tipo di chip integrato per la lettura e scrittura di schede, comunemente utilizzato a 13,56 MHz. Prodotto dalla NXP, è un chip di scheda non a contatto a basso voltaggio, basso costo e di piccole dimensioni, ideale per strumenti intelligenti e dispositivi portatili. L’MF RC522 utilizza un avanzato concetto di modulazione e demodulazione, pienamente rappresentato in tutti i tipi di metodi e protocolli di comunicazione senza contatto a 13,56 MHz. Inoltre, supporta l’algoritmo di crittografia rapida CRYPTO1 per verificare i prodotti MIFARE. MFRC522 supporta anche la comunicazione non a contatto ad alta velocità della serie MIFARE, con una velocità di trasmissione dati bidirezionale fino a 424 kbit/s. Come nuovo membro della serie di lettori integrati altamente integrati a 13,56 MHz, MF RC522 è molto simile agli esistenti MF RC500 e MF RC530, ma con notevoli differenze. Comunica con il dispositivo host tramite interfaccia seriale, riducendo la necessità di cablaggi. Puoi scegliere tra modalità SPI, I2C e seriale UART (simile a RS232), riducendo il numero di connessioni, risparmiando spazio sulla scheda PCB e riducendo i costi. Schema del Circuito ---------------------- .. image:: img/image331.png Procedure Sperimentali -------------------------- **Passo 1:** Monta il circuito. .. image:: img/image232.png :width: 800 **Passo 2:** Configura SPI (consulta l':ref:`spi_configuration` per maggiori dettagli. Se hai già configurato SPI, salta questo passo.) Per Utenti Linguaggio C ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Passo 3:** Vai alla cartella del codice. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/c/2.2.7/ **Passo 4:** Compila il codice. .. raw:: html .. code-block:: make read make write .. note:: Sono disponibili due esempi per leggere o scrivere l'ID della scheda. Scegli quello che meglio si adatta alle tue esigenze. **Passo 5:** Esegui il file eseguibile. .. raw:: html .. code-block:: sudo ./read .. raw:: html .. code-block:: sudo ./write .. note:: Se il programma non funziona o appare il messaggio di errore: \"wiringPi.h: No such file or directory\", consulta la sezione :ref:`Il codice C non funziona?`. **Spiegazione del Codice** .. code-block:: c InitRc522(); Questa funzione serve a inizializzare il modulo RFID RC522. .. code-block:: c uint8_t read_card_data(); Questa funzione legge i dati della scheda e, se la lettura ha successo, restituisce "1". .. code-block:: c uint8_t write_card_data(uint8_t *data); Questa funzione scrive i dati nella scheda e restituisce "1" in caso di successo. \*data rappresenta le informazioni che saranno scritte sulla scheda. Per Utenti Linguaggio Python ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Passo 2**: Attivare l’Ambiente Virtuale. .. note:: * Prima di attivarlo, assicurati di aver creato un ambiente virtuale; per maggiori dettagli consulta :ref:`create_virtual`. * Ogni volta che riavvii il Raspberry Pi o apri un nuovo terminale, dovrai eseguire nuovamente il comando seguente per attivare l'ambiente virtuale. .. raw:: html .. code-block:: shell source myenv/bin/activate Una volta attivato l’ambiente virtuale, vedrai il nome dell’ambiente prima del prompt della riga di comando, indicando che stai lavorando all'interno dell’ambiente virtuale. **Passo 3:** Installa le librerie. La libreria ``spidev`` gestisce le interazioni con l’interfaccia SPI ed è una componente chiave per questo tutorial, poiché è necessaria per far interagire il Raspberry Pi con l’RFID RC522. Esegui il seguente comando per installare ``spidev`` sul tuo Raspberry Pi tramite ``pip``. .. raw:: html .. code-block:: sudo pip3 install spidev Continua installando la libreria MFRC522. La libreria MFRC522 contiene due file: ``MFRC522.py`` e ``SimpleMFRC522.py``. ``MFRC522.py`` realizza l'interfaccia per l'RFID RC522 e gestisce tutto il lavoro di comunicazione con l'RFID attraverso l'interfaccia SPI del Pi. ``SimpleMFRC522.py`` utilizza il file ``MFRC522.py`` e lo semplifica notevolmente, permettendoti di gestire solo alcune funzioni specifiche invece di una gamma più ampia. .. raw:: html .. code-block:: sudo pip3 install mfrc522 **Passo 4**: Uscire dall’Ambiente Virtuale Quando hai completato il tuo lavoro e desideri uscire dall'ambiente virtuale, esegui semplicemente: .. raw:: html .. code-block:: shell deactivate Questo comando ti riporterà all'ambiente Python globale del sistema. **Passo 5:** Vai alla cartella del codice. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/python/2.2.7 **Passo 6:** Esegui il file eseguibile. .. raw:: html .. code-block:: sudo python3 2.2.7_read.py .. raw:: html .. code-block:: sudo python3 2.2.7_write.py .. note:: * Dopo aver eseguito ``2.2.7_read.py``, verranno stampati nella shell l'``id`` e il ``testo`` della tua carta. * Dopo aver eseguito ``2.2.7_write.py``, devi prima scrivere un messaggio, premere ``Invio`` per confermare e infine posizionare la tua carta sul modulo MFRC522 RFID per completare la scrittura. **codice** .. note:: Puoi **Modificare/Reimpostare/Copiare/Eseguire/Interrompere** il codice qui sotto. Ma prima di farlo, è necessario andare nel percorso del codice sorgente come ``davinci-kit-for-raspberry-pi/python``. .. raw:: html .. code-block:: python # lettura import time from mfrc522 import SimpleMFRC522 import RPi.GPIO as GPIO reader = SimpleMFRC522() def main(): while True: print("Reading...Please place the card...") id, text = reader.read() print("ID: %s\nText: %s" % (id,text)) time.sleep(3) def destroy(): GPIO.cleanup() if __name__ == '__main__': try: main() # Quando si preme 'Ctrl+C', viene eseguito destroy() except KeyboardInterrupt: destroy() .. raw:: html .. code-block:: python # scrittura from mfrc522 import SimpleMFRC522 import RPi.GPIO as GPIO reader = SimpleMFRC522() def main(): while True: text = input('Please write new data:') print("Please place the card to complete writing") reader.write(text) print("Data writing is complete") def destroy(): GPIO.cleanup() if __name__ == '__main__': try: main() # Quando si preme 'Ctrl+C', viene eseguito destroy() except KeyboardInterrupt: destroy() **Spiegazione del Codice** .. code-block:: python reader = SimpleMFRC522() Istanzia la classe ``SimpleMFRC522()``. .. code-block:: python reader.read() Questa funzione serve per leggere i dati della carta. Se la lettura ha successo, verranno restituiti id e testo. .. code-block:: python reader.write(text) Questa funzione serve per scrivere informazioni sulla carta; premi il tasto ``Invio`` per completare la scrittura. ``text`` rappresenta le informazioni da scrivere sulla carta. Immagine del Risultato ------------------------- .. image:: img/image233.jpeg