Differenze tra le versioni di "Accendere e spegnere 4 led tramite un ricevitore a infrarossi"
Riga 89: | Riga 89: | ||
sudo /etc/init.d/lirc start | sudo /etc/init.d/lirc start | ||
sudo /etc/init.d/lirc stop | sudo /etc/init.d/lirc stop | ||
+ | |||
+ | = Test e script = | ||
Ora potete testare la mappatura del telecomando appena configurato dando il comando: | Ora potete testare la mappatura del telecomando appena configurato dando il comando: |
Versione delle 19:50, 20 nov 2016
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 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à.