Como usar una webcam standard con una Raspberry Pi


Una de las opciones que, a priori, puede parecernos más   atractiva  y tal vez útil por las posibilidades  que  no ofrece como cámara de seguridad, reconocimiento de imágenes, cámara trasera para vehículos , etc   para nuestra Raspberry Pi  es  conectarle una cámara e  intentar  visualizar y/o  capturar en el monitor la imagen captada por la misma..

Lamentablemente  en el universo Linux es algo más complicado añadir drivers para todo el hw disponible ,  y es ahí  donde por desgracia no le son ajenas las cámaras web usadas para pc pues en lugar de utilizar el módulo de la cámara  nativa del Raspberry Pi  que suele tener un coste ciertamente elevado es mas interesante  utilizar una versátil webcam USB estándar para tomar fotos y vídeo en la Raspberry Pi.Tenga en cuenta que la calidad y capacidad de configuración del módulo de cámara nativo con interfaz CSI  es muy superior a una webcam USB estándar,  pero por el contrario este también tiene una gran limitación : la longitud del cable de cinta que excepto compremos que dos  adaptadores de CSi a HDMI (lado cámara) , de HDM a CSI (lado Raspberry Py)   y luego un largo cable hdmi   solo se podría situar tan solo unos pocos centímetros respecto a la Raspberry Pi .

raspberrypi

Requisito previos

Una vez que tengamos una cámara para operar con nuestra RasPi hemos de asegurarnos de que la misma es “soportada” por el S.O. Linux que estamos utilizando.

La consulta de la lista de compatibilidad puede ayudar  pero podemos comprobarlo en desde  linea de  comandos para verificar si el sistema la identifica correctamente.

Antes de conectar la cámara al sistema iremos al terminal y teclearemos el comando dmesg | tail, lo que hará que se nos muestren los últimos mensajes generados por la RasPi.  Ahora conectamos la cámara a la Raspberry Pi y repetimos el comando anterior (dmesg | tail), y en este caso se nos deberán mostrar algunos mensajes que hagan referencia al nuevo hardware detectado.

Otra comprobación interesante es verificar si la cámara ha sido detectada como dispositivo Linux, para ello teclearemos ls /dev , lo que hará que aparezca  , si es que el sistema la detecta , como dispositivo  /dev/videoX ( normalmente /dev/video0 pero asegurese con un ls /dev)

De forma previa podemos instalar  el  software para poder visualizar de una forma cómoda los ficheros obtenidos  para poder verlos desde el propio terminal dentro del entorno gráfico pues la visualización de imágenes desde el entorno gráfico se puede efectuar con solo “pinchar” en la imagen a mostrar desde el navegador gráfico de archivos para los cual podemos instalar el sw de imagen magick

Para instalar el paquete citado  basta teclear:

 sudo apt-get install imagemagick

Existen varias utilidades para capturar imágenes  desde un web cam  veamoslas:

Fswebcam

En efecto la  herramienta fswebcam, que funciona bajo línea de comandos,  nos permite capturar imágenes a través de la Webcam USB, para ello en primer lugar, instale el paquete:fswebcam  con el comando sudo , es decir:

sudo apt-get install fswebcam 

Ahora escriba el comando seguido de un nombre de archivo y una imagen se tomaron con la cámara web y se guardarán al nombre de archivo especificado como por ejemplo fswebcam /dev/video0 image.jpg

Este comando mostrará la siguiente información:

pi@raspberrypi:~ $ fswebcam -d /dev/video0 pepe.jpg
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 384x288 to 352x288.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'pepe.jpg'

Como vemos la resolución por defecto es pequeña y ademas se complementa en la parte inferior con un pequeño banner  que muestra la fecha y hora.

prueba.PNG

En caso de utilizar una web cam hd,  para especificar la resolución podemos forzar que la imagen para sea tomada  a mayor resolución , para ello se puede  utilizar la bandera:1280 x 720-r

fswebcam -r 1280x720 -d /dev/video0 pepe2.jpg

Este comando mostrará la siguiente información:

--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 1280x720 to 640x480.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'pepe2.jpg'

Puede   quitar el banner inferior puede añadir el siguiente parámetro:--no-banner :

fswebcam -r 1280x720 --no-banner image3.jpg

