Raspberry Pi® a fondo para desarrolladores
Por Derek Molloy
5/5
()
Información de este libro electrónico
Raspberry Pi a fondo para desarrolladores cubre los conceptos básicos y avanzados de la plataforma de hardware, accesorios recomendados, software, sistemas Linux integrados y técnicas de programación en Linux. También profundiza en la interfaz, el control y de comunicaciones, con información detallada sobre Raspberry Pi GPIOs, buses, dispositivos UART y periféricos USB.
Aprenderá a configurar un entorno de compilación cruzada para construir aplicaciones de software a gran escala, así como la forma de combinar hardware y software para permitir que el Raspberry Pi interactúe eficazmente con su entorno físico. Por último, descubrirá cómo utilizar el Raspberry Pi para aplicaciones avanzadas de interfaz e interacción como Internet de las Cosas (IoT, por sus siglas en inglés); comunicación y control inalámbricos; interfaces de usuario; imágenes, vídeos y audios; llegando hasta la programación del kernel de Linux.
En lugar de instrucciones para algunos proyectos específicos, Raspberry Pi a fondo para desarrolladores le ofrece las habilidades necesarias para construir los proyectos que existen en su imaginación. Aprenderá a:
- Desarrollar habilidades esenciales de Linux y de programación
- Construir aplicaciones de Internet de las Cosas (IoT)
- Dominar la interfaz, control y comunicación
- Diseñar aplicaciones que interactúen con el entorno físico
- Utilizar la plataforma Arduino como un procesador de servicios
- Construir aplicaciones de comunicación inalámbrica
- Escribir e instalar módulos del kernel de Linux personalizados
- Usar Raspberry Pi 3 y Raspberry Pi Zero en sus proyectos
Relacionado con Raspberry Pi® a fondo para desarrolladores
Libros electrónicos relacionados
Aprender Raspberry Pi 4 con 100 ejercicios prácticos Calificación: 5 de 5 estrellas5/5Raspberry Pi Fundamentos y Aplicaciones: HARDWARE (O SOPORTE FÍSICO DEL ORDENADOR) Calificación: 5 de 5 estrellas5/5Proyectos com ESP32 y LoRa Calificación: 5 de 5 estrellas5/5Taller de Arduino. Experimentando con Arduino MKR 1010 Calificación: 0 de 5 estrellas0 calificacionesArduino. Edición 2018 Curso práctico Calificación: 4 de 5 estrellas4/5Construya su propio supercomputador con Raspberry Pi Calificación: 5 de 5 estrellas5/5Guía práctica para Raspberry Pi y Beaglebone Calificación: 0 de 5 estrellas0 calificacionesArduino para Principiantes Calificación: 4 de 5 estrellas4/5LabVIEW: Entorno gráfico de programación Calificación: 4 de 5 estrellas4/5Aprende electrónica con Arduino: Una guía ilustrada para principiantes sobre la informática física Calificación: 0 de 5 estrellas0 calificacionesROBÓTICA APLICADA - Con LabVIEW y LEGO Calificación: 5 de 5 estrellas5/5Arduino para principiantes Calificación: 3 de 5 estrellas3/5Comunicaciones - una introducción a las redes digitales de transmisión de datos y señales isócronas Calificación: 0 de 5 estrellas0 calificacionesAprendizaje automático y profundo en python: Una mirada hacia la inteligencia artificial Calificación: 0 de 5 estrellas0 calificacionesPERCEPCIÓN VISUAL - Aplicada a la robótica Calificación: 0 de 5 estrellas0 calificacionesElectrónica Digital- 1 Calificación: 4 de 5 estrellas4/5La Nube Y Ciber Seguridad: Guía Rápida Calificación: 0 de 5 estrellas0 calificacionesRaspberry Pi 4 Manual Completo Calificación: 5 de 5 estrellas5/5Processing: Desarrollo de interfaces de usuario, aplicaciones de visión artificial e IoT para Arduino y ESP8266 Calificación: 5 de 5 estrellas5/5Desarrollo de aplicaciones IoT en la nube para Arduino y ESP8266 Calificación: 5 de 5 estrellas5/5Internet de las cosas con ESP8266 Calificación: 3 de 5 estrellas3/5Robótica y domótica básica con Arduino: Contiene 28 prácticas explicadas Calificación: 0 de 5 estrellas0 calificacionesAprender Arduino, prototipado y programación avanzada con 100 ejercicios Calificación: 5 de 5 estrellas5/5Arduino. Guía práctica de fundamentos y simulación: Robótica Calificación: 5 de 5 estrellas5/5Robótica y domótica básica con Arduino: Ingeniería de control automático Calificación: 4 de 5 estrellas4/5Electrónica para makers: Guía completa Calificación: 5 de 5 estrellas5/5Ejercicios prácticos con Electrónica: Proyectos de electrónica con Arduino y Raspberry Pi Calificación: 5 de 5 estrellas5/5Google Assistant. Desarrollo de aplicaciones IoT para Arduino y ESP8266 Calificación: 0 de 5 estrellas0 calificacionesArduino. Trucos y secretos.: 120 ideas para resolver cualquier problema Calificación: 5 de 5 estrellas5/5ARDUINO: Aplicado en Robótica, Mecatrónica e Ingenierías Calificación: 0 de 5 estrellas0 calificaciones
Programación para usted
Python a fondo Calificación: 5 de 5 estrellas5/5GuíaBurros Microsoft Excel: Todo lo que necesitas saber sobre esta potente hoja de cálculo Calificación: 4 de 5 estrellas4/5Python para principiantes Calificación: 5 de 5 estrellas5/5Aprender a programar con Excel VBA con 100 ejercicios práctico Calificación: 5 de 5 estrellas5/5Aprende programación Python: python, #1 Calificación: 0 de 5 estrellas0 calificacionesPython Paso a paso: PROGRAMACIÓN INFORMÁTICA/DESARROLLO DE SOFTWARE Calificación: 4 de 5 estrellas4/5JavaScript: Guía completa Calificación: 4 de 5 estrellas4/5Excel de la A a la Z: El Manual Práctico Paso a Paso de Microsoft Excel para Aprender Funciones Básicas y Avanzadas, Fórmulas y Gráficos con Ejemplos Fáciles y Claros Calificación: 0 de 5 estrellas0 calificacionesHTML para novatos Calificación: 5 de 5 estrellas5/5Programación (GRADO SUPERIOR): PROGRAMACIÓN INFORMÁTICA/DESARROLLO DE SOFTWARE Calificación: 4 de 5 estrellas4/5VBA Excel Guía Esencial Calificación: 5 de 5 estrellas5/5Linux Essentials: una guía para principiantes del sistema operativo Linux Calificación: 5 de 5 estrellas5/5Fundamentos De Programación Calificación: 5 de 5 estrellas5/5Curso básico de Python: La guía para principiantes para una introducción en la programación con Python Calificación: 0 de 5 estrellas0 calificacionesTablas dinámicas y Gráficas para Excel: Una guía visual paso a paso Calificación: 0 de 5 estrellas0 calificacionesEl gran libro de Python Calificación: 5 de 5 estrellas5/5Aprender PHP, MySQL y JavaScript Calificación: 5 de 5 estrellas5/5Aprender a programar Android: con 100 ejercicios prácticos Calificación: 4 de 5 estrellas4/5Aprendizaje automático y profundo en python: Una mirada hacia la inteligencia artificial Calificación: 0 de 5 estrellas0 calificacionesProgramación orientada a objetos con C++, 5ª edición. Calificación: 5 de 5 estrellas5/5Aprende a Programar a Python Calificación: 0 de 5 estrellas0 calificacionesTablas dinámicas para todos. Desde simples tablas hasta Power-Pivot: Guía útil para crear tablas dinámicas en Excel Calificación: 0 de 5 estrellas0 calificacionesCurso de Programación y Análisis de Software Calificación: 4 de 5 estrellas4/5Arduino. Trucos y secretos.: 120 ideas para resolver cualquier problema Calificación: 5 de 5 estrellas5/5Controles PLC con Texto Estructurado (ST): IEC 61131-3 y la mejor práctica de programación ST Calificación: 3 de 5 estrellas3/5Todo el mundo miente: Lo que internet y el big data pueden decirnos sobre nosotros mismos Calificación: 4 de 5 estrellas4/5Aprende a Programar en C++ Calificación: 5 de 5 estrellas5/5Aprender React con 100 ejercicios prácticos Calificación: 0 de 5 estrellas0 calificaciones115 Ejercicios resueltos de programación C++ Calificación: 3 de 5 estrellas3/5
Comentarios para Raspberry Pi® a fondo para desarrolladores
1 clasificación1 comentario
- Calificación: 5 de 5 estrellas5/5El contenido tan bueno, intructivo y profundo que tiene que nos ayuda a mejorar el manejo del raspberry pi
Vista previa del libro
Raspberry Pi® a fondo para desarrolladores - Derek Molloy
Raspberry Pi® a fondo
para desarrolladores
Raspberry Pi® a fondo
para desarrolladores
Derek Molloy
Dedicado a Sally, Daragh, Eoghan, Aidan y Sarah.
(¡Por orden de edad, que no de predilección!)
Acerca del autor
El Dr. Derek Molloy es profesor titular en la Escuela de Ingeniería electrónica, Facultad de ingeniería y computación, de la Dublin City University, en Irlanda. Da clases de programación orientada a objetos en sistemas empotrados, de electrónica digital y analógica y de IoT (Internet of Things, Internet de las cosas, por sus siglas en inglés) a estudiantes de grado y posgrado. Ha realizado sus contribuciones como investigador sobre todo en campos tales como visión por ordenador, gráficos en 3D y visualización, así como en tecnologías de e-Learning o aprendizaje por ordenador.
Derek produce una popular serie de vídeos en YouTube que ha servido a millones de personas para dar sus primeros pasos en los ámbitos de Linux en sistemas empotrados y de la electrónica digital. En 2013 lanzó un blog o web personal, que recibe miles de visitas diariamente, en la que integra sus vídeos de YouTube con otros materiales de apoyo, código fuente y foros de debate para los usuarios. En 2015 escribió un libro sobre la plataforma BeagleBone, Exploring BeagleBone: Tools and Techniques for Building with Embedded Linux, que fue muy bien recibido.
Derek ha recibido varios premios por su labor educativa. Fue merecedor del premio nacional a la innovación educativa 2012 Irish Learning Technology Association (ILTA) national award for Innovation in Teching and Learning
. El galardón reconoce su enfoque de aprendizaje por la práctica en la educación de estudiantes de grado de ingeniería, que combina kits de electrónica y contenidos audiovisuales en línea. En 2012, como resultado de la ferviente nominación de sus estudiantes y colegas, recibió también el premio Dublin City University President's Award for Excellence in Teaching and Learning
que reconoce nuevamente su excelencia en el ámbito de la educación.
El lector puede consultar más datos sobre Dereck, su trabajo y el resto de sus publicaciones en su página web personal: www.derekmolloy.ie.
Acerca del editor técnico
El Dr. Tom Betka llegó al mundo del desarrollo para sistemas empotrados desde su anterior trabajo en la industria aeronáutica. Así mismo, practicó la medicina durante más de diez años. Durante este tiempo, su amor por los ordenadores y el desarrollo de software lo llevó hasta los sistemas empotrados, y su formación en informática, hasta obtener una segunda titulación. Después de abandonar la práctica clínca, el Dr. Betka comenzó a trabajar en el mundo de la programación y como experto en materias de medicina y sistemas empotrados en diferentes compañías de software. Entre sus trabajos más recientes se incluyen proyectos en el Kennedy Space Center de la NASA y la Sierra Nevada Corporation. El primer amor de Tom fueron los lenguajes de programación de la familia del lenguaje C, que empleó para programar microcontroladores de 8 bits. Como usuario de Linux durante más de una década, también ha trabajado unos años con dispositivos BeableBone, BeagleBone Black y Raspberry Pi. Entre sus aficiones se cuentan las matemáticas avanzadas, la aviación, el modelismo de cohetería de gran potencia y la robótica. Es fácil encontrarlo en su taller casero trabajando en proyectos construcción de prototipos de dispositivos. Además, en otra vida por así decir, Tom fue batería profesional y uno de los primeros en adoptar dispositivos con tecnología de percusión digital en sus actuaciones de músca en vivo.
Agradecimientos
Debo dar las gracias a todo el equipo de Wiley Publising una vez más por su trabajo sobresaliente en este proyecto. A Jim Minatel por su empeño en que llevase adelante este concepto de libro y por su apoyo renovado para la realización de un libro que se centrase en el aprendizaje en profundidad. A Aaron Black y Jody Lefevere, por hacer avanzar el proyecto y por su apoyo y ayuda durante todo su desarrollo. A Jennifer Lynn, por hacerme respetar los plazos y por estar siempre disponible para responder a mis preguntas. A Adaobi Obi Tulton, el editor del proyecto, por llevarlo hasta su finalización de la manera más eficiente posible: ha sido un verdadero placer volver a trabajar con un editor de su categoría. A Keith Cline y Marylouise Wiak, los correctores, por hacer este libro legible en inglés americano. A Barath Kumar Rajasekaran, el editor de producción, y Nancy Bell, la revisora, por dar coherencia al conjunto y crear un producto final bien terminado.
Expreso mi más sincero agracedimiento a Tom Betka, el editor técnico, por la increíble cantidad de tiempo y esfuerzo personal que ha invertido para asegurar que el contenido de este libro se pueda utilizar sin problemas por los lectores. Tras la publicación de mi libro sobre BeagleBone, Tom proporcionó motu proprio comentarios muy valiosos en la página web del libro, que sirvieron para afianzar el título.
Así, pensé de inmediato en Tom cuando acepté este proyecto y estuve encantado de que aceptase el papel de editor técnico. Tom es un académico, un erudito e indiscutiblemente toda una inspiración; además siempre ha estado disponible para analizar conmigo cualquier asunto técnico. Este libro se ha beneficiado enormemente de sus conocimientos técnicos, de su experiencia vital y de sus enormes capacidades. Estoy convencido de que no podría haber encontrado mejor editor técnico para el tema tratado.
Debo también agradecer a las miles de personas que se toman la molesta de comentar mis vídeos en YouTube, las entradas de mi blog y los artículos que publico en mi página web. y consejos recibidos, que de verdad me han ayudado en el desarrollo de los temas tratados en mis libros.
La Escuela de ingeniería electrónica de la Dublin City University es un lugar magnífico para trabajar gracias, en gran medida, a su espíritu de grupo y a su compromiso con una educación en ingeniería rigurosa, innovadora y accesible. Agradezco nuevamente a mis colegas de la Escuela por su apoyo, sus ánimos y su tolerancia durante la redacción de este libro. En particular doy las gracias a Noel Murphy y Connor Brenan por compartir la carga de trabajo de la dirección de la Escuela conmigo mientras me encontraba completamente absorto en la escritura del libro. Gracias de nuevo a mi hermano David Molloy por sus expertos consejos de software y por su apoyo. Gracias a Jennifer Bruton por su experta y meticulosa revisión de los circuitos, el software y los contenidos utilizados en este libro. Así mismo, agradezco a Martin Collier, Pascal Landais, Michele Pringle, Robert Sadleir, Ronan Scaife y John Whelan por su continuo apoyo, consejo y asesoramiento experto.
Obviamente, mi mayor agradecimiento es para mi familia. Tardé más de seis meses en escribir este libro; principalmente por las noches y en los fines de semana. Gracias a Sally, mi mujer, y a nuestros hijos Daragah, Eoghan, Aidan y Sarah por aguantarme, una vez más, durante la redacción de este libro. Gracias a mi madre, Catriona, y a mi padre, David, por toda una vida de apoyo, ánimo e inspiración. Por último debo agradecer al resto de mi familia por tolerar, otros seis meses, con buen talante mis ausencias en eventos y fiestas familiares: ya no tengo excusa, ¡a menos que escriba otro libro!
Resumen de contenidos
Introducción
Parte I Aspectos básicos del Raspberry Pi
Capítulo 1 El hardware del Raspberry Pi
Capítulo 2 El software del Raspberry Pi
Capítulo 3 Exploración de sistemas Linux empotrados
Capítulo 4 Interfaz con los componentes electrónicos
Capítulo 5 Programación con Raspberry Pi
Parte II Interfaz, control y comunicaciones
Capítulo 6 Interfaz de entrada/salida en el Raspberry Pi
Capítulo 7 Compilación cruzada y el IDE Eclipse
Capítulo 8 Interfaz con los buses del Raspberry Pi
Capítulo 9 Mejora de las interfaces de entrada/salida en el RPi
Capítulo 10 Cómo interaccionar con el entorno físico
Capítulo 11 Interfaz en tiempo real con el Arduino
Parte III Comunicación e interacción avanzadas
Capítulo 12 IoT (Internet of Things)
Capítulo 13 Control y comunicación inalámbricas
Capítulo 14 Raspberry Pi con una interfaz de usuario enriquecida
Capítulo 15 Imágenes, vídeo y audio
Capítulo 16 Programación del núcleo
Contenidos
Introducción
Estructura del libro
Convenciones utilizadas en este libro
Material necesario
Fe de erratas
Contenido digital y código fuente
Parte I
Aspectos básicos del Raspberry Pi
Capítulo 1
El hardware del Raspberry Pi
Introducción a la plataforma
¿A quién está destinado el RPi?
Cuándo utilizar el RPi
Cuándo no utilizar el RPi
La documentación del RPi
El hardware del RPi
Las versiones del Raspberry Pi
El hardware del Raspberry Pi
Accesorios del Raspberry Pi
Accesorios importantes
Una fuente de alimentación externa de 5 V
Tarjeta micro-SD para iniciar el sistema operativo
Cable Ethernet para conectividad de red
Accesorios recomendados
Cable HDMI para conectar a monitores o televisiones
Cable serie USB a TTL UART 3,3 V para localización de problemas
Accesorios opcionales
Un hub USB para conectar múltiples dispositivos USB
Adaptadores micro-HDMI a VGA para vídeo y sonido
Adaptadores WiFi para conectividad inalámbrica
Dispositivos de almacenamiento USB
Webcam USB para captura de imágenes y streaming de vídeo
Teclado y ratón USB para computación de propósito general
Carcasas para proteger el RPi
Placas de extensión HAT
Cómo destruir su RPi
Resumen
Soporte
Capítulo 2
El software del Raspberry Pi
Linux en el Raspberry Pi
Distribuciones de Linux para el RPi
Cómo crear una imagen Linux en una tarjeta SD para el RPi
Cómo conectarse a una red
Cable Ethernet estándar
Cable Ethernet cruzado
Cómo comunicarse con el RPi
Conexión serie con el cable USB a TTL de 3,3 V
Conexión segura con SSH (Secure Shell)
Conexiones SSH (Secure Shell) mediante PuTTY
Chrome Apps: cliente Secure Shell
Como transferir archivos mediante PuTTY/psftp sobre SSH
Control del Raspberry Pi
Comandos básicos de Linux
Primeros pasos
Comandos básicos del sistema de archivos
Variables de entorno
Edición básica de archivos
¿Qué hora es?
Gestión de paquetes
Configuración del Raspberry Pi
La herramienta de configuración del Raspberry Pi
Actualización del software del RPi
Salida de vídeo
Interacción con los LED de la placa
Apagado y reinicio
Resumen
Capítulo 3
Exploración de sistemas Linux empotrados
Introducción a Linux para sistemas empotrados
Ventajas y desventajas de Linux para sistemas empotrados
¿Es Linux gratuito y de código abierto?
Cómo iniciar el Raspberry Pi
Los gestores de arranque del Raspberry Pi
Espacio del núcleo y espacio de usuario
El gestor de sistema y servicios systemd
Gestión de sistemas Linux
El superusuario
Administración del sistema
El sistema de archivos de Linux
Enlaces a archivos y directorios
Usuarios y grupos
Permisos del sistema de archivos
El directorio raíz (root) de Linux
Comandos para sistemas de archivos
La fiabilidad de los sistemas de archivos en las tarjetas SD
Comandos de Linux
Redirección de entrada y salida (>, >> y <)
Tuberías (| y tee)
Comandos de filtro (de sort a xargs)
Los comandos echo y cat
diff
tar
md5sum
Procesos de Linux
Cómo controlar los procesos en Linux
Procesos en primer y en segundo plano
Otros temas de Linux
Cómo utilizar Git para el control de versiones
Una introducción práctica
Cómo clonar un repositorio (git clone)
Cómo obtener información de estado (git status)
Cómo añadir archivos al área de preparación (git add)
Cómo hacer commit en el repositorio local (git commit)
Envío al repositorio remoto (git push)
Ramas de desarrollo de Git
Cómo crear una rama de desarrollo (git branch)
Cómo fusionar ramas de desarrollo (git merge)
Cómo borrar una rama de desarrollo (git branch -d)
Comandos habituales de Git
Cómo utilizar escritorios virtuales
El código fuente de este libro
Resumen
Otras lecturas
Bibliografía
Capítulo 4
Interfaz con los componentes electrónicos
Cómo analizar nuestros circuitos
Multímetro digital
Osciloscopios
Principios básicos de los circuitos
Voltaje, intensidad de la corriente, resistencia y la ley de Ohm
División de voltaje
División de corriente
Cómo implementar circuitos del RPi en una placa de pruebas
Multímetros digitales (DMM) y placas de pruebas
Circuito de ejemplo: regulación de voltaje
Componentes discretos
Diodos
Diodos emisores de luz (LED)
Condensadores de filtro o aplanamiento y de desconexión
Transistores
Utilización de transistores como conmutadores
Utilización de transistores de efecto campo (FET) como conmutadores
Optoacopladores/optoaisladores
Interruptores y botones
Histéresis
Puertas lógicas
Entradas flotantes
Resistencias pull-up y pull-down
Salidas de colector abierto y de drenador abierto
Interconexión de puertas lógicas
Conversión analógico-digital
Frecuencia de muestreo
Discretización
Amplificadores operacionales
Amplificadores operacionales ideales
Retroalimentación negativa y seguidor de tensiones
Retroalimentación positiva
Consejos finales
Resumen
Otras lecturas
Capítulo 5
Programación con Raspberry Pi
Introducción
Rendimiento de los lenguajes en el RPi
Establecer la frecuencia de trabajo en la CPU del RPi
Un primer circuito para la computación física
Lenguajes de script
Opciones de lenguajes de script
Bash
Lua
Perl
Python
Lenguajes compilados dinámicamente
Javascript y Node.js en el RPi
Java en el RPi
C y C++ en el RPi
Introducción a C y C++
Compilando y enlazando
Cómo escribir el programa C/C++ más corto del mundo
Compilación estática y dinámica
Variables y operadores en C/C++
Punteros en C/C++
Cadenas de caracteres (strings) de estilo C
Control de LED en C
La C
de C++
Primer ejemplo y gestión de cadenas en C++
Paso por valor, por puntero y por referencia
Control del LED con C++ (sin emplear objetos)
Introducción a la programación orientada a objetos
Clases y objetos
Encapsulación
Herencia
Control de LED orientado a objetos con C++
Interfaz con el sistema operativo Linux
Glibc y syscall
Cómo mejorar el rendimiento de Python
Cython
Cómo ampliar Python con C/C++
La API Python/C
Boost.Python
Resumen
Otras lecturas
Bibliografía
Parte II
Interfaz, control y comunicaciones
Capítulo 6
Interfaz de entrada/salida en el Raspberry Pi
Introducción
Entrada/salida de propósito general
Salida digital GPIO
Entrada digital GPIO
Resistencias pull-up y pull-down internas
Interfaz con circuitos DC con alimentación
Uso de C++ para el control de la salida GPIO con sysfs
Más sobre programación con C++
Funciones de retrollamada
Hilos de ejecución POSIX
Linux poll (sys/poll.h)
Una clase GPIO mejorada
Uso de la memoria para el control de la salida GPIO
Control de GPIO mediante devmem2
Control de GPIO mediante C y /dev/mem
Cambiar la configuración de las resistencias internas
WiringPi
Cómo instalar wiringPi
El comando gpio
Programación con wiringPi
Cambiar el estado de un LED mediante wiringPi
Pulsación de un botón: respuesta LED
Comunicación con sensores One-Wire
PWM y los relojes de propósito general
Pulse-Width Modulation (PWM)
Aplicación PWM: oscurecimiento de un LED
Aplicación PWM: control de un servomotor
Señales de reloj de propósito general
Las salidas GPIO y los permisos
Cómo escribir reglas udev
Los permisos y wiringPi
Resumen
Capítulo 7
Compilación cruzada y el IDE Eclipse
Cómo configurar una toolchain para compilación cruzada
La cadena de herramientas Linaro Toolchain para Raspbian
Comprobación de la toolchain
Cómo actualizar la variable de entorno PATH
Cadenas de herramientas de compilación cruzada para Debian
Emulación de la arquitectura armhf
Compilación cruzada con librerías de terceras partes (multiarch)
Compilación cruzada a través de Eclipse
Cómo instalar Eclipse en Linux
Configuración de Eclipse para compilación cruzada
El explorador de sistemas remotos
Cómo integrar GitHub en Eclipse
Depuración en remoto
Documentación automática en Doxygen
Cómo añadir soporte Doxygen a Eclipse
Compilación de Linux
Cómo descargar el código fuente del núcleo
Compilación del núcleo de Linux
Cómo instalar el núcleo de Linux
Cómo crear una distribución de Linux (avanzado)
Resumen
Otras lecturas
Capítulo 8
Interfaz con los buses del Raspberry Pi
Introducción a las comunicaciones por bus
I²C
Hardware I²C
El bus I²C en el RPi
Cómo habilitar el bus I²C en el RPi
Cómo habilitar un segundo bus I²C
Un circuito de prueba I²C
Un reloj de tiempo real
El acelerómetro ADXL345
Cableado del circuito de pruebas
Utilización de las herramientas I2C-tools de Linux
i2cdetect
i2cdump
i2cget
i2cset
Comunicaciones en C por el bus I²C
Encapsulación de dispositivos I²C en clases C++
SPI
Hardware SPI
SPI en el RPi
Pruebas en el bus SPI
Una primera aplicación SPI (74HC595)
Cableado del circuito de pruebas 74HC595
Comunicaciones SPI utilizando lenguaje C
Comunicación bidireccional SPI en C/C++
La interfaz ADXL345 SPI
Conexión del ADXL345 al RPi
Encapsulación de dispositivos SPI en clases C++
Comunicación SPI de tres hilos
Múltiples dispositivos esclavos SPI en el RPi
UART
El UART del RPi
Ejemplos de UART en C
Cliente serie RPi
Servidor serie LED RPi
Aplicaciones UART: GPS
Traducción de nivel lógico
Resumen
Otras lecturas
Capítulo 9
Mejora de las interfaces de entrada/salida en el RPi
Introducción
Conversión analógico-digital
Conversores analógico-digitales (ADC) SPI
El ADC SPI MCP3208
Cómo cablear el MCP3208 al RPi
Cómo comunicarse con el MCP3208
Una aplicación ADC: fotómetro analógico
Cómo comprobar el rendimiento del ADC SPI
La librería C para el BCM2835 (avanzado)
Conversión digital-analógica
Un conversor digital-analógico de bus I²C
Un conversor digital-analógico SPI
Cómo añadir salidas PWM al RPi
Cómo ampliar las salidas GPIO del RPi
El MCP23017 y el bus I²C
Cómo controlar el circuito LED GPIO
Cómo leer el estado del pulsador GPIO
Un ejemplo de configuración de interrupciones (avanzado)
El MCP23S17 y el bus SPI
Una clase C++ para dispositivos MCP23x17
Cómo añadir UART al RPi
Resumen
Capítulo 10
Cómo interaccionar con el entorno físico
Interfaces con los actuadores
Motores de corriente continua (DC)
Propulsión de motores DC pequeños (hasta 1,5 A)
Propulsión de motores DC mayores (más de 1,5 A)
Motores paso a paso
El controlador de motor paso a paso EasyDriver
Un circuito de control para un motor paso a paso en el RPi
Cómo controlar un motor paso a paso usando C++
Relés
Interfaz con sensores analógicos
Sensores analógicos lineales
Sensores analógicos no lineales
Acondicionamiento de la señal en un sensor analógico
Escalado de la señal mediante división de voltaje
Escalado y voltaje de desequilibrio o desplazamiento (offset) de la señal
Interfaz con un acelerómetro analógico
Interfaz con pantallas locales
Módulos de pantalla MAX7219
Módulos LCD de caracteres
Pantallas OLED
Compilación de librerías C/C++
Makefiles
CMake
Un ejemplo Hello World
Compilación de librerías C/C++
Usando una librería compartida (.so) o estática (.a)
Resumen
Capítulo 11
Interfaz en tiempo real con el Arduino
El Arduino
Un dispositivo esclavo serie Arduino
Ejemplo: una prueba de eco UART
Eco de la información de minicom (con parpadeo de LED)
Ejemplos de eco UART en C
Control de comandos UART en un Arduino
Un dispositivo esclavo Arduino I²C
Un circuito de prueba I²C
Ejemplo de eco de registro I²C
Ejemplo de sensor de temperatura I²C
Sensor de temperatura I²C con LED de advertencia
Comunicación en modo esclavo del Arduino usando C/C++
Ejemplo de sensor ultrasónico I²C
Un dispositivo esclavo SPI Arduino
Programación del Arduino en línea de comandos del RPi
Resumen
Parte III
Comunicación e interacción avanzadas
Capítulo 12
IoT (Internet of Things)
IoT (Internet of Things)
El RPi como sensor IoT
El RPi como sensor de servidor web
Nginx
Cómo configurar el servidor web Nginx
Cómo crear scripts y páginas web
PHP en el RPi
Aplicaciones GNU Cgicc (avanzado)
Un cliente web C/C++
Introducción a las comunicaciones en red
Un cliente web C/C++
Comunicaciones seguras mediante OpenSSL
El RPi como Thing
ThingSpeak
El programador de tareas Cron de Linux
El sistema crontab
User crontab
Cómo enviar correo electrónico desde el RPi
Si esto, entonces aquello
(If This Then That, IFTTT)
Frameworks IoT a gran escala
MQ Telemetry Transport (MQTT)
IBM Bluemix Internet of Things
Ejemplo de publicación con IBM IoT MQTT usando Node.js
Ejemplo de publicación con IBM IoT MQTT usando C++
Visualización de datos con IBM Quickstart
Cliente/servidor con C++
Gestión de dispositivos IoT
Monitorización remota del RPi
Temporizadores RPi Watchdog
Direcciones IP estáticas
Alimentación por Ethernet (PoE, Power over Ethernet)
Módulos de extración PoE (PEM) (avanzado)
Resumen
Capítulo 13
Control y comunicación inalámbricas
Introducción a las comunicaciones inalámbricas
Comunicaciones Bluetooth
Cómo instalar un adaptador Bluetooth
Comprobación del módulo LKM
Cómo configurar un adaptador Bluetooth
Cómo hacer que el RPi sea descubrible
Desarrollo de aplicaciones Android con Bluetooth
Comunicaciones por WiFi
Cómo instalar un adaptador WiFi
El procesador esclavo WiFi NodeMCU
El firmware más reciente
Cómo conectar NodeMCU a WiFi
Cómo programar el NodeMCU
La interfaz del servidor web NodeMCU
JSON
Comunicación con mensajes JSON
El NodeMCU y el protocolo MQTT
Comunicaciones ZigBee
Introducción a los dispositivos XBee
Modo AT frente a modo API
Configuración XBee
XCTU
Cómo configurar una red XBee usando XCTU
Un ejemplo de XBee en modo AT
Configuración del dispositivo Arduino XBee (XBeeA)
Configuración del dispositivo RPi XBee (XBeePi)
Un ejemplo de XBee en modo API
Configuración del dispositivo RPi XBee (XBee1)
Configuración del dispositivo independiente XBee (XBee2)
El modo XBee API y Node.js
XBee y C/C++
Comunicación de campo cercano (NFC)
Resumen
Capítulo 14
Raspberry Pi con una interfaz de usuario enriquecida
Arquitecturas de interfaz de usuario enriquecida para RPi
El RPi como ordenador de propósito general
Cómo conectar un periférico de entrada Bluetooth
El RPi con una pantalla táctil LCD
Computación virtual en red (VNC)
VNC con el visor VNC Viewer
VNC con Xming y PuTTY
VNC en un PC con Linux
Aplicaciones fat-client o de cliente pesado
Desarrollo de interfaces gráficas de usuario enriquecidas
Introducción a GTK+ en el RPi
Una aplicación Hello World
GTK+
Modelo de programación orientado a eventos
Aplicación de humedad y temperatura con GTK+
Introducción a Qt en el RPi
Cómo instalar las herramientas de desarrollo Qt en el RPi
La aplicación Hello World
Qt
Introducción a Qt
Elementos de Qt
La clase QObject
Señales y slots
Herramientas de desarrollo para Qt
Primer ejemplo con Qt Creator
Una aplicación Qt con UI para un sensor meteorológico
Desarrollo de interfaces gráficas remotas
Aplicación GUI Qt para cliente pesado
Aplicaciones servidor con procesamiento multihilo
El servidor meteorológico multihilo
Análisis y representación de la corriente de datos
Resumen
Otras lecturas
Capítulo 15
Imágenes, vídeo y audio
Captura de imágenes y vídeo
La cámara del RPi
Cómo capturar imágenes fijas
Cómo grabar vídeo
Cómo usar la cámara del RPi en el espacio de usuario de Linux
Webcams USB
Video4Linux2 (V4L2)
Utilidad de captura de imágenes
Utilidades Video4Linux2
Desarrollo de programas Video4Linux2
Vídeo en streaming
Procesamiento de imágenes y visión por ordenador
Procesamiento de imágenes con OpenCV
Visión artificial con OpenCV
Boost
Audio en el Raspberry Pi
Principales herramientas software de audio
Dispositivos de audio para el RPi
Dispositivos de reproducción de audio USB y HDMI
Cómo reproducir emisoras de radio por Internet
Grabación de audio
Streaming de audio por la red
Audio Bluetooth A2DP
Lectura automatizada (Text-to-Speech)
Resumen
Otras lecturas
Capítulo 16
Programación del núcleo
Introducción
¿Por qué escribir módulos para el núcleo?
Introducción a los módulos cargables del núcleo (LKM)
Primer ejemplo de un LKM
El LKM Makefile
Cómo compilar un LKM en un ordenador con Linux
Cómo compilar un LKM en el RPi
Nuestro primer ejemplo de LKM a prueba
Comprobación del parámetro LKM
Ejemplo de un LKM empotrado
Rutinas de servicio de interrupción (ISR)
Rendimiento
Controlador GPIO LKM de botón mejorado
La interfaz kobject
Controlador GPIO LKM de LED mejorado
Hilos de ejecución del núcleo
Conclusiones
Resumen
Introducción
La idea básica del proyecto Raspberry Pi (RPi) es la de desarrollar una plataforma de computación pequeña y asequible que sirviera para estimular el interés de los niños por aprender los aspectos fundamentales de las tecnologías de la información y las comunicaciones. La rápida evolución de los dispositivos SoC (System-on a -Chip) de bajo coste para aplicaciones móviles posibilitó una amplísima distribución de la plataforma asequible RPi a principios de 2012. Su impacto fue inmediato: en febrero de 2015 ya se habían vendido más de cinco millones de placas Raspberry Pi. La proliferación de smartphones nos ha permitido dar por sentado que podemos tener ordenadores capaces de llevar a cabo miles de millones de operaciones por segundo en la palma de la mano. No obstante, el hecho de que podamos modificar el hardware y el software de unos dispositivos tan pequeños como potentes y adaptarlos a nuestras necesidades, así como desarrollar nuestras propias creaciones, no deja de resultar asombroso. Mejor aún: ahora es posible adquirir un Raspberry Pi Zero por menos de cinco euros, casi lo mismo que un desayuno.
Las placas Raspberry Pi propiamente dichas resultan demasiado complejas para que las utilice el público general. Es, sin embargo, su capacidad de ejecutar una versión empotrada (embedded) de Linux lo que las convierte en plataformas accesibles, adaptables y potentes. En conjunto, Linux y los sistemas empotrados hacen posible un desarrollo sencillo para este tipo de dispositivos, destinados realizar funciones en edificios inteligentes, dispositivos IoT (Internet of Things, literalmente Internet de las cosas
), robótica, energía inteligente, ciudades inteligentes, interacción hombre-ordenador (HCI o Human-Computer Interaction por sus siglas en inglés), sistemas ciberfísicos, impresión en 3D, sistemas avanzados para vehículos y muchas más aplicaciones.
La integración del software Linux de alto nivel con unos componentes electrónicos de bajo nivel representa un cambio de paradigma en el ámbito del desarrollo para sistemas empotrados. Poder construir un circuito con componentes electrónicos de bajo nivel e instalar un servidor web Linux, que permitirá su control desde Internet, con solo unos pocos comandos solo se puede definir como revolucionario. Es fácil utilizar el Raspberry Pi como ordenador Linux de propósito general, pero es muchísimo más interesante, y todo un desafío, remangarse y manipular directamente los componentes electrónicos en los circuitos de nuestro propio diseño. ¡Para eso está este libro!
Este libro debería resultar muy atractivo para inventores, manitas, estudiantes, emprendedores, hackers, artistas y soñadores, es decir, para todo el mundo que desee llevar la potencia de Linux empotrado a sus productos, invenciones, creaciones o proyectos y comprender verdaderamente la plataforma RPi con todo detalle. No es este, sin embargo, un libro de recetas. Con escasas excepciones todo lo mostrado aquí se explica a un nivel que permitirá al lector diseñar, construir y depurar sus propias ampliaciones a los conceptos presentados. Tampoco se incluye en el libro ningún gran proyecto de diseño para el que se deba comprar un conjunto predeterminado de componentes y periféricos con los que alcanzar un resultado muy concreto. Más bien, este libro trata de proporcionar al lector el conocimiento básico suficiente, así como los detalles técnicos, que le permita explorar por su cuenta y, además, lo motive a hacerlo.
Creo firmemente en el aprendizaje con la práctica, así, presento ejemplos con hardware de muy bajo coste y muy fácil de encontrar de modo que el lector pueda seguir adelante. Mediante estos ejemplos prácticos, se describe con todo detalle el significado de los pasos a seguir. De este modo, cuando el lector sustituya sus propios componentes, módulos y periféricos hardware, será capaz de adaptar el contenido de este libro a sus propias necesidades. Y respecto a ese gran proyecto de diseño
, lo dejamos a la imaginación del lector.
En 2014 escribí un libro muy bien recibido sobre la plataforma BeagleBone, titulado: Exploring BeagleBone: Tools and Techniques for Building with Embedded Linux. Como este libro se centra en Linux empotrado (embedded Linux) y pone todo el énfasis en presentar los principios fundamentales, existen ciertas similitudes entre el contenido introductorio de aquel libro y el de éste. Sin embargo, este libro se ha escrito desde el principio directamente para la plataforma RPi y en él se analizan sus puntos fuertes y se abordan varias de sus debilidades. Asimismo, he aprovechado la oportunidad de ampliar el material para tratar temas como el desarrollo para el núcleo (kernel) de Linux, el Arduino como procesador de servicios, nodos sensores WiFi, comunicación XBee, mensajería MQTT, dispositivos IoT, el concepto plataforma como servicio
(Platform as a Service, PaaS por sus siglas en inglés) y mucho más. Si tiene una copia de Exploring BeagleBone, debería visitar el sitio web del libro (www.exploringrpi.com) a fin de comparar el contenido de ambos antes de decidir cuál comprar.
Al escribir este libro me propuse cumplir los objetivos siguientes:
❏Explicar el funcionamiento de Linux en sistemas empotrados y su interacción con los circuitos electrónicos, y guiar para ello al lector por los distintos aspectos y desafíos que presenta la popular plataforma RPi.
❏Proporcionar información detallada y formación en profundidad acerca de Linux, electrónica y programación. Todo ello resulta necesario para dominar una variedad amplia y exhaustiva de temas en este ámbito.
❏Crear una colección práctica de ejemplos tipo ¡Hola, mundo!
, tanto en hardware como en software, de todos los temas tratados en el libro, por ejemplo: interfaces a bajo nivel, entrada/salida de propósito general (General Purpose Input/Output, GPIO), buses, conversores analógico-digital (Analog-to-Digital Converter, ADC) conectados a bus, así como transmisores/receptores asíncronos universales (Universal Asynchronous Receiver/Transmitter, UART). Igualmente, se analizan librerías para programación de alto nivel como OpenCV y el Framework Qt. Por último, en el libro se cubren también temas más avanzados como la manipulación de registros a bajo nivel y el desarrollo de módulos cargables del núcleo (Loadable Kernel Module, LKM) de Linux.
❏Mejorar y ampliar las capacidades de interfaz que ofrece la plataforma RPi mediante el desarrollo de frameworks para conectarla a circuitos, por ejemplo ADC basados en SPI, a procesadores de servicio, como Arduino y NodeMCU, y a plataformas y servicios IoT basados en la nube.
❏Asegurar que todos y cada uno de los circuitos y fragmentos de código fuente tengan un amplio alcance pedagógico y que estén diseñados específicamente para funcionar en el Raspberry Pi. Todos y cada uno de los circuitos y ejemplos de código fuente de este libro se compiló y probó en la plataforma RPi; la mayoría, en múltiples versiones de la placa.
❏Utilizar ejemplos ¡Hola, mundo!
para construir una librería de código que el lector pueda emplear y adaptar después a sus propios proyectos con Raspberry Pi.
❏Publicar todo el código fuente en GitHub de forma que resulte fácil de utilizar.
❏Apoyar este libro con un sólido contenido digital, como los vídeos en el canal DerekMolloyDCU de YouTube y el sitio web, www.exploringrpi.com, desarrollado específicamente para este libro.
❏Asegurar que, al finalizar el libro, el lector contará con todo lo necesario para imaginar, crear y construir proyectos avanzados para el Raspberry Pi.
Estructura del libro
No cabe duda de que algunos de los temas tratados en este libro son muy complejos. Después de todo, los Raspberry Pi son dispositivos complejos. Sin embargo, este libro contiene todo lo necesario para dominar dichos temas y lo presenta dividido en tres partes principales:
❏Parte I: Aspectos básicos de Raspberry Pi
❏Parte II: Interfaz, control y comunicaciones
❏Parte III: Comunicación e interacción avanzadas
La primera parte del libro presenta el hardware y el software de las plataformas RPi en los capítulos 1 y 2 y, luego, proporciona tres capítulos introductorios:
❏Capítulo 3, Exploración de sistemas Linux empotrados
❏Capítulo 4, Interfaz con los componentes electrónicos
❏Capítulo 5, Programación con Raspberry Pi
Los lectores expertos en Linux, electrónica o software pueden obviar estas introducciones sin mayores problemas. Sin embargo, para todo el resto, se incluye un conjunto de materiales conciso pero detallado para asegurar que adquieren todos los conocimientos necesarios para trabajar con el Raspberry Pi de manera segura y eficaz. El resto hacen a menudo referencia a estos capítulos introductorios.
La segunda parte del libro, del capítulo 6 al 11, proporciona información detallada sobre las interfaces GPIO de Raspberry Pi, los buses (I²C, SPI), dispositivos UART y periféricos USB. Aprenderemos a configurar un entorno de compilación cruzada para abordar el desarrollo de aplicaciones de software a gran escala para el Raspberry Pi. La parte II describe también cómo combinar el hardware y el software para dotar al Raspberry Pi de la capacidad de interaccionar de forma eficaz con su entorno físico. Además, el capítulo 11 Interfaz en tiempo real utilizando Arduino
, nos muestra cómo utilizar el Arduino como procesador esclavo con el Raspberry Pi. Esto sirve para superar algunas de las limitaciones de tiempo real que surgen al trabajar con Linux empotrado.
La tercera y última parte del libro, de los capítulos 12 al 16, describen cómo utilizar el Raspberry Pi para aplicaciones avanzadas de interfaz y comunicación, por ejemplo con dispositivos IoT, control y comunicaciones inalámbricas, interfaces gráficas de usuario enriquecidas, imágenes, audio y vídeo, así como la programación del núcleo de Linux. Por el camino nos encontraremos con múltiples tecnologías, como TCP/IP, ThingSpeak, IBM Bluemix, MQTT, Cgicc, alimentación por Ethernet (Power over Ethernet, PoE), WiFi, NodeMCUs, Bluetooth, NFC/RFID, ZigBee, XBee, cron, Nginx, PHP, correo electrónico, IFTTT, GPS, VNC, GTK+, Qt, XML, JSON, multihilo, programación cliente/servidor, V4L2, streaming de vídeo, OpenCV, Boost, audio USB, Bluetooth A2DP, lectura automatizada, LKM y kthreads.
Convenciones utilizadas en este libro
Este libro esta lleno de ejemplos de código fuente, así como de fragmentos completos que el lector podrá usar para construir sus propias aplicaciones. El código fuente y los comandos aparecen así en el libro:
This is what source code looks like.
Cuando se presenta el trabajo desarrollado en un terminal de Linux, suele ser necesario mostrar tanto la entrada como la salida en un solo ejemplo. La tipografía en negrita sirve para distinguir la entrada del usuario de la salida resultante. Por ejemplo:
pi@erpi ~ $ ping www.raspberrypi.org
PING lb.raspberrypi.org (93.93.128.211) 56(84) bytes of data.
64 bytes from 93.93.128.211: icmp_seq=1 ttl=53 time=23.1 ms
64 bytes from 93.93.128.211: icmp_seq=2 ttl=53 time=22.6 ms
...
El símbolo del sistema (prompt) $ indica que un usuario estándar de Linux ejecuta un comando, mientras que el símbolo del sistema # indica que quien ejecuta el comando tiene privilegios de superusuario. Una elipsis, simbolizada por (...), aparece siempre que ni el código fuente ni la salida eliminadas resulten imprescindibles para comprender una materia concreta. Editar de este modo la salida nos permite centrarnos sólo en la información más útil. Asimismo, un símbolo en forma de punta de flecha en una línea nos indica que el comando ocupa varias líneas en el libro, pero que debemos introducirlo en una sola línea. Por ejemplo:
pi@erpi /tmp $ echo "este es un comando largo que ocupa dos líneas en el →
libro pero que debe ser escrito en una sola línea de código" >> test.txt
Animamos al lector a que repita los pasos indicados en el libro por su cuenta, en todos aquellos lugares en los que aparezca la salida completa. Además, existe un repositorio en GitHub con los códigos fuente completos de todo el libro.
Asimismo, el lector encontrará otros estilos de texto en el libro. Por ejemplo:
❏Los nuevos términos y las palabras importantes se escriben entrecomilladas o destacas en su tipografía cuando aparecen por vez primera.
❏Las combinaciones de teclas se muestran así: Ctrl+C.
❏Todas las URL en el libro se refieren a direcciones HTTP o HTTPS y aparecen de este modo: www.exploringrpi.com.
❏Se utiliza, asimismo, un servicio de abreviación para crear alias de las URL más largas que aparecen en el libro. Dichos alias presentan la forma de tiny.cc/erpi102 (por ejemplo el segundo enlace en el capítulo 1). Si la dirección del enlace cambiase una vez publicado el libro, se actualizaría el alias.
Diversas características del libro indican que el contenido reviste especial importancia, o bien cuándo hay disponible información adicional:
ADVERTENCIAContiene información importante que nos permitirá evitar producir daños a la placa Raspberry Pi.
NOTAPresenta información adicional útil, como enlaces a recursos digitales y consejos útiles que pueden facilitar la comprensión de la tarea de que se trate.
Material necesario
Lo ideal sería que el lector contase con una placa Raspberry Pi antes de comenzar con el libro. De este modo podría seguir los numerosos ejemplos que se incluyen. Si todavía no la ha adquirido, le recomiendo que opte por la Raspberry Pi 3 Model B. Aunque se trata de la placa más cara (algo más de 30 euros), es también la más potente. Dicha placa contiene un procesador de 64 bits con cuatro núcleos, un adaptador de red, un adaptador inalámbrico Ethernet y Bluetooth. Es decir, cuenta con todas las características necesarias para ejecutar cualquier ejemplo contenido en este libro. Raspberry Pi en tiendas en línea como Adafruit Industries, Digi-Key, SparkFun y Jameco Electronics si vive en los Estados Unidos. También están disponibles internacionalmente desde tiendas como Farnell, Radionics o Watterott.
En el capítulo 1 se ofrece una lista completa de todos los accesorios recomendados y opcionales para el Raspberry Pi. Si aún no tiene un Raspberry Pi, debería leer ese capítulo antes de comprarlo. Asimismo, la primera página de cada capítulo contiene una lista de los componentes electrónicos con los módulos requeridos para seguirlo. El sitio web del libro (www.exploringrpi.com) proporciona detalles sobre cómo adquirir dichos componentes.
Los ejemplos de este libro utilizan a propósito los componentes, placas para pines (breakout boards) y módulos de más bajo coste y más amplia disponibilidad que nos ha sido posible encontrar, y que cumplen los requisitos de los ejemplos. De este modo, el lector podrá trabajar con muchos de los ejemplos en lugar de centrar su presupuesto en solo unos pocos. Por todo el libro se indican unos precios orientativos de los componentes para que el lector pueda hacerse una idea del dinero que puede necesitar antes de iniciar un proyecto. Se trata de precios de compra reales (generalmente en dólares) encontrados en webs como ebay.com, amazon.com o aliexpress.com.
NOTANingún producto aparece en este libro como resultado de haber establecido acuerdo alguno con vendedores ni fabricantes. El autor ha seleccionado y adquirido todos los productos personalmente basándose sólo en su precio, funcionalidad y disponibilidad comercial. Los precios solo se ofrecen como referencia y pueden estar sujetos a variación. El lector debe indagar personalmente antes de adquirir cualquier elemento listado en este libro con el fin de asegurarse de que se ajusta a sus necesidades.
Fe de erratas
Se ha trabajado muy duro para garantizar que este libro esté libre de errores. Sin embargo, siempre cabe la posibilidad de que se haya deslizado alguno inadvertidamente. La web del libro (en inglés) contiene un listado con los errores detectados en cada capítulo (www.exploringrpi.com). Si el lector encuentra algún error en el texto o en los ejemplos de código fuente, le agradecería muy sinceramente que utilizara la web del libro para enviarlo y que podamos actualizar tanto la fe de erratas como los ejemplos de código fuente en el repositorio.
Contenido digital y código fuente
El sitio web principal asociado a este libro es www.exploringrpi.com. El propio autor se encarga del mantenimiento del sitio web, que contiene vídeos, ejemplos de código fuente y enlaces para ampliar los datos con nuevas lecturas. Cada capítulo tiene su propia página web. En el caso improbable de que el sitio web no se encuentre disponible, el lector puede encontrar el código fuente en www.wiley.com/go/exploringrpi.
Todo el código fuente se encuentra en un repositorio de GitHub, lo que permitirá al lector descargarlo en su Raspberry Pi con un solo comando. También puede acceder al código fuente en línea con facilidad en la dirección tiny.cc/erpi001. Para descargar el código fuente en su Raspberry Pi solo tiene que introducir el comando siguiente en el símbolo de sistema de su shell de Linux:
pi@erpi ~ $ git clone https://github.com/derekmolloy/exploringrpi.git
Si nunca antes ha utilizado GitHub, no se preocupe, lo explicamos con todo detalle en el capítulo 3.
Bien, es hora de empezar.
Parte
I
Aspectos básicos del Raspberry Pi
En esta parte
Capítulo 1: El hardware del Raspberry Pi
Capítulo 2: El software del Raspberry Pi
Capítulo 3: Exploración de sistemas Linux empotrados
Capítulo 4: Interfaz con los componentes electrónicos
Capítulo 5: Programación con Raspberry Pi
Capítulo
1
El hardware del Raspberry Pi
En este capítulo presentamos el hardware de la plataforma Raspberry Pi (RPi). El capítulo se centra en los modelos más recientes de Raspberry Pi y describe los diferentes subsistemas y las entradas/salidas de las placas. Además, el capítulo lista los accesorios que pueden resultar más útiles a la hora de desarrollar nuestros proyectos basados en Raspberry Pi. Cuando lo finalice, el lector debería haber adquirido una idea cabal de la potencia y la complejidad de esta plataforma de computación hardware. Asimismo, debería ser ya consciente de los primeros pasos a seguir para proteger la placa de cualquier daño físico.
Introducción a la plataforma
Los modelos RPi son dispositivos capaces de realizar labores de computación de propósito general. Así, se han hecho un hueco como plataformas para aprender informática y programación. De igual modo, dichos modelos, algunos de los cuales se muestran en la figura 1-1, también son dispositivos de computación física realmente capaces, que se pueden usar para aplicaciones en sistemas empotrados. En particular para aplicaciones empotradas conectadas a Internet.
Figura 1-1: Ejemplos de placas de la plataforma Raspberry Pi (en una escala relativa).
Algunas características generales de los dispositivos RPi son:
❏Su coste se sitúa entre los 5 y los 30 euros aproximadamente.
❏Se trata de dispositivos de computación muy potentes. Por ejemplo, el RPi 3 contiene un procesador ARM Cortex-A53 a 1,2 GHz capaz de realizar más de 700 millones de instrucciones Whetstone por segundo (MWIPS).¹
❏Hay disponible un abanico muy amplio de modelos adaptables a distintas aplicaciones, por ejemplo: la placa de gran formato RPi 3 para el prototipado o los diminutos Compute Module y RPi Zero, para su uso práctico.
❏Admiten muchas interfaces estándar para dispositivos electrónicos.
❏Funcionan con poca potencia: entre los 0,5 W de un RPi Zero inactivo y los aproximadamente 5,5 W de un RPi 3 a plena carga.
❏Son ampliables mediante placas de extensión HAT (Hardware Attached on Top) conectables directamente a la placa y dispositivos USB.
❏Reciben soporte por parte de una enorme comunidad de usuarios innovadores y entusiastas que aportan generosamente su tiempo para ayudar a la RPi Foundation en sus objetivos educacionales.
La plataforma RPi puede ejecutar el sistema operativo Linux, lo que nos permite utilizar directamente numerosas aplicaciones y librerías software de código. La disponibilidad de controladores software de código abierto nos permite también conectar dispositivos como cámaras USB, teclados y adaptadores WiFi a nuestros proyectos, sin necesidad de emplear soluciones propietarias. Por lo tanto, tenemos acceso a librerías de código fuente muy completas, desarrolladas por miembros de una comunidad open source sobrada de talento. No obstante, debemos tener presente que ese código fuente suele carecer de garantía alguna. Si se presentan problemas, debemos fiarnos de la buena voluntad de la comunidad a la hora de resolverlos. Ni que decir tiene que también podemos ser nosotros los que resolvamos los problemas y pongamos la solución a disposición del resto de la comunidad.
Una característica impresionante de los modelos de RPi más recientes es la posibilidad de ampliar su funcionalidad mediante placas de extensión, llamadas HAT como ya hemos visto, que se conectan directamente a la doble fila de cuarenta pines (cabecera GPIO) visible en las placas de la figura 1-1. Podemos diseñar nuestras propias HAT y conectarlas con seguridad a la placa RPi mediante esta cabecera. Además, en el mercado existen muchas placas HAT que permiten ampliar la funcionalidad de la plataforma RPi. Hacia el final del presente capítulo describiremos algunos ejemplos de aquellas.
¿A quién está destinado el RPi?
Cualquiera que desee transformar un concepto de ingeniería en un proyecto electrónico interactivo real y tangible, un prototipo o una obra de arte debería plantearse utilizar RPi. Dicho esto, no podemos olvidar que la integración de software de alto nivel con componentes electrónicos de bajo nivel no es una tarea fácil. Sin embargo, la dificultad inherente a cualquier implementación dependerá del nivel de sofisticación que demande el proyecto concreto. La comunidad RPi trabaja muy duro para asegurar que la plataforma sea accesible para todo el mundo que esté interesado en integrarla en sus proyectos, ya sean estudiantes, artistas o aficionados. Por ejemplo, la disponibilidad para el RPi de la herramienta de programación visual Scratch (tiny.cc/erpi101) ofrece una vía excelente para interesar a los niños tanto en la plataforma RPi como en la programación de ordenadores.
Aquellos usuarios más avanzados, que poseen conocimientos de electrónica o computación, pueden alcanzar niveles de desarrollo y personalización de la plataforma RPi suficientes para cumplir todos los requisitos de sus proyectos. Ahora bien, dicha personalización no es una tarea trivial: es posible que el lector sea un experto en la electrónica de bajo nivel, y que, o bien la programación de alto nivel, o bien el sistema operativo Linux, le causen dolores de cabeza. Y viceversa: podría ser todo un gurú de la programación, y no haber soldado un LED en toda su vida. El objetivo de este libro es llegar a todos los tipos de usuarios que estén interesados en interaccionar con el RPi y dar a cada uno la suficiente información sobre Linux, electrónica y software como para que puedan ser productivos, con independencia de su nivel previo de experiencia.
Cuándo utilizar el RPi
La plataforma RPi permite integrar magníficamente software de alto nivel con electrónica de bajo nivel en cualquier tipo de proyecto. Tanto si pretendemos desarrollar un sistema de domótica automatizado, un robot, una pantalla multimedia, una aplicación IoT, una máquina de vending o una obra de arte conectada a Internet, el RPi cuenta con la suficiente potencia de procesamiento para afrontar todo aquello que podamos exigir a un dispositivo empotrado.
La mayor ventaja que el RPi y otros dispositivos Linux empotrados presentan frente a los sistemas empotrados tradicionales, como Arduino, PIC o microcontroladores AVR, se pone de manifiesto cuando basamos nuestros proyectos en Linux. Por ejemplo, si construimos un sistema de automatización con el RPi y decidimos que determinada información esté disponible en Internet, no tenemos más que instalar el servidor web Nginx. Luego, podemos desarrollar scripts en el servidor o utilizar nuestro lenguaje de programación favorito para comunicar con nuestro sistema de domótica automatizado para capturar y compartir información. También es posible que nuestro proyecto exija un acceso remoto seguro. En tal caso, para instalar un servidor SSH (Secure Shell) no tendríamos más que ejecutar el comando Linux sudo apt install sshd, como veremos en el capítulo 2. Esto podría muy bien ahorrarnos semanas de trabajo de desarrollo. Además, tenemos la tranquilidad de saber que ese mismo software se ejecuta con plena seguridad en millones de máquinas por todo el mundo.
Linux proporciona también controladores para numerosos periféricos y adaptadores USB, lo que nos permite conectar cámaras, adaptadores WiFi y otros dispositivos comerciales de bajo coste directamente a nuestra plataforma sin necesidad de desarrollar software caro y complejo.
El RPi es también un magnífico dispositivo para reproducir vídeo de alta definición. Capacidad que debe a su procesador Broadcom BCM2835/6/7 diseñado para aplicaciones multimedia y a que incorpora una implementación hardware de los códecs H.264/MPG-4 y MPG-2/VC-1 (mediante una licencia adicional). Utilizar el RPi para la ejecución de aplicaciones multimedia, como el centro de entretenimiento doméstico Kodi² (www.kodi.tv) para reproducir vídeo con resolución full-HD, goza de bastante popularidad.
Cuándo no utilizar el RPi
Linux no se diseñó como sistema operativo de tiempo real ni para procesamiento predecible. Esto resultaría problemático, por ejemplo, si pretendemos obtener muestras de un sensor cada millonésima de segundo exactamente. Si el núcleo se halla ocupado con una tarea diferente en el instante preciso de recogida de una muestra, no va a resultar fácil interrumpirlo. Por lo tanto, en su configuración predeterminada, el RPi no resulta una plataforma idónea para aplicaciones de sistemas en tiempo real. Existen versiones de Linux para aplicaciones en tiempo real, pero destinadas a desarrolladores de Linux muy experimentados, y cuyas capacidades en ese ámbito son limitadas. No obstante, el RPi se puede combinar con procesadores de servicio en tiempo real, donde desempeñaría la labor de inteligencia central
del conjunto. Podemos establecer la conexión de tales microcontroladores de tiempo real con el RPi a través de buses eléctricos, como I²C UART o Ethernet, y dejar que el RPi actúe como procesador central en un sistema de control distribuido. Este concepto se describe en los capítulos 11, 12 y 13.
La plataforma RPi no es ideal para desarrollar proyectos que se tenga intención de comercializar. Raspberry Pi hace un uso amplio de software de código abierto, aunque se usan fragmentos de código propietario en la GPU, pero no es propiamente un hardware de código abierto. Los esquemas de las placas RPi se encuentran disponibles (tiny.cc/erpi102, por ejemplo), pero la documentación del hardware utilizado es escasa. Además, la licencia³ del bootloader de Broadcom indica explícitamente que solo se permite su distribución en código binario si … va a servir para el desarrollo, la ejecución o el uso en un dispositivo Raspberry Pi
. No es probable que tal licencia se pueda transferir a un producto comercial diseñado por nosotros.
Como describimos anteriormente en este capítulo, la RPi Foundation se centra en la educación; así, la posible comercialización de un producto cae muy lejos de su ámbito. Si el lector planea desarrollar un proyecto de Linux empotrado con la vista puesta en comercializarlo, debería detenerse a examinar la plataforma BeagleBone, que está completamente basada en código abierto y recibe un soporte documental robusto de Texas Instruments. Además, obviamente, recomiendo al lector que adquiera mi libro Exploring BeagleBone, también editado por Wiley.
La documentación del RPi
En este libro integro mis experiencias de desarrollo con la plataforma RPi junto con materiales de apoyo relativos a Linux empotrado, programación y electrónica general, para crear una detallada guía de desarrollo. Sin embargo, simplemente no es posible abarcar todo en un solo libro, así que he evitado incluir información disponible en los documentos principales y los sitios web descritos en esta sección. El primer lugar en el que buscar documentación de apoyo es este sitio web:
❏Sitio web de la Raspberry Pi Foundation: en esta web se ofrece el principal soporte a la plataforma RPi, con blogs, guías de software, enlaces con la comunidad de usuarios y descargas para apoyar nuestros esfuerzos de desarrollo. Diríjase a www.raspberrypi.org.
Existe una enorme cantidad de documentación sobre la plataforma RPi, pero los documentos más importantes para este libro son los siguientes:
❏La documentación del Raspberry Pi: se trata de la documentación oficial de RPi, escrita por la Raspberry Pi Foundation. Incluye guías de introducción, guías de configuración, guías sobre las distribuciones Linux, etc. Diríjase a www.raspberrypi.org/documentation/.
❏Hoja de datos de dispositivos Broadcom BCM2835 ARM: es el documento principal que describe el procesador de la mayoría de los modelos de RPi (salvo RPi 2/3). Con una longitud de 200 páginas, proporciona una descripción técnica de la funcionalidad y las capacidades del procesador en las placas RPi. Diríjase a tiny.cc/erpi103. Existe también una importante fe de erratas en el sitio tiny.cc/erpi104.
❏El documento sobre BCM2836: este documento describe características del procesador en la placa RPi 2 y características relacionadas en el RPi 3. Se debe leer junto con el documento anterior de Broadcom sobre el BCM2835. Diríjase a tiny.cc/erpi105.
Hay varios sitios web claves para el aprendizaje de esta plataforma. En ellas encontramos una combinación de tutoriales, foros de discusión, librerías con código de ejemplo, distribuciones Linux y sugerencias de proyectos con las que estimular nuestra creatividad. Veamos una selección de dichas webs:
❏El sitio web de este libro: www.exploringrpi.com
❏Mi blog personal: www.derekmolloy.ie
❏El sitio web de eLinux.org: www.elinux.org
En el capítulo 2 se desarrolla la introducción a la plataforma software del RPi. El resto de este capítulo analiza el hardware de la plataforma RPi, explica la funcionalidad que ofrece, resume las especificaciones técnicas y proporciona algunos ejemplos de los tipos de periféricos y placas HAT que resultarían interesantes para el RPi.
El hardware del RPi
El núcleo de las placas RPi lo forman los SoC (System on a Chip) Broadcom BCM2835, BCM2836 y BCM2837. Hay disponibles varios modelos de RPi en la actualidad, y el contenido de este libro es perfectamente aplicable a todos ellos. No obstante, aquí nos vamos a centrar sobre todo en las versiones más recientes del RPi, las que tienen una cabecera GPIO de cuarenta pines, como los RPi A+, B+, 2, 3 y Zero. Si aún no ha comprado ningún modelo de RPi, le recomendamos que opte por el RPi 3. Esta placa soporta comunicación en red por cable e inalámbrica y cuenta con un procesador multinúcleo, lo que la hace compatible con todos los conceptos descritos en este libro y sus posibles ampliaciones. Ni el RPi A+ ni el Zero cuentan con una interfaz para cableado de red, y el RPi B+ carece de un procesador multinúcleo, pero la mayoría de los ejemplos de este libro funcionan perfectamente con ellos.Si va a utilizar el RPi A+ o el RPi Zero, es recomendable que se dirija al principio del capítulo 13 para aprender a configurar un adaptador de red inalámbrico USB.
Las versiones del Raspberry Pi
La figura 1-2 presenta una síntesis de las características comparadas de los distintos modelos de RPi disponibles en la actualidad. Veamos un resumen rápido de esta tabla:
❏Si queremos un RPi para computación de propósito general, deberíamos considerar el RPi 3. Con un procesador de cuatro núcleos a 1,2 GHz y 1 GB de memoria, ofrece el mejor rendimiento de todas las placas.
❏Para aplicaciones que deban conectar los circuitos electrónicos con Internet en una red cableada, evaluaremos RPi 3, RPi 2 o RPi B+, y consideraremos el precio el factor decisivo.
❏Si necesitamos un dispositivo muy pequeño con conectividad inalámbrica, optaremos por el RPi Zero. Por su parte, el RPi A+ puede servir perfectamente para el prototipado inicial.
❏Si lo que queremos es diseñar nuestra propia placa PCB (Printed Circuit Board, placa de circuito impreso) que utilice una o varias placas RPi, debemos analizar el módulo Computer.
Figura 1-2: Comparación resumida de los modelos de RPi más comunes.
El hardware del Raspberry Pi
Las figuras 1-3 y 1-4 detallan los sistemas principales de los modelos RPi más habituales. La figura 1-3(a) muestra la placa RPi Zero. Los sistemas clave identificados en las llamadas 1 a 11 de la figura se describen con detalle en la figura 1-4. De forma similar, la figura 1-3(b) muestra la placa RPi 3, y los sistemas clave identificados en las llamadas 1 a 15 se describen igualmente en la figura 1-4.
Figura 1-3: Las entradas/salidas y subsistemas de dos modelos
de RPi (a escala relativa): (a) RPi Zero y (b) RPi 3.
La figura 1-4 detalla las diferentes entradas y salidas disponibles en la cabecera GPIO. En modelos recientes del RPi (A+, B+, 2, 3 y Zero) hay 40 pines en total en esta cabecera (una fila con veinte pares). Sin embargo, no todos están disponibles como entradas/salidas de propósito general (GPIO). Algunos de los conectores tienen una configuración fija.
❏8 de ellos están conectados a tierra.
❏4 están destinados a fuentes de alimentación con distinto voltaje: 3,3 V (hasta 50 mA) y 5 V (hasta 300 mA).
❏2 pines se reservan para placas de extensión HAT, que veremos más adelante en este mismo capítulo, aunque también se pueden reconfigurar para otras tareas (véase el capítulo 8).
Los 26 conectores restantes pueden multiplexarse para funciones muy diferentes, algunas de las cuales se mencionan en la figura 1-4 bajo el encabezamiento GPIO
. La función de cada uno de estos tipos de entrada/salida se describe con detalle en los capítulos 6 y 8.
Figura 1-4: Tabla de conectores y subsistemas generales del RPi.
Accesorios del Raspberry Pi
Los requisitos externos para usar la placa RPi suelen ser mínimos:
❏Un cable USB 2.0 (generalmente micro-USB a USB-A) para conectar el RPi a una fuente de alimentación, como un PC de sobremesa o un cargador USB para teléfono móvil.
❏Una tarjeta micro-SD para guardar el sistema operativo que sirve para iniciar la placa.
❏Un cable Ethernet CAT-5 para conectar el RPi a la red mediante su conector Ethernet RJ-45 10/100.
El RPi se puede conectar a un monitor mediante un cable HDMI (un mini-HDMI con el RPi Zero), pero la mayoría de los ejemplos de este libro asumen que el RPi se utiliza sin monitor (en headless mode).
Accesorios importantes
Es importante que el lector adquiera los accesorios siguientes junto con su placa RPi.
Una fuente de alimentación externa de 5 V
La mejor forma de alimentar al RPi es con un cable micro-USB conectado a una fuente de alimentación de 5 V de buena calidad (±5%) que pueda ofrecer una corriente de al menos 1,1 A (1100 mA) para las placas antiguas y 2,5 A (2500 mA) para el RPi 3. Las placas RPi demandan típicamente entre 500 y 700 mA, pero algunos periféricos USB, como adaptadores WiFi o webcams, necesitan bastante más corriente. La entrada micro-USB de las placas RPi cuenta con un fusible rearmable (polyfuse) que limita la entrada de corriente a unos 1100 mA (con 700 mA de corriente segura, véase el capítulo 4) en la mayoría de los modelos RPi, y 2500 mA en el RPi 3. Podemos conectar una fuente de alimentación USB capaz de suministrar una intensidad de corriente superior a 2500 mA, pero en ningún caso una cuyo voltaje salga del rango de 4,75 V a 5,25 V (5 V ± 5%).
Si surgen problemas de estabilidad, como reinicios y cuelgues aleatorios o problemas de teclado, debemos sospechar enseguida del circuito de alimentación. Puede ser que la fuente de alimentación sea incapaz de proporcionar la corriente adecuada, o bien que sea, ella misma o el cable USB, de mala calidad y estén operando fuera de su rango de tolerancia. Por ejemplo, los fabricantes de ciertas fuentes de alimentación de 5 V genéricas, de escasa calidad, afirman que son capaces de proporcionar 1 A (seguramente se refieran al límite de corriente de cortocircuito) pero seguramente su voltaje de salida caerá a niveles inaceptables a medida que se incremente la demanda de corriente. Cuando se sospecha de que ese es el problema, hay que medir los niveles de voltaje en el RPi. En modelos recientes utilizaremos para ello PP1 o PP2 y GND, o cualquier otro componente de metal protegido, como se muestra en la figura 1-6(a). En modelos más antiguos usaremos TP1 y TP2.
Figura 1-6: (a) Comprobación de que el voltaje en el RPi se encuentra en el rango
4,75-5,25 V (5 V ± 5%). (b) El RPi Zero y sus conectores asociados.
Tarjeta micro-SD para iniciar el sistema operativo
Adquiera una tarjeta micro-SD de una marca de calidad reconocida y con no menos de 8 GB de capacidad. Asimismo, puede que necesite un adaptador micro-SD a SD para poder usarla en el lector de tarjetas de su ordenador. Las placas RPi más antiguas, como la A o la B, utilizan tarjetas SD estándar y pueden beneficiarse también de tal adaptador. En todo caso, no es raro que las tarjetas micro-SD incluyan dicho adaptador, lo que nos evitará tener que comprarlo.
La micro-SD debería ser de Clase 10 o superior, ya que su mayor velocidad de lectura/escritura nos ahorrará tiempo, sobre todo en la escritura de imágenes. Lo ideal sería una micro-SD de entre 8 y 32 GB con funcionalidad de nivelación de desgaste (wear leveling) que ampliará la vida útil de la tarjeta, sobre todo si la formateamos pero no ocupamos toda su capacidad. Tarjetas micro-SD con mayor capacidad también pueden funcionar, pero son mucho más caras. Enfoques de almacenamiento alternativos con dispositivos USB para el RPi también se analizan brevemente.
Cable Ethernet para conectividad de red
Los RPi B/B+/2/3 se pueden conectar a Internet a través de redes locales Ethernet. Los RPi A/A+/Zero se pueden conectar a Internet mediante adaptadores inalámbricos USB. Conectaremos el RPi a la red local enchufando el cable Ethernet CAT 5 en el puerto RJ-45 10/100 correspondiente. Si vamos a utilizar más de un RPi simultáneamente, no estaría de más gastar un poco de dinero en un switch de cuatro bocas económico, que podemos situar cerca de nuestro ordenador.
Accesorios recomendados
Es recomendable que el lector adquiera los accesorios siguientes junto con su placa RPi. Si planea realizar desarrollos en el