Un pequeño ordenador
Se trata de un ARM v8 de 64 bits a 1.5 GHz, con dos puertos HDMI (doble monitor) y muy buenas comunicaciones (Gigabit Ethernet, 2.4/5.0 GHz WiFi y Bluetooth 5.0).
El decodificador hardware H.265 permite 4K con 60 fps (3840×2160 pixels, 60 frames per second).
Y lo que hace realmente diferente la Raspberry Pi de un ordenador convencional son sus 40 pins GPIO (General Purpose Input Output) que nos permiten interactuar con sensores y actuadores.
Si la queremos usar como mini ordenador necesitamos además un teclado, un mouse, una caja, un microSD, una fuente de alimentación con interruptor y una pantalla.
MicroSD - Sistema Operativo
Para arrancar la placa tenemos que copiar una imagen de Sistema Operativo en una tarjeta microSD (32GB, mínimo Class 10).
En función del uso que queramos darle tenemos tres imágenes del Raspberry Pi OS de 32 bits, que está basado en Debian 9. La Lite no tiene entorno gráfico, sólo terminal de línea de comandos (Headless Server) y la Minimal y la Full.
Se recomienda empezar con la Minimal, que viene con PIXEL Desktop, Chromium Browser, VLC Player y Python, y después modificar según el uso que queramos darle.
Hay otros Sistemas Operativos disponibles como el Kali Linux de 64 bits, que ya nos viene con GCC, GNU Make, GNU Debugger, más adecuados para desarrolladores, pero menos estables y con menos aplicaciones.
Sólo cambiando la microSD, donde está la imagen del Sistema Operativo, podemos conseguir funcionalidades totalmente distintas de nuestra Raspberry Pi
Primer Arranque
Una vez insertada la microSD con la imagen del SO elegido, conectamos un teclado y un mouse Bluetooth (lógicamente pueden ser USB), un cable Ethernet y un monitor en la conexión HDMI 0. Finalmente, conectamos una alimentación adecuada de 5V 3A.
El primer arranque nos pide donde estamos localizados. En el caso de España nos da 6 posibilidades de idioma desde Aragonese a European Spanish. Una vez le has dado el password de la WIFI, hace todos los updates que cree oportunos, vuelve arrancar y ya tenemos un ordenador funcional.
Ahora podemos instalar GIMP (GNU Image Manipulation Program) y LibreOffice (Free Office Suite) para tener todos los básicos de un ordenador.
Navegando con el Chrome se nota un poco el rendering de las páginas pero todo es bastante fluido.
Cómo instalar más programas
APT (Advanced Packaging Tool) es el programa de gestión de paquetes de Debian que nos permite instalar y desinstalar software en la RPi.
Como ejemplo vamos a instalar los entornos de desarrollo de programas Java y C/C++ desde la terminal de línea de comandos.
Java
Una vez instalada podemos saber la versión con el comando
Herramientas de desarrollo C/C++
build-essential | GNU C/C++ compilers |
---|---|
cmake | Build script generator - CMakeList.txt |
gdb | GNU Debugger |
git | Source Control Management |
gpiod | Librería acceso GPIO |
libgpiod-dev | gpiod lib headers |
Conexión automática a nuestra WiFi
Editamos el archivo wpa_supplicant.conf con nano
y ponemos al final
network={
ssid="Nuestra WiFi"
psk="PassWord de la WiFi"
}
Salvamos y rearrancamos la RPi.
Conexión Remota
IP estática
Configurar el router para que asocie siempre la misma IP a la Raspberry nos facilitará las conexiones remotas con VNC (Virtual Network Computing), SHH (Secure Shell), FTP (File Transfer Protocol).
Habilitar VNC y SSH
Podemos habilitar VNC y SSH en las Raspberry en
Desenchufamos la pantalla, el teclado y el mouse y reiniciamos la RPi. Esperamos almenos hasta que el led verde, indica accesos a la microSD, deje de parpadear en la RPi, y podemos hacer una conexión remota como sigue.
VNC
VCN nos permite usar el entorno gráfico del SO de la RPi remotamente desde nuestro ordenador.
Hay muchos clientes VNC para Windows 10, como el que podemos encontrar www.realvnc.com.
SSH
Es un terminal de comandos en línea que podemos usar remotamente para controlar RPi.
El SSH, ya viene con Windows 10, lo podemos habilitar en
En la terminal del Windows PowerShell ejecutamos
donde pi es el usuario por defecto de la Raspberry y la IP es nuestra IP privada.
FTP
Bitwise SSH client, que podemos encontrar en www.bitvise.com, tiene un FTP gráfico que nos permite mover archivos entre nuestro ordenador y la RPi muy fácilmente.
Visual Studio Code
Personalmente, instalo el Raspberry PI OS Lite con el programa Raspberry PI Imager, que permite configurar usuario, password, SSH, wifi ... y después al arrancar lo conecto al VS Code en modo remoto.
Visual Studio Code es el editor Open Source de moda. Se puede instalar en la RPi pero mucho mejor si lo usamos desde nuestro ordenador habitual añadiendo una extensión que nos permite la conexión remota a la RPi. O sea, estamos editando el código en nuestro ordenador pero realmente los archivos están en la RPi. Cuando los ejecutamos también lo hacen en la RPi.
VS Code nos enlaza con RPi a través del SSH. La ventaja que nos proporciona es que actúa como un buen explorador de archivos remoto de la RPi.
Se tiene que configurar en el VS Code que la conexión remota con RPi es del tipo Linux, sino no funciona.
Cómo controlamos las GPIO
Desde la línea de comandos
Imprimir el pinout
raspi-gpio
El raspi-gpio actúa directamente en los registros sin pasar por el SO.
Por ejemplo, podemos configurar el pin 15 de la GPIO como salida
ponerlo a nivel alto de tensión (3V3)
y bajarlo (0V)
Si queremos que el mismo pin sea una entrada
que podemos leer
GPIO 15: level=0 fsel=0 func=INPUT pull=DOWN
Desde C/C++
Tenemos Gpiod que tiene varios comandos en línea y la librería libgpiod en C, con bindings para C++ y Python, que nos permiten interactuar con las GPIO a través del SO.
Ejemplo
Como ejemplo implementamos un pulsador que alterna el encendido y el apagado de un led. Si en 10 segundos no hay pulsaciones, se apaga el led y se finaliza el programa.
En el pulsador hemos puesto una resistencia de pull-down (Rpd) para evitar que la entrada de alta impedancia haga de antena y cree falsas pulsaciones.
Realmente las GPIO ya incluyen pull-ups y pull-downs programables. De la GPIO 9 a la 27 tiene por defecto un pull-down sinó nuestro código no funcionaría sin especificar en el código que la resistencia interior tiene que funcionar como pull-down.
También hemos puesto en serie una resistencia de protección (Rp) para limitar la corriente en caso de que por error esta entrada sea programada como salida.
En el caso de led hemos puesto una resistencia en serie para limitar el paso de corriente.
Podemos coger 16 mA como el máximo de corriente que puede dar una GPIO y 78 mA entre todas las GPIOs.
El comando de línea gpioinfo nos puede ser útil para saber a que línea corresponde cada GPIO y el estado en que está.
Sólo mencionar que no se han tenido en cuenta los posibles rebotes (bounces) del pulsador que se tendrían que filtrar a nivel software.
#include <gpiod.h>
#include <stdio.h>
int main(int argc, char **argv)
{
const char *chipname = "gpiochip0";
struct gpiod_chip *chip;
struct gpiod_line *led;
struct gpiod_line *button;
struct timespec ts = { 10, 0 };
int ret;
bool bOn = true;
// Open GPIO chip
chip = gpiod_chip_open_by_name(chipname);
// Open GPIO lines
led = gpiod_chip_get_line(chip, 21);
button = gpiod_chip_get_line(chip, 26);
// output
gpiod_line_request_output(led, "test", GPIOD_LINE_ACTIVE_STATE_HIGH);
// input
gpiod_line_request_rising_edge_events(button, "test");
for(;;)
{
// turn on / off the led
gpiod_line_set_value(led, bOn);
// wait for 10 seconds for the button to change
ret = gpiod_line_event_wait(button, &ts);
if (ret == 1)
{
struct gpiod_line_event event;
// gets event
gpiod_line_event_read(button, &event);
// changes led state
bOn = !bOn;
}
else
{
// when timeout ends
break;
}
}
// turn off led;
gpiod_line_set_value(led, 0);
// Release lines and chip
gpiod_line_release(led);
gpiod_line_release(button);
gpiod_chip_close(chip);
//
return 0;
}
Desde Java
Java usa la librería Pi4J. Como la versión 2, incompatible con la 1, es aun experimental no vamos a poner ningún ejemplo
Además la versión 2 se apoya en la librería pigpio en lugar de la libgpiod que es la recomendada en las plataformas para empotrados basadas en Linux.
Para finalizar
Me parece una máquina tan potente y amigable que me sabe mal dejarla en un rincón para que haga de interfaz entre la Cloud y los dispositivos que puedan ir apareciendo por mi casa.
He elegido la RPi 4B sobretodo por la capacidad y facilidad que me da en el procesado de imágenes. Hay alternativas como Asus Tinker Board 2 y NVIDIA Jetson pero a un precio bastante superior.
Más información
- www.raspberrypi.org: imágenes del SO.
- www.raspberrypi.org: Documentación.
- datasheets.raspberrypi.org: Datasheets.
- www.raspberryconnect.com: Raspberry Pi OS Software Packages.
- Repositorio raspberrypi: SO, código, documentación.
- Repositorio RPi-Distro: Aplicaciones.
- Repositorio libgpiod: Librería C que hace de interfaz con las GPIO.
- Pi4J: Librería Java que hace de interfaz con las GPIO.
El código
Puedes encontrar el código de este post en el repositorio de github: Consolidando.
Comentarios
Publicar un comentario