El cual  muestra la siguiente información:

--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
--- Capturing frame...
Corrupt JPEG data: 2 extraneous bytes before marker 0xd6
Captured frame in 0.00 seconds.
--- Processing captured image...
Disabling banner.
Writing JPEG image to 'image3.jpg'.

Ahora con  ese parámetro ya   se toma la imagen a resolución completa  sin banner

Script de captura

Puede escribir un script de Bash para que tome una foto con la webcam por lo que la secuencia de comandos  que vamos a vera continuación guarda las imágenes en el directorio,

En primer lugar  crear el subdirectorio primero en:/home/pi/webcamwebcam  conmkdir webcam

Para crear una secuencia de comandos, abra su editor de la opción y escriba el siguiente código de ejemplo:

#!/bin/bash

DATE=$(date +"%Y-%m-%d_%H%M")

fswebcam -r 1280x720 --no-banner /home/pi/webcam/$DATE.jpg

Este script tome una fotografía y usa como nombre del archivo con una marca de tiempo.

Para poder ejecutar el script webcam.sh en primer lugar nos gustaría hacer el archivo ejecutable:

chmod +x webcam.sh

Luego ejecutar con:

./webcam.sh

Al ejecutarlo dar la  siguiente salida:

--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
--- Capturing frame...
Corrupt JPEG data: 2 extraneous bytes before marker 0xd6
Captured frame in 0.00 seconds.
--- Processing captured image...
Disabling banner.
Writing JPEG image to '/home/pi/webcam/2013-06-07_2338.jpg'.

Time-lapse con cron

Usted puede utilizar para tomar una fotografía en un intervalo dado, como cada minuto para capturar un time-lapse.cron ,para ello primero abra la tabla cron para editar:

crontab -e

Esto tampoco pedirá que editor que desea utilizar, o abrirá en su editor predeterminado. Una vez que tenga el archivo abierto en un editor, agregue la línea siguiente para tomar una fotografía cada minuto (refiriéndose a la secuencia de comandos de Bash desde arriba):

* * * * * /home/pi/webcam.sh 2>&1

Guardar y salir y usted debería ver el mensaje:

crontab: installing new crontab

Asegúrese de que su gscript no permite guardar cada fotografía tomada con el mismo nombre de archivo. Esta acción sobrescribirá la imagen cada vez.

 

Uvcpature

Para poder utilizar las prestaciones de nuestra cámara web también podemos instalar los paquetes uvccapture y libv4linux-0

Antes de hacerlo puede ser preciso (recomendable) actualizar las fuentes de instalación con: sudo apt-get update  y para descargar los paquetes ejecutaremos:

 sudo apt-get

install uvccapture libv4l-0

Conectada la cámara y teniendo los programas adecuados ya instalados, vamos a realizar una prueba simple de que todo está funcionando correctamente. Desde el terminal tomamos una instantánea con los parámetros estándar (opción -m) :

 uvccapture -m

Ahora listamos la carpeta para comprobar que se capturó el fichero snap.jpg (nombre por defecto de la captura) y luego lo visualizamos mediante el comando display snap.jpg

En caso de que  el fichero capturado (snap.jpg) salga  bastante obscuro podemos ver como están los ajustes por defecto de la cámara mediante el parámetro -v , uvccapture -m -v

También si el brillo está muy bajo, podemos capturar una nueva imagen pero subiéndolo bastante mediante el comando (parámetro -Buvccapture -m -B50

Además de los parámetros comentados, el comando uvccapture nos permite otra serie de interesantes opciones, como por ejemplo podemos parametrizar una nueva captura – modificando brillo y contraste – pero guardando la misma en un fichero llamado “captura.jpg

uvccapture -m -B50 -C10 -o”captura.jpg”

Por si fuera poco el comando uvccapture permite que efectuemos de forma secuencial, – y en un lapso de tiempo elegido por nosotros – la captura consecutiva de tomas desde la cámara USB. No debemos confundir esta posibilidad – aunque se le parezca – con la toma de un “stream” o flujo de vídeo continuo. Lo que obtendremos al efectuar esta captura consecutiva es imágenes cada cierto intervalo. Así que vamos a verlo con un ejemplo…

Ejecutamos el comando uvccapture con el parámetro -t , el cual hace que se capture una imágen cada cierto número de segundos (3 segundos en nuestro ejemplo), el cual, si no se especifíca algo diferente se guardará en el fichero snap.jpg.

uvccapture -m -B70 -C40 -S5 -t3   (pulsar VTRL+c para finalizar el bucle de captura)

El resultado de la captura será una toma cada 3 segundos que se guardará en el fichero por defecto (snap.jpg). La única desventaja de este método radica en que el fichero de captura se “machaca” con cada una de ellas, por lo que solo estará a nuestra disposición el último de los generados.

Para subsanar esto podemos hacer uso de una de las prestaciones del programa uvccapture que nos permite ejecutar un comando Linux inmediatamente después de efectuar una captura. ¿Y que podemos ejecutar?… pues parece claro que lo más idóneo sería algún tipo de comando o sucesión de estos que nos permita salvaguardar la última captura, de forma y manera que al realizarse la siguiente toma esta no sea “machacada” impunemente de forma muy similar a como vimos en el script anterior.

 

 

 

Otras herramientas útiles

Otras herramientas están disponibles que puede ser útil cuando se utiliza la cámara o una webcam:

  • SSH  Utilizado para acceder remotamente el Raspberry Pi en su red local
  • SCP  Sirve para copiar ficheros sobre SSH  ypara obtener copias de las fotografías tomadas en la Pi en el ordenador principal
  • rsync : Uso para sincronizar la carpeta de imágenes tomadas en una carpeta entre el Pi al ordenadorrsync
  • cron Utilizar para programar tomar una fotografía en un intervalo dado, como cada minuto para capturar un time-lapsecron

 

 

 

Mas  información en  raspberrypi.org

Raspberry Pi como centro de entretenimiento al volante


El proyecto, desarrollado por Michal Szwaj, plantea un sistema para un vehículo  en el que es posible controlar la reproducción multimedia   o acceder a los mapas de Google, aunque de momento no  ofrece funciones como la navegación GPS, pero la versatilidad de la Raspberry Pi   con el soporte Bluetooth ,hace que esa opción no parezca difícil de implementar.

OpenAuto,  es un proyecto que con una Raspberry Pi 3 y una pantalla táctil nos da acceso a unas funciones muy similares a las que ofrece Android Auto, basándose en la  biblioteca  aasdk y librerías Qt siendo el objetivo principal  ejecutar esta aplicación en una placa  de RaspberryPI 3 sin problemas. El proyecto se basa en la instalación de una distribución Linux, Raspbian Stretch, a la que luego se le añaden librerías como las célebres Qt para poder ejecutar las aplicaciones orientadas a ser utilizadas en el coche.

A la Raspberry Pi 3 se le conecta una pantalla táctil (480p, 720p o 1080p)  pues  este es recomendable para la interacción con el sistema. Completar el proceso es relativamente sencillo, y tanto el código fuente como las instrucciones de instalación están disponibles públicamente en GitHub .

Las funcionalidades soportadas  son las siguientes:

  • 480p, 720p y 1080p con 30 o 60 FPS.
  • Aceleración de hardware de RaspberryPI 3 soporte para decodificar la secuencia de vídeo (hasta 1080p@60).
  • Reproducción de audio de todos los canales de audio (los medios de comunicación, sistema y discurso).
  • Entrada de audio para comandos de voz.
  • Pantalla táctil y soporte de  botones de entrada.
  • Bluetooth.
  • Lanzamiento automático después de dispositivo hotplug.
  • Detección automática de dispositivos Android conectados.
  • Modo inalámbrico (WiFi) mediante servidor de unidad principal (debe estar habilitado en configuración desarrollador ocultos).
  • Configuración fácil de usar.

 

Electrónica necesaria

Sin duda , aparte de la propia Rasberry Pi  3 , el display  táctil es un componte  fundamental en este proyecto. Con una resolución de 800×480 el modulo oficial de display +sensor se conecta a la Raspberry Pi  3 a través de una placa  adaptadora que se encarga de controlar la alimentación y la señal de vídeo.

Solo se necesitan dos conexiones de la Raspberry Pi 3 : la  alimentación desde el conector GPIO y el cable plano al conector DSI, presentes en todas las Raspberry.

El kit incluye:

  • Pantalla 7″ multitáctil 10 puntos
  • Placa conversara
  • Cable plano DSI
  • 4x tornillos para ajustar la Raspberry a la pantalla
  • 4x cables para conectar la pantalla a la Raspberry

En el siguiente video se puede ver el proceso de  montaje de este kit.

https://youtu.be/tK-w-wDvRTg

El controlador táctil ofrece 10 puntos de presión, por lo que el usar teclados en pantalla como el integrado en Raspbian lo hacen realmente sencillo.

Este kit convierte pues  una Raspberry en una tableta multitáctil, sistema de información o dispositivo independiente.Es realmente interactivo  pues la ultima version de Raspbian soporta teclado virtual en pantalla, así que no se necesita conectar un teclado y un ratón físicos ni por supuesto una pantalla externa.

Como podemos ver Android Auto se ejecuta en una Raspberry Pi 3 con la pantalla táctil oficial de 7 pulgadas anteriormente citada.  Estos son los componentes esenciales para implementar  este proyecto:

  • Pantalla táctil oficial de Raspberry Pi de  7″
  • Raspberry Pi 3
  • Convertidor C-DC Converter de 5v
  • Tarjeta USB de sonido ( para mejorar el sonido de la Raspberry)
  • Camera para Raspberry Pi 
  • Adaptador  por cable  hdmi  para la cámara  para llevar ésta desde la parte atrás del vehículo hasta el frontal de coche por medio de un cable hdmi standard (estos dos adaptadores se   pueden buscar en portales  orientales como «Pi Camera HDMI Cable Extension»)
  • Caja a  medida,  o si no tiene ganas de construir su propio gabinete, puede comprar fundas de plástico genéricas hechas por «Smarticase»

 

 

 

Raspvid

raspivid es la herramienta de línea de comandos para capturar vídeo con el módulo de cámara nativo de Raspberry. Con el modulo de cámara conectado y activado, se puede grabar un vídeo utilizando el siguiente comando:

raspivid -o vid.h264

Recuerde que debe utilizar y para voltear la imagen si es necesario, como con raspistill-hf-vf (esto guardara un archivo de vídeo 5 segundo en el camino dado aquí como (longitud por defecto de tiempo).vid.h264)

Para especificar la longitud del vídeo tomado, pase en la bandera con un número de milisegundos. Por ejemplo:-t raspivid -o video.h264 -t 10000  (Esto graba 10 segundos de video.)

Para una lista completa de las opciones posibles, ejecutar sin argumentos, o este comando a través de y desplácese a través de la pipa:raspividless

raspivid 2>&1 | less

Utilice las teclas de flecha para desplazarse y el tipo de salida.q

Para ver la cámara trasera ejecutar raspvid seguido de los  parámetros  , como por ejemplo:

raspvid  -t 5000

raspvid -t 0

raspvid -t  -vh

raspvid -t 0 -vf ( invierte la imagen)

raspvid -t 0 -hf -vf

 

 Instalar aasdk en Raspberri PI 3

  1. Instalar el software necesario

 sudo apt-get install -y libboost-all-dev libusb-1.0.0-dev libssl-dev cmake libprotobuf-dev protobuf-c-compiler protobuf-compiler

  1. Repositorio de aasdk clon

$ cd

$ git clone -b master https://github.com/f1xpl/aasdk.git

  1. Crear el directorio aasdk_build en el mismo nivel que aasdk dir

$ mkdir aasdk_build

$ cd aasdk_build

  1. Generar archivos de cmake

$ cmake-DCMAKE_BUILD_TYPE = lanzamiento… /AASDK

  1. Construir aasdk

$ make

Instalar el resto de sw en Raspberry PI 3

  1. Instalar el software necesario

$ sudo apt-get install -y libqt5multimedia5 libqt5multimedia5-plugins libqt5multimediawidgets5 qtmultimedia5-dev libqt5bluetooth5 libqt5bluetooth5-bin qtconnectivity5-dev pulseaudio librtaudio-dev librtaudio5a

  1. Construir ilclient de frambuesa PI 3 firmware

$ cd /opt/vc/src/hello_pi/libs/ilclient

$ make

  1. Repositorio de Open clon

$ cd

$ git clone -b master https://github.com/f1xpl/openauto.git

  1. Crear el directorio openauto_build en el mismo nivel que Open dir

$ mkdir openauto_build

$ cd openauto_build

  1. Generar archivos de cmake

Nota: Si es necesario, ajustar los path  a su localización de directorios aasdk y aasdk_build.

$ cmake -DCMAKE_BUILD_TYPE=Release -DRPI3_BUILD=TRUE -DAASDK_INCLUDE_DIRS=»/home/pi/aasdk/include» -DAASDK_LIBRARIES=»/home/pi/aasdk/lib/libaasdk.so» -DAASDK_PROTO_INCLUDE_DIRS=»/home/pi/aasdk_build» -DAASDK_PROTO_LIBRARIES=»/home/pi/aasdk/lib/libaasdk_proto.so» ../openauto

  1. Construir OpenAuto

$ make

  1. Ejecutar Open

$ /home/pi/openauto/bin/autoapp

Añadir Open a autorun

  1. Archivo abrir autostart

$ sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart

  1. Agregar debajo de línea al final del archivo autorun

@/ hogar/pi/Open/bin/autoapp

 

Apagar  Raspbery PI 3 cuando el teléfono se está desconectando

  1. Archivo abierto openauto.rules

$ sudo nano /etc/udev/rules.d/openauto.rules

  1. Añadir a continuación las líneas al final del archivo openauto.rules

SUBSISTEMA == «usb», acción == «add», ENV {ID_VENDOR_ID} == «18d 1», ENV {ID_MODEL_ID} == «2d 00» RUN += «/ bin/sh – c ‘ / sbin/shutdown – c & & echo 0 > /sys/class/backlight/rpi_backlight/bl_power'»

SUBSISTEMA == «usb», acción == «add», ENV {ID_VENDOR_ID} == «18d 1», ENV {ID_MODEL_ID} == «2d 01», RUN += «/ bin/sh – c ‘ / sbin/shutdown – c & & echo 0 > /sys/class/backlight/rpi_backlight/bl_power'»

SUBSISTEMA == «usb», acción == «remove», ENV {ID_VENDOR_ID} == «18d 1», ENV {ID_MODEL_ID} == «2d 00» RUN += «/ bin/sh – c ‘ / sbin/shutdown: apagado 1 & & echo 1 > /sys/class/backlight/rpi_backlight/bl_power'»

SUBSISTEMA == «usb», acción == «remove», ENV {ID_VENDOR_ID} == «18d 1», ENV {ID_MODEL_ID} == «2d 01», RUN += «/ bin/sh – c ‘ / sbin/shutdown: apagado 1 & & echo 1 > /sys/class/backlight/rpi_backlight/bl_power'»

Este  script va a hacer las siguientes acciones:

  1. Desactivar el apagado de pantalla y programar de forma  retrasada  por 1 minuto cuando el teléfono se está desconectando
  2. Encender la pantalla y cancelar el apagado cuando el teléfono se está conectando

Puede ajustarse el  retraso de 1 minuto para sus necesidades.

 

Reglas de udev (permisos de USB)

Para utilizar Open con sistema operativo basado en Linux (por ejemplo, Raspbian) con udev, debe crear una regla para permitir la comunicación con los dispositivos USB en modo de lectura/escritura.

La regla más simple parece debajo de uno:

SUBSISTEMA == «usb», atributos {idVendor} == «*», atributos {idProduct} == «*», MODE = «0660», grupo = «plugdev»

Para agregar esta regla de udev, hacer:

$ cd /etc/udev/rules.d

$ sudo touch openauto.rules

$ sudo nano openauto.rules

Aplique estas reglas, guarde el archivo y reinicie el dispositivo.

Tenga en cuenta que la regla anterior permite  abrir cualquier dispositivo USB en modo de lectura/escritura por cualquier aplicación instalada en el sistema. Considerar como insegura.

Configuración de PulseAudio

Paquetes audio de AndroidAuto se entregan en trozos muy pequeños. Debido a esto podrían necesitarse ajustes de configuración de PulseAudio para evitar problemas con el audio.

Añadir/anulación por debajo de las líneas en /etc/pulse/daemon.conf

resample-method = ffmpeg

En /etc/pulse/default.pa añadir tsched = 0 en la línea de ‘carga-módulo módulo-udev-detect’

load-module module-udev-detect tsched=0

Después de cambios de configuración debe reiniciar la instancia de pulseaudio. Puede hacerlo con  la ejecución del comando  pulseaudio -k .

 

Fuente https://github.com/f1xpl/openauto/wiki/Build-instructions

 

ELECTRÓNICA ADICIONAL

Para facilitar el manejo  de openAuto  y extender su funcionamiento  Everlanders ha conectado 4 pulsadores directos para activar la cámara, variar el brillo o despertar la placa

No deja de ser importante el  apartado de alimentación  pues en la Raspberry Pi 3 es de 5v DC 2amp y en un automóvil es de 12V  requiriéndose  un convertidor   dc-dc  .Obviamente en los tiempos que correen ,es mucho mas eficiente  un convertidor conmutado 12v-5v  que un regulador  7805

También ,por ultimo para detectar la marcha atrás ,es muy  interesante usar un opto-acoplador para aislar a la Raspberry Pi 3 de posibles problemas ele ctricos   en el automovil dado el aislamiento galvánico que nos ofrecen los optoaisladores.

El esquema final de este montaje completamente opcional es el siguiente:

esquema.PNG

Para manejar los pulsadores se requieren   los siguientes tres siguientes scripts escritos por el  Everlands:

LightMonitor.py

Este script en Python sirve  para atenuar la pantalla y cambiar a la cámara de retroceso. Recuerde, que es interesante usar un optoacoplador para detectar la marcha atrás con los la lógica se invierte … 0 = encendido 1 = apagado. Ademas, solo se debe ejecutar uno de estos scripts de «Monitor», es decir  no puede estar ejecutando RearviewMonitor.py Y LightMonitor.py

CODIGO DE LIGTMONITOR.PY

#!/usr/bin/python

import RPi.GPIO as GPIO
import time
import subprocess, os
import signal
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
RearView_Switch = 14 # pin 18
Brightness_Switch = 15 # pin 16
#Extra_Switch = 1 # pin 3
GPIO.setup(RearView_Switch,GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(Brightness_Switch,GPIO.IN, pull_up_down=GPIO.PUD_UP)

print » Press Ctrl & C to Quit»

try:

run = 0
bright = 0
while True :
time.sleep(0.25)

# esto restringe la secuencia de comandos para verificar las luces cada 1/4 de segundo. #No tiene sentido revisar 10.000 veces por segundo.

# Si se encienden las luces de marcha atrás, hacer esto:
if GPIO.input(RearView_Switch)==0 and run == 0:
print «Switching Rearview Camera On»
rpistr = «raspivid -t 0 -vf -h 480 -w 800»
p=subprocess.Popen(rpistr,shell=True, preexec_fn=os.setsid)
run = 1

Cuando las luces de marcha atrás se apagan, hacer esto:

if GPIO.input(RearView_Switch)==1 and run == 1:
os.killpg(p.pid, signal.SIGTERM)
print «Killing the reverse camera feed»
run = 0

# Estos dos bloques siguientes monitorean los faros o la luz del marcador y ajustan la #configuración de brillo de la pantalla.

if GPIO.input(Brightness_Switch)==0 and bright == 0:
print «Setting Brightness to 20» # 20 is about 10%
subprocess.call («/usr/local/bin/backlight.sh 20», shell=True)
bright = 1

if GPIO.input(Brightness_Switch)==1 and bright == 1:
print «Setting Brightness back to 255» #255 is 100%
subprocess.call («/usr/local/bin/backlight.sh 255″, shell=True)
bright = 0

except KeyboardInterrupt:
print » Quit»
GPIO.cleanup()

 

backlight.sh

Este script en cshell sirve par ajustar el nivel de luminosidad de la pantalla oficial qeu hemos conectado a la raspberry. Como es de esperar acepta  un parámetro que es precisamente un entero entre 0 y 255

CODIGO SCRIPT BACKLIGHT

#!/bin/bash

level=$1
#echo «level given is $level»

if [ $# != 1 ]; then
echo «USAGE: $0 brightness_level (0 to 255)»
exit 1
fi

if [[ $level -ge 0 && $level -le 255 ]]; then
#echo «level given is $level»
echo $level > /sys/class/backlight/rpi_backlight/brightness
echo «Screen brightness set to $level.»
exit 0
else
echo «Brightness level $level is out of range! (0 to 255 only)»
exit 1
fi

Para  probar el  script de retro-iluminación   ejecutar el script con el parámetro usando un valor entero menor que 255 ,por ejemplo  ./backlight.sh 128

 

ButtonMonitor.py

#!/usr/bin/python

import RPi.GPIO as GPIO
import time
import subprocess, os
import signal
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
RearView_Switch = 14 # pin 18
Brightness_Switch = 15 # pin 16
#Extra_Switch = 1 # pin 3
GPIO.setup(RearView_Switch,GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(Brightness_Switch,GPIO.IN, pull_up_down=GPIO.PUD_UP)

print » Press Ctrl & C to Quit»

try:

run = 0
bright = 0
while True :
time.sleep(0.1)

#los siguientes cuatro bloques se utilizan para alternar entre las vistas de la cámara.

if GPIO.input(RearView_Switch)==0 and run == 0:
print » Started Full Screen»
rpistr = «raspivid -t 0 -vf -h 480 -w 800»
p=subprocess.Popen(rpistr,shell=True, preexec_fn=os.setsid)
run = 1
while GPIO.input(RearView_Switch)==0:
time.sleep(0.1)

if GPIO.input(RearView_Switch)==0 and run == 1:
os.killpg(p.pid, signal.SIGTERM)
print » Started Full Screen Transparent»
rpistr = «raspivid -t 0 -vf -op 128 -h 480 -w 800»
p=subprocess.Popen(rpistr,shell=True, preexec_fn=os.setsid)
run = 2
while GPIO.input(RearView_Switch)==0:
time.sleep(0.1)

if GPIO.input(RearView_Switch)==0 and run == 2:
os.killpg(p.pid, signal.SIGTERM)
print » Started PIP Right side»
rpistr = «raspivid -t 0 -vf -p 350,1,480,320»
p=subprocess.Popen(rpistr,shell=True, preexec_fn=os.setsid)
run = 3
while GPIO.input(RearView_Switch)==0:
time.sleep(0.1)

if GPIO.input(RearView_Switch)==0 and run == 3:
print » Stopped »
run = 0
os.killpg(p.pid, signal.SIGTERM)
while GPIO.input(RearView_Switch)==0:
time.sleep(0.1)

# Estos tres bloques siguientes alternan entre las tres configuraciones de brillo.

if GPIO.input(Brightness_Switch)==0 and bright == 0:
print «Setting Brightness to 255»
subprocess.call («/usr/local/bin/backlight.sh 255», shell=True)
bright = 1
while GPIO.input(Brightness_Switch)==0:
time.sleep(0.1)

if GPIO.input(Brightness_Switch)==0 and bright == 1:
print «Setting Brightness to 128»
subprocess.call («/usr/local/bin/backlight.sh 128», shell=True)
bright = 2
while GPIO.input(Brightness_Switch)==0:
time.sleep(0.1)

if GPIO.input(Brightness_Switch)==0 and bright == 2:
print «Setting Brightness to 20»
subprocess.call («/usr/local/bin/backlight.sh 20», shell=True)
bright = 0
while GPIO.input(Brightness_Switch)==0:
time.sleep(0.1)

except KeyboardInterrupt:
print » Quit»
GPIO.cleanup()

 

Respecto a la activación ,para probar la camara  ejecutar  ButtonMonitor.py.  Ahora una vez probado , tenemos que hacer  que se ejecute automáticamente . Para ello tenemos que editar el archivo /home/pi/.config/lxsession/LXDE-pi/autostart

En la ultima linea del script  añadir  /usr/local/bin/ButtonMonitor.py

autostart.PNG

 

IMPORTANTE : Deberemos copiar los tres  scripts  a la ruta /usr/local/bin  y conceder los permisos de ejecución  mediante el comando sudo chmod +x . La fuente original de los  scripts  es :https://gist.github.com/Everlanders

 

En el siguiente vídeo podemos ver todo el proceso de creación de un dispositivo basado en Raspberry PI  para uso exclusivo en un vehículo  usando  todos los componentes mencionados anteriormente.