Академический Документы
Профессиональный Документы
Культура Документы
Hola gente, hoy publico un proyecto que consiste en controlar las entradas y las
salidas de una Raspberry PI con un simple programa hecho en lenguaje Python.
Aclaro que mis conocimientos sobre Python, Linux y Raspberry son limitados, me
considero mas bien un aprendiz. De cualquier manera, siguiendo el acostumbrado
estilo de Inventable, he tratado de ser preciso y exhaustivo.
Entradas y salidas de la Raspberry
Para este proyecto he usado una vieja Raspberry PI Modelo B que tenía abandonada
en un cajón. Ya he hablado de la Raspberry PI en mi artículo "Interfaz experimental
para Raspberry PI", especialmente sobre el conector con entradas y salidas. Las
primeras Raspberry tenían un conector de 26 pines. Modelos más recientes disponen
de uno más grande de 40 pines y por lo tanto con una mayor cantidad de entradas y
salidas.
Pines del conector
de la Raspberry PI de todos los modelos (versiones de 26 pines y de 40 pines).
Por suerte, en este cambio de conectores se ha mantenido la misma distribución de los
primeros 26 pines iniciales por lo que la descripción de este proyecto es aplicable
para todos los modelos de Raspberry, viejos y nuevos.
Instalación del sistema operativo
Como SD (o microSD en los modelos más modernos) podemos usar una de 8 Giga con
buena velocidad (Clase 10). Desde el sito oficial de Raspberry PI bajamos el software
NOOBS en formato zip, sigla de "New Out of the box software". En el momento que
escribo este artículo la última versión es la 2.4.4. Al interno de NOOBS se encuentra
el sistema operativo Raspbian (Linux Debian para Raspberry PI). El file zip pesa
alrededor de 1,5 Gigabytes.
El software NOOBS es estupendo, basta descomprimirlo y copiar su contenido en la
SD que usaremos. Metemos la SD en la Raspeberry y conectamos la alimentación de
5V a la plaqueta. Me recuerdo que años atrás el procedimiento era mucho más
complicado. Una vez encendida la tarjeta, el software pregunta si queremos instalar
Raspbian o LibreELEC_RPi, elegimos Raspbian.
Imagen en la pantalla
durante la instalación de Raspbian.
Una vez instalado todo, aparece el desktop de Linux Raspbian y desde la barra del
menú ubicada en alto de la pantalla seleccionamos "Preference" y
después Raspberry Pi Configuration.
Imagen de la
pantalla una vez instalado Raspbian.
Aquí podemos elegir el idioma, el tipo de teclado que estamos usando, la zona horaria
donde nos encontramos y si lo deseamos podemos cambiar el nombre de usuario y la
password aunque si esto último no es necesario. He preferido de mantener la versión
en inglés del sistema operativo en el caso que este artículo sea traducido en otros
idiomas.
Ventana para la
configuración de Raspbian (nombre usuario, tipo de teclado, idioma, zona horaria,
etc.)
Para la conexión WiFi tuve que agregar un módulo externo porque la mía Raspberry
no lo tenía incorporado como en las últimas versiones. Una vez conectado en el puerto
USB, en la derecha de la barra del menú del desktop (zona de notificaciones), hay un
icono que permite de elegir la red a la cual conectarse.
Actualización del sistema operativo
Todos los programas necesarios para este proyecto se encuentran ya instalados en la
distribución de Raspbian incluida en el file NOOBS que hemos bajado.
Indicación para abrir el
terminal
De cualquier manera, antes de continuar, es conveniente actualizar el sistema
operativo. Para ello, abrimos el terminal y escribimos:
sudo apt-get update <RETURN>
Este comando actualiza la lista de los software con las versiones más recientes pero
no instala nada. Una vez que ha terminado, para efectuar la verdadera actualización de
los paquetes, escribimos el comando:
1 #!usr/bin/env python
2
3 import RPi.GPIO as io
4 import time
cd Inventable <RETURN>
Después escribimos:
El primer programa
Volvemos a nuestro editor y escribimos la primera versión de nuestro programa que
enciende un solo led en modo intermitente cuando activamos el primer pulsador
mientras que el segundo pulsador nos sirve para terminar el programa.
La Raspberry PI
conectada a la protoboard con los leds y los pulsadores.
En el renglón 11, con el comando io.setmode (io.BCM), decimos a Python que los
números que estamos usando corresponden a las entradas y a las salidas del micro. Si
hubiésemos usado io.setmode (io.BOARD)los números corresponderían a los
números de los pines del conector de las Raspberry. Yo por tradición prefiero
referirme al micro.
En el renglón 12, con io.setwarnings(False) le decimos a Python de no mostrarnos
advertencias de pines ya ocupados para otras funciones.
En el renglón 14 decimos a Python que el pin conectado al led 1 es
una salida mientras que en los renglones 16 y 17 le decimos que los pines conectados
a los pulsadores son entradas.
En el renglón 19 creamos un bucle (loop) que espera hasta que activamos el pulsador
1. He usado un "for" de 100 ciclos en lugar de "while" porque en el caso de problemas
con la activación del pulsador 1(por ejemplo en el caso de error en la conexiones),
después de 50 segundos (100 ciclos de medio segundo), termina "si o si" el bucle
evitando que el programa quede bloqueado en un loop infinito sin saber si el
programa está funcionando.
En el renglón 25 empieza el bucle de intermitencia del led, a través de la
instrucción while y seguirá adelante hasta que activemos el pulsador 2. Observen
que el código del programa en algunas partes se encuentra separado del margen
izquierdo por espacios. Esto se llama identación (derivado del inglés identation) o
más correctamente es castellano: sangrado y es muy importante en Python porque
sirve para distinguir los bloques de código (como en el caso de las instrucciones end
if o next del basic o los símbolos { } del C o derivados).
Conexiones a la
Rasberry PI
Los expertos de Python aconsejan de usar una identación (o sangrado) de 4
espacios y sin usar tabulaciones. Quizás en futuro hablaré más de este tema pero
por ahora les digo de respetar correctamente este sangrado porque si no lo hacen el
programa no funcionará correctamente.
El estilo de los programas en Python
No obstante Python sea un lenguaje muy intuitivo y fácil de aprender, la
comunidad que lo sostiene mantiene una actitud muy rigurosa respecto al estilo
del código escrito. Creo que esto se debe a dos motivos: el primero está
relacionado a su creador: Guido van Rossum que da mucha importancia a la
estética y a la elegancia del código. El segundo motivo (y no menos importante)
es que el código Python es fundamentalmente "open source" y se condivide en
todo el mundo (especialmente a través de las librerías), por lo tanto es
necesario que el código escrito sea bien legible y claro. Las indicaciones de
estilo más importantes se encuentran en un documento llamado PEP-8 que
aconsejo de leer a los que empiecen (como yo) a trabajar con Python.
El segundo programa
Una vez que el programa funciona correctamente podemos escribir una versión más
sofisticada del mismo que usa los 4 leds. Desde el editor creamos un nuevo file que lo
llamaremos test_leds2.py y lo guardamos. Después escribimos lo siguiente:
El programa es muy similar al primero, con la diferencia que hemos declarado 4 leds
en lugar de uno y que el ciclo "while" enciende y apaga los leds en secuencia. El
funcionamiento de los pulsadores es similar.
Conclusiones
Las técnicas de programación en Python pueden ser muy simples o muy sosfisticadas
(por ejemplo con la programación orientada a objetos). En este proyecto he tratado
de reducir la complejidad (ni siquiera funciones he usado) para ser lo más didáctico
posible. Python, Raspberry y Linux son argumentos muy extensos sobre los cuales
pueden encontrar toneladas de artículos en Internet y también tantos libros. En este
artículo quise demostrar que es posible controlar entradas y salidas de una Raspberry
PI en modo sencillo y sin complicaciones, empezando desde cero . Así fue y esto abre
perspectivas muy interesantes en la integración de software de alto nivel y
electrónica.