Derek Molloy

Raspberry Pi® a fondo para desarrolladores


Скачать книгу

incorporados a la placa del RPi. Estos LED están en la esquina superior izquierda de la placa del RPi 2 y en la parte inferior izquierda de la del RPi 3. Ambas placas incorporan dos LED que sirven para dar información del estado de las mismas.

      ❏El ACT LED (llamado OK en los modelos antiguos) parpadea de forma predeterminada durante la actividad de la tarjeta micro-SD. Desde Linux nos referimos a ese LED como led0.

      ❏El PWR LED se ilumina cuando el RPi está encendido. Desde Linux, este LED se conoce como led1 en algunos modelos, como el RPi 2, pero en modelos más antiguos está soldado directamente a la entrada de alimentación.

      Figura 2-9: Los LED de actividad y alimentación de los RPi.

      Podemos cambiar el comportamiento de estos LED para que se ajusten a nuestras necesidades, pero durante ese tiempo perderemos estas útiles informaciones de estado y alimentación del dispositivo.

      NOTA Observe que el RPi Zero carece de PWR LED físico (led1), a pesar de que existan entradas en archivos de Linux que indiquen lo contrario. Podemos programar el disparador del ACT LED (led0) como se describe más adelante. Observe que la polaridad del LED está invertida. En modo disparador (trigger mode) "none" (ninguno), un valor de "0" para el brillo enciende el LED, mientras que un valor de "1" lo apaga. Este comportamiento se puede ajustar a lo largo del tiempo.

      Sysfs es un sistema de archivos virtual disponible en las versiones más recientes del núcleo de Linux. Nos proporciona acceso a dispositivos y controladores que de otro modo solo serían accesibles en un espacio restringido del núcleo. Este tema se trata en profundidad en el capítulo 6. Sin embargo, en este punto, resultaría útil explorar brevemente la manera de usar sysfs para modificar el comportamiento de los LED de la placa.

      Usando el cliente SSH, nos conectamos al RPi y navegamos hasta el directorio /sys/class/leds/. La salida que mostramos a continuación es para el RPi 2:

      pi@erpi ~ $ cd /sys/class/leds/

      pi@erpi /sys/class/leds $ ls

      led0 led1

      NOTA Las ubicaciones del directorio de sysfs varían ligeramente entre las distintas versiones del núcleo de Linux, así como entre las diferentes versiones.

      Puede observar el mapeo de ambos LED en sysfs: led0 and led1. Es posible cambiar el directorio para modificar las propiedades de uno de los LED. Por ejemplo, para modificar el comportamiento del ACT LED (led0):

      pi@erpi /sys/class/leds $ cd led0

      pi@erpi /sys/class/leds/led0 $ ls

      brightness device max_brightness subsystem trigger uevent

      Aquí vemos varias entradas de archivo diferentes que nos aportan más información y acceso a los ajustes. Observe que esta sección utiliza algunos comandos que veremos detalladamente en el capítulo siguiente.

      Para determinar el estado de un LED escribiremos lo siguiente:

      pi@erpi /sys/class/leds/led0 $ cat trigger

      none [mmc0] timer oneshot heartbeat backlight gpio cpu0 cpu1 cpu2

      cpu3 default-on input

      donde se observa que el ACT LED está configurado para mostrar actividad en el dispositivo mmc0, la tarjeta micro-SD. Para anular este disparador, escribimos:

      pi@erpi /sys/class/leds/led0 $ sudo sh -c "echo none > trigger"

      pi@erpi /sys/class/leds/led0 $ cat trigger

      [none] mmc0 timer oneshot heartbeat backlight gpio cpu0 cpu1 ...

      Veremos que el LED deja de parpadear por completo. Utilizaremos cat trigger para ver el nuevo estado. Ahora que el disparador del LED está apagado, podemos conectar o desconectar completamente el ACT LED mediante:

      NOTA sudo sh -c sirve para ejecutar un comando del shell desde un comando de cadena de caracteres que requiera acceso de superusuario. No es posible ejecutar el comando utilizando la instrucción "sudo" únicamente, puesto que también se hace uso de la redirección (>)

      del comando echo hacia un archivo (por ejemplo, brightness). Este tema se trata en el capítulo 3.

      pi@erpi /sys/class/leds/led0 $ sudo sh -c "echo 1 > brightness"

      pi@erpi /sys/class/leds/led0 $ sudo sh -c "echo 0 > brightness"

      Incluso podemos establecer el intervalo que nos convenga para que el LED parpadee. Si observamos cuidadosamente, observaremos la naturaleza dinámica de sysfs. Si ejecutamos el comando ls en este punto, el directorio aparecerá como sigue, pero cambiará en breve:

      pi@erpi /sys/class/leds/led0 $ ls

      brightness device max_brightness subsystem trigger uevent

      Para que el LED parpadee, debemos configurar el disparador en modo temporizador con el comando echo timer > trigger. Verá cómo el LED ACT parpadea a intervalos de 1 segundo. Observe las nuevas entradas delay_on y delay_off en el directorio led0:

      pi@erpi /sys/class/leds/led0 $ sudo sh -c "echo timer > trigger"

      pi@erpi /sys/class/leds/led0 $ ls

      brightness delay_off delay_on device max_brightness subsystem

      trigger uevent

      El temporizador del LED emplea los tiempos definidos en ambas entradas. Puede encontrar más información sobre estos valores empleando el comando concatenate (concatenar). Por ejemplo, las líneas siguientes informan del retardo en milisegundos:

      pi@erpi /sys/class/leds/led0 $ cat delay_on

      500

      pi@erpi /sys/class/leds/led0 $ cat delay_off

      500

      Para que el ACT LED parpadee con una frecuencia de 5 Hz (100 milisegundos encendido y 100 apagado), escribiremos:

      pi@erpi /sys/class/leds/led0 $ sudo sh -c "echo 100 > delay_on"

      pi@erpi /sys/class/leds/led0 $ sudo sh -c "echo 100 > delay_off"

      El comando echo mmc0 > trigger devuelve el LED a su estado predeterminado, lo que provoca la desaparición de las entradas delay_on y delay_off:

      pi@erpi /sys/class/leds/led0 $ sudo sh -c "echo mmc0 > trigger"

      pi@erpi /sys/class/leds/led0 $ ls

      brightness device max_brightness subsystem trigger uevent

      ADVERTENCIA Desconectar el cable de alimentación sin que el núcleo de Linux pueda desmontar la tarjeta micro-SD puede corromper el sistema de archivos.

      Por último, vamos a analizar el procedimiento correcto para apagar el RPi. Una desconexión inapropiada puede corromper el sistema de archivos ext4 o, como poco, prolongar los tiempos de inicio a causa de las comprobaciones del mismo. Veamos algunos puntos importantes a la hora de encender, apagar o reiniciar el RPi:

      ❏Escribir sudo shutdown -h now apaga la placa de forma correcta. Si escribimos sudo shutdown -h +5 retrasaremos el apagado cinco minutos.

      ❏Escribir sudo reboot reiniciará correctamente la placa.

      Si el diseño de nuestro proyecto contempla una carcasa para el RPi y necesitamos un medio para apagarlo correctamente desde el exterior, es posible cablear un botón externo a la cabecera GPIO y escribir un script que se ejecute durante el inicio y que solicite una entrada a la GPIO. Si se detecta esa entrada, se podrá llamar directamente a /sbin/shutdown -h now.

      Después de leer este capítulo debería ser capaz de hacer lo siguiente:

      ❏Comunicarse con el RPi desde su ordenador mediante una conexión de red.