Accendere e spegnere 4 led tramite un ricevitore a infrarossi
Hardware
E' stato usato un Raspberry PI modello B rev2, un ricevitore infrarossi universale che lavora sui 38khz (VS1838B), un mini telecomando universale da 38khz e 4 led blu (per gli altri colori probabilmente sarebbe il caso di inserire anche delle resistenze)
Il VS1838B ha 3 piedini (1 OUTPUT ,2 GND, 3 VCC). E' stato collegato con il piedino 1 alla GPIO23 che sarà il nostro ingresso per i segnali che poi dovranno essere decodificati da LIRC http://www.lirc.org , il piedno 2 a GROUND e il piedino 3 alla 3,3V.
Mentre i miei "stupendi e luminescenti" led blu sono stati collegati alla GPIO17,GPIO27,GPIO24 e GPIO25 che fungeranno da OUTPUT per l'accensione e lo spegnimento di questi (o qualsiasi altra cosa).
Installazione/Configurazione LIRC e test di funzionamento
Di fondamentale importanza è stato l'utilizzo del pacchetto LIRC (http://www.lirc.org/) che è stato incluso nelle ultime versioni di Raspbian e quindi non si necessita più della ricompilazione del kernel per poter abilitare i suoi moduli. L'installazione è la configurazione di LIRC è molto semplice, per prima cosa installiamo il pacchetto eseguendo il comando:
sudo apt-get install lirc
Aggiungiamo queste righe al file /etc/modules
lirc_dev lirc_rpi gpio_in_pin=23
in cui abilitiamo i moduli e impostiamo che i segnali arriveranno dall'output del ricevitore infrarossi sulla GPIO23
aggiungiamo al file /boot/config.txt la riga
dtoverlay=lirc-rpi
Modifichiamo/Creiamo il file /etc/lirc/hardware.conf e aggiungiamo la seguente configurazione per il nostro hardware:
LIRCD_ARGS="--uinput" LOAD_MODULES=true DRIVER="default" DEVICE="/dev/lirc0" MODULES="lirc_rpi" LIRCD_CONF="" LIRCMD_CONF=""
Ricarichiamo la configurazione eseguendo i comandi:
sudo /etc/init.d/lirc stop sudo /etc/init.d/lirc start
Ora per testare che effettivamente il nostro ricevitore infrarossi sia stato collegato bene possiamo dare i seguenti comandi:
sudo /etc/init.d/lirc stop mode2 -d /dev/lirc0
Ora puntando il telecomando verso il ricevitore e premendo un tasto dovremmo vendere comparire delle righe denominate "space" e "pulse", se ciò avviene il tutto è stato configurato bene, se ciò non avviene ricontrollate che abbiate eseguito tutti i suddetti passi come descritto.
Il prossimo passo è quello di mappare i nostri tasti del telecomando con alcune key che potete scegliere dal namespace valido dando il seguente comando:
irrecord --list-namespace
Ora utilizzando sempre irrecord creiamo la nostra "mappatura" delle frequenze eseguendo i comandi:
sudo /etc/init.d/lirc stop irrecord -d /dev/lirc0 /home/pi/lircd.conf
Seguite le istruzioni riportare e assegnate le chiavi del namespace che preferite , io per il mio esperimento ho scelto KEY_1, KEY_2, KEY_3, KEY_4. Per concludere la mappatura dei vostri tasti premete invio e sarà generato il file di configurazione che al suo interno sarà del tipo:
begin remote
name rasptest
flags RAW_CODES|CONST_LENGTH
eps 30
aeps 100
gap 106713
begin raw_codes
name KEY_1
8891 4442 558 559 535 583
565 535 563 554 535 561
586 536 557 558 538 581
565 1652 534 1670 577 1647
590 1633 554 1682 556 1679
565 1637 552 1682 555 561
536 1667 571 1675 569 535
563 1671 566 534 557 559
536 582 564 1653 536 560
587 535 564 1650 586 535
556 1658 586 1633 555 1682
562
name KEY_2
8938 4419 585 512 556 540
556 581 592 493 574 540
555 588 584 495 572 559
535 1683 556 1657 612 1608
Ora copiatelo nelle configurazioni di lirc:
sudo mv /home/pi/lircd.conf /etc/lirc/lircd.conf
e ricaricatelo con:
sudo /etc/init.d/lirc start sudo /etc/init.d/lirc stop
Test e script
Ora potete testare la mappatura del telecomando appena configurato dando il comando:
irw
Ad ogni tasto del telecomando premuto comparirà il tasto che gli è stato mappato con accanto il nome del telecomando (nel mio caso "rasptest").
Ora scriviamo la configurazione per irexec che si occupa essenzialmente di eseguire dei comandi sul nostro raspbian, mentre nel nostro caso richiamerà il programma dello step successivo:
Quindi creiamo il file .lircrc in /home/pi e inseriamo la seguente configurazione:
begin prog = irexec remote = rasptest button = KEY_1 config = sudo python test_led_2.py -a 17 //comando eseguito alla prima pressione del tasto mappato su KEY_1 config = sudo python test_led_2.py -s 17 // comando eseguito alla seconda pressione del tasto mappato su KEY_1 repeat = 0 end begin prog = irexec remote = rasptest button = KEY_2 config = sudo python test_led_2.py -a 27 config = sudo python test_led_2.py -s 27 repeat = 0 end begin prog = irexec remote = rasptest button = KEY_3 config = sudo python test_led_2.py -a 24 config = sudo python test_led_2.py -s 24 repeat = 0 end begin prog = irexec remote = rasptest button = KEY_4 config = sudo python test_led_2.py -a 25 config = sudo python test_led_2.py -s 25 repeat = 0 end
"rasptest" è il nome che avevo associato al mio telecomando, lo trovate comunque nel file /etc/lirc/lircd.conf (parametro "name")
Dovendo abilitare dei pin della GPIO ho scritto questo banalissimo programma che in base ai parametri passati abilita e disabilita il relativo pin della GPIO.
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import sys, getopt
def main(argv):
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
outputOn = -1
outputOff = -1
try:
opts, args = getopt.getopt(argv,"ha:s:",["acceso=","spento="])
except getopt.GetoptError:
print 'test_led_2.py -a <GPIOpin_led_on> -s <GPIOpin_led_off>'
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print 'test_led_2.py -a <GPIOpin_led_on> -s <GPIOpin_led_off>'
sys.exit()
elif opt in ("-a", "--acceso"):
outputOn = int(arg)
elif opt in ("-s", "--spento"):
outputOff = int(arg)
if outputOn != -1:
print 'Abilito "', outputOn
GPIO.setup(outputOn,GPIO.OUT)
GPIO.output(outputOn, GPIO.HIGH)
if outputOff != -1:
print 'Disabilito "', outputOff
GPIO.setup(outputOff,GPIO.OUT)
GPIO.output(outputOff, GPIO.LOW)
if __name__ == "__main__":
main(sys.argv[1:])
test_led_2.py -a <GPIOpin_led_on> -s <GPIOpin_led_off>
-a sta per la GPIO che voglio abilitare e -s sta per la GPIO che voglio disabilitare.
ora eseguendo il comando
irexec &
e premendo i tasti che abbiamo mappato, noteremo che la prima volta il relativo led si accenderà, mentre premendo per la seconda volta lo stesso tasto si spegnerà.