Ciao ragazzi, benvenuti nella terza puntata
di questa serie dedicata alla creazione di
un GAMEPAD remoto con Raspberry Pi.
Nelle prime due puntate abbiamo aggiunto un
paio di bottoni, un LED RGB di controllo,
e lo stick principale che lavora in analogico
e per cui ci ha anche richiesto l’inclusione
di un convertitore di segnale verso i PIN
digitali della testata GPIO. Chiaramente qualora
aveste perso le prime due puntate le trovate
linkate tra le schede qui in alto e in descrizione.
Oggi continueremo l’ampliamento delle funzionalità
del controller con l’aggiunta di un Rotary
Encoder e, visto che io sto utilizzando un
Raspberry Pi Zero che non ha connettività
wireless, vedremo anche come collegare un
dongle Wi-Fi. E direi di partire proprio da
quest’ultimo perché è chiaramente la cosa
più semplice da configurare.
Ho cercato di utilizzare un componente che
fosse il più piccolo possibile così da non
dare noia durante l’utilizzo di PiPAD. Una
cosa da mettere subito in chiaro è che non
tutti i dongle sono compatibili con Raspberry
Pi, inoltre il Pi Zero ha la scomodità di
avere solamente una porta e anche di tipo
microUSB: ciò significa che non sarà possibile
collegare direttamente il dongle alla porta
USB (ho dovuto infatti utilizzare un piccolo
adattatore da type-A a type-B) e soprattutto
che non sarà possibile collegare più periferiche
contemporaneamente, a meno di usare un hub
USB. E proprio un device di questo tipo ho
dovuto sfruttare per completare la configurazione.
Come dicevo, non tutti i dongle Wi-Fi USB
sono compatibili: mi è capitato in passato
di provarne alcuni che non venivano minimamente
riconosciuti, o altri che pur riconosciuti
poi non funzionavano correttamente. Questo
ora in mio possesso è super economico (è
costato qualcosa attorno ai 2€) ma utilizza
driver standard per comunicare, quindi viene
riconosciuto senza difficoltà dall’OS:
occhio perciò ad acquistare o un Pi Zero
wireless che ha già l’antenna Wi-Fi integrata,
oppure dongle USB che siano dichiaratamente
compatibili con Raspberry Pi. L’unica cosa
che andrà fatta, una volta collegato il dongle
al Pi, sarà impostare i parametri della propria
rete per consentire al Pi stesso di collegarsi
senza fili. Visto che utilizzo il Pi Zero
da remoto, ho sfruttato l’hub USB con porta
ethernet così da poter collegare il Pi Zero
al router via cavo, mi sono collegato dal
mio PC via SSH all’IP assegnato al Pi ed
ho effettuato le configurazioni necessarie
verificando il corretto funzionamento del
Wi-Fi. A quel punto ho potuto rimuovere l’hub
e ho ricollegato il solo dongle così da liberarmi
finalmente dalla necessità di utilizzare
il PAD con connessione via cavo e solo nei
pressi del router.
Una volta collegato il dongle e avviato il
Pi, verificate che esso venga riconosciuto
dal sistema: basterà eseguire il comando
dmesg | more e scorrendo tra tutti i messaggi
mostrati a video cercare la presenza di informazioni
relative allo stesso. A questo punto, se tutto
è OK, digitate sudo raspi-config, entrate
nella sezione Network Options, Wi-Fi, impostate
la regione e quindi inserite il SSID della
vostra rete e la password. Se tutto funzionerà
correttamente, potrete semplicemente riavviare
il Pi e quindi digitare ifconfig e verificare
che oltre all’interfaccia eth0 anche la
wlan0 abbia un IP assegnato. Se è questo
il caso la configurazione sarà stata ultimata
con successo, in alternativa rimando all’articolo
sul blog linkato qui sotto in descrizione
per maggiori dettagli.
Ora che finalmente si può utilizzare il GAMEPAD
senza fili, possiamo passare al Rotary Encoder.
Di che cosa stiamo parlando: di questo componente
che presenta una manopola che può ruotare
in senso orario e antiorario, e lo fa con
piccoli scattini. Un Encoder di questo tipo
funziona tramite 2 contatti interni che ad
ogni scatto chiudono o aprono il circuito
durante la rotazione. Come detto, ruotando
la manopola possiamo sentire i "click" che
indicano che la manopola è stata spostata
di una posizione.
Ma perché ci sono due contatti? Fondamentalmente
perché essi sono posizionati in modo che
ruotando in una direzione essi tengano aperti
o chiusi i rispettivi circuiti allo stesso
tempo, e ruotando nell’altra direzione essi
lo facciano in modo alternato. E questo consente
di capire se la manopola sia stata ruotata
in un senso oppure nell’altro.
Un sensore di questo tipo può tornare utile
per controllare, ad esempio, interfacce grafiche
che presentano liste di elementi (non so se
vi ricordate i vecchi telefonini con rotellina
laterale per spostarsi nei menu), oppure per
aumentare o diminuire un valore in base a
quanto si ruota la manopola (un po’ come
si fa con gli impianti per regolare il volume),
e via discorrendo. In più, la manopola stessa
può essere premuta, quindi tutto il sensore
può fungere da bottone così come accade
con lo stick (e questo ci permette anche di
aggiungere un 4 bottone al nostro PAD).
Il Rotary Encoder ha solitamente 5 PIN, che
servono: 1 per il GND, 1 per la corrente da
3V, 1 per gestire la pressione, e gli ultimi
2 per i due valori chiamati Clock e DT che
sfrutteremo per calcolare il verso della rotazione.
Io ho collegato il ground e la tensione sul
lato inferiore della breadboard, visto che
-vi ricordo- è su questo lato che ho organizzato
i 3V mentre sul lato superiore ci sono i 5;
e gli altri 3 PIN li ho connessi direttamente
a 3 PIN del Raspberry Pi, in particolare l’11,
il 12 ed il 13. Infine, per il momento, ho
lasciato il sensore non fissato, e poi studierò
(un po’ come ho fatto per lo stick) un modo
per tenerlo ben saldo alla struttura del progettino.
E questi sono tutti i collegamenti hardware
necessari per sfruttare il componente: passiamo
ora al codice di controllo.
Come per tutti gli altri sensori, anche in
questo caso avremo una classe python, PiPadRotary.py,
che segue la logica di tutte le altre sviluppate.
C’è una parte con l’inizializzazione
e la gestione del sensore, ed una parte destinata
al debug del componente.
Ormai dovreste aver capito come sono modellate
tutte le classi che consentono di usare i
sensori, cioè direttamente oppure tramite
inclusione nel codice generale che permette
di utilizzare PiPAD nel suo insieme.
Troviamo le classiche inclusioni, compreso
il multiprocessing visto che dobbiamo gestire
sia la rotazione che il click della manopola;
e poi c’è il costruttore che fa il setup
dei PIN a cui è collegato il Rotary Encoder,
utilizziamo il LED come feedback, ci sono i
valori correnti dello stato di pressione e
verso di rotazione, c’è il valore cumulativo
che si è raggiunto a forza di ruotare in
un senso o nell’altro la manopola. Poi vengono
istanziati i processi che controllano bottone
e rotazione, e a seguire tutti i metodi di
gestione.
Tra essi, quello più interessante è sicuramente
quello “lavoratore” con contiene la logica
per interpretare lo stato della manopola.
L’idea è molto semplice: abbiamo detto
che Clock e DT hanno valori uguali quando
si ruota la manopola in una direzione, e valori
differenti quando la si ruota nell’altra.
Inoltre, finché il valore letto dal sensore
è lo stesso precedentemente letto allora
significa che la manopola non si è mossa
(vi ho anticipato che la rotazione avviene
un click per volta e ad ogni click viene cambiato
lo stato del circuito, cioè aperto o chiuso).
Perciò leggiamo il valore del Clock, se è
cambiato rispetto alla precedente lettura
allora la manopola è stata mossa, quindi
leggiamo il valore del DT e se è diverso
a quello del Clock allora la manopola sarà
stata mossa in una direzione (che possiamo ad
esempio considerare come un incremento), se è uguale
allora sarà stato mosso nell’altra direzione (che
possiamo considerare come un decremento).
In questo modo girando sempre la manopola
in una direzione il contatore aumenterà,
girandola nell’altro senso diminuirà.
E il metodo di debug non farà altro che mostrare
lo stato del bottone, nonché se la manopola
è stata ruotata e a che conteggio si è arrivati.
Lo stesso codice è al momento inserito anche
all’interno del programma principale, cosicché
sia possibile farlo interagire ad esempio
con il LED (cioè quando premiamo la manopola
a mo’ di bottone il LED si colorerà di
giallo) e in più, chiaramente, tutti gli
altri sensori continueranno a lavorare in
contemporanea.
Bene, e questo era il Rotary Encoder, un ulteriore
sensore che può sicuramente tornare comodo
per impartire alcuni comandi particolari.
E proprio l’impartire comandi sarà la tematica
principale della prossima puntata: finalmente
vedremo come controllare dispositivi esterni
con il nostro PiPAD.
Fatemi sapere come -secondo voi- sta procedendo
questa serie: vi aspetto nei commenti per
i vostri feedback. Ovviamente fatemi anche
sapere se questo video vi è piaciuto o tornato
utile. E per non perdere le prossime puntate
di questa serie, qualora non lo foste ancora,
iscrivetevi al canale ed attivate le notifiche
per essere subito avvisati quando pubblicherò
nuovi video.
Fino ad allora non mi resta altro che salutarvi.
A presto!
