Differenze tra le versioni di "Accendere e spegnere 4 led tramite un ricevitore a infrarossi"

Da raspibo.
Jump to navigation Jump to search
 
Riga 3: Riga 3:
 
un ricevitore infrarossi universale che lavora sui 38khz (VS1838B),  
 
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)
 
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 della pacchetto LIRC (http://www.lirc.org/) che è stato incluso nelle ultime versioni di Raspbian
 +
e quindi non si necessità di dover ricompilare il 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_0
 +
            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_1
 +
            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
 +
 +
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 occupea 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 del telecomando 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 spegnere.
 +
 +
ora eseguendo il comando
 +
irexec &
 +
 +
e premendo i tasti che abbiamo mappato, noteremo che la prima volta i led si accenderanno, mentre premendo per la seconda volta lo stesso tasto invece si spegneranno.

Versione delle 00:42, 14 apr 2013

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 della pacchetto LIRC (http://www.lirc.org/) che è stato incluso nelle ultime versioni di Raspbian e quindi non si necessità di dover ricompilare il 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_0
            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_1
            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

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 occupea 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 del telecomando 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 spegnere.

ora eseguendo il comando

irexec &

e premendo i tasti che abbiamo mappato, noteremo che la prima volta i led si accenderanno, mentre premendo per la seconda volta lo stesso tasto invece si spegneranno.