Desarrollo rápido utilizando Raspberry Pi 3 (Versus Scarce Raspberry Pi Zero)
Colaboración de Editores de DigiKey de América del Norte
2017-03-08
Las placas Raspberry Pi en todas sus iteraciones han sido de gran ayuda para los desarrolladores, tanto para los profesionales como aficionados por igual. A pesar de que la Raspberry Pi Zero ha generado mucha atención, ha sido difícil de obtener. Afortunadamente, los diseñadores tienen muchas otras placas dentro de la familia Pi, que ofrecen características superiores para satisfacer las demandas de las aplicaciones.
Con su procesador de cuatro núcleos, la Raspberry Pi 3 ofrece el doble de la memoria en comparación con la Pi Zero de un solo núcleo. Para los desarrolladores que requieren una pequeña huella de diseño, pero están decepcionados del rendimiento de Pi Zero, el módulo de computación 3 de Raspberry Pi (CM3) coincide tanto con el alto rendimiento de la Pi 3 como con la huella del tamaño de una tarjeta de crédito de Pi Zero. Al aprovechar una enorme variedad de placas de hardware adicionales y de software fácilmente disponible, los desarrolladores están equipados para satisfacer una amplia gama de requisitos de aplicación con la Pi 3 y el CM3.
Instalar y hacer que Raspberry Pi entre en funcionamiento
Los sistemas de Raspberry Pi proporcionan una sólida fundación de código abierto, que permite que los proveedores, terceros desarrolladores y los usuarios aprovechen y contribuyan con un ecosistema cada vez más rico de software y hardware. Desarrollado originalmente por la Fundación Raspberry Pi como una plataforma de bajo costo para enseñar computación, el hardware Pi se ha convertido en una plataforma potente y de bajo costo adecuada para el prototipado rápido y, cada vez más, en una plataforma de computación integrable.
El software Pi ofrece un nivel similar de rendimiento y accesibilidad. Las placas Pi ejecutan Raspbian, una versión del sistema operativo (OS) GNU/Linux optimizado para las placas Raspberry Pi. Los desarrolladores pueden insertar una tarjeta SD que contiene el instalador Raspbian, NOOBS, en la interfaz SD de la placa Pi y estará en funcionamiento en cuestión de segundos con un ambiente Linux familiar.
Gracias a una comunidad Raspberry Pi muy activa, los desarrolladores con requisitos específicos pueden elegir entre los sistemas operativos alternativos, incluyendo desktop Ubuntu, Ubuntu Core, Windows 10 IoT Core, Centro Multimedia de Codigo Abierto (OSMC) basado en Linux, y sistema operativo RISC, entre otros. Para aquellas distribuciones, los desarrolladores solo tienen que cargar el sistema con una imagen descargada que se almacena en una tarjeta SD. Por último, los ingenieros de software pueden beneficiarse de un amplio conjunto de bibliotecas de software disponibles, que soportan el desarrollo de una gran variedad de lenguajes de programación.
Slices Pi
A nivel de hardware, Pi ha evolucionado en tres ramas principales que presentan algunas diferencias notables en el rendimiento, el tamaño y la funcionalidad (Tabla 1). Destacado por su pequeño tamaño, la recientemente introducida Pi Zero sirve como una placa de nivel de entrada, que sacrifica algunos elementos funcionales para un menor costo y una huella más pequeña. En contraste, la Pi 3 y su variante integrada el CM3, disponen de un procesador de cuatro núcleos de alto rendimiento y una gran capacidad de memoria, lo que proporciona el tipo de plataforma de hardware sólida necesaria para aplicaciones integradas. Además, el CM3 proporciona casi la misma huella que la Pi Zero sin sacrificar el rendimiento ni la funcionalidad.
|
Tabla 1: Comparación del módulo de computación 3 de Raspberry Pi 3 (CM3) y Pi Zero (Fuente: DigiKey, compilado a partir de datos de la Fundación Raspberry Pi)
Las interfaces de hardware estándar son un factor crítico en el éxito de una plataforma como la de Raspberry Pi. Las placas recientes Pi, incluyendo el Pi 3 y Pi Zero, ofrecen la misma interfaz de 40 clavijas, lo que hace notar 28 clavijas GPIO, algunas de las cuales se duplican para I2C, SPI y conexiones UART (Figura 1). Junto con los pines GPIO, esta interfaz Pi estándar proporciona 3.3 V, 5 V, de tierra y otras líneas como EEPROM ID. Gracias a este pin de salida común, los usuarios de Pi puede encontrar una amplia gama de placas adicionales de proveedores de terceros; todo esto forma parte de esta interfaz estándar.

Figura 1: Común a las placas Pi, incluyendo la Pi 3 y la Pi Zero, es una interfaz de 40 pines, que saca GPIO y otras líneas desde el procesador host de la placa y los componentes asociados. (Fuente de la imagen: Fundación Raspberry Pi)
Sin embargo, para los usuarios de Pi Zero, esta interfaz de 40 pines se proporciona como orificios pasantes de revestimiento en el PCB, lo que requiere que el usuario ajuste a presión o suelde en una cabecera del conector del orificio pasante. Para la Pi 3, la cabecera propia del conector es estándar (Figura 2), debido a que son conectores para características tales como Wi-Fi y Ethernet, que no están disponibles con la Pi Zero, como se describe en la Tabla.

Figura 2: Al proporcionar la interfaz Pi estándar de 40 pines, Pi Zero (a) solo ofrece conexiones de orificios pasantes mientras que la Pi 3 (b) incluye un conector de 40 pines preparado para aceptar placas adicionales, llamadas HAT (hardware conectado en la parte superior). (Fuente de la imagen: Fundación Raspberry Pi)
Hardware adicional
Debido a que la interfaz Pi proporciona energía, tierra y GPIO, los desarrolladores pueden conectar sus circuitos discretos directamente a los pines de la interfaz GPIO de Pi 3. En vez de conectar los circuitos desde cero, la plataforma Pi ofrece una forma más efectiva de ampliar la funcionalidad de un sistema de PI 3. En este caso, la disponibilidad de la cabecera de 40 pines en Pi 3 proporciona una interfaz estándar para placas adicionales configuradas como HAT (hardware conectado en la parte superior). Gracias a esta interfaz eléctrica y mecánica sencilla, los desarrolladores pueden mejorar rápidamente la base de la placa Pi 3 con funcionalidad específica de aplicación. Los desarrolladores simplemente pulsan un complemento compatible con Pi en HAT hacia el conector de 40 pines e incluso crean pilas de placas adicionales que comparten esta única interfaz.
Los desarrolladores pueden hacer uso de una reserva considerable de placas adicionales. Por ejemplo, el Sense HATde Pi incluye un conjunto completo de sensores necesarios para las aplicaciones de orientación o medio ambiente. Además, proporciona una matriz LED y cinco botones de palanca de control para la retroalimentación y la interacción del usuario (Figura 3).

Figura 3: Los desarrolladores agregan funcionalidad a una placa Pi simplemente conectando en HAT como este Sense HAT de Pi, el cual proporciona múltiples sensores junto con una matriz LED y cinco botones de palanca de control para la interacción del usuario. (Fuente de la imagen: Fundación Raspberry Pi)
El Sense HAT es un subsistema sofisticado por derecho propio: Junto con su Tecnología Microchip ATtiny MCU de 8 bits (ATTINY88), esta placa adicional incluye una unidad de medición inercial (IMU) LSM9DS1 de STMicroelectronics, un sensor de humedad/temperatura HTS221 de STMicroelectronics y un sensor de presión LPS25HBTR de STMicroelectronics.
Implementación sencilla
Al igual que con otras placas adicionales compatibles con Pi, los desarrolladores conectan Sense HAT a su sistema PI 3 simplemente presionando la placa HAT en la cabecera de 40 pines del PI 3. La interfaz del software es muy sencilla: La biblioteca sense-hat de Python oficialmente compatible esconde interacciones de hardware de bajo nivel detrás de llamadas sencillas e intuitivas (Listado 1).
desde importar SenseHat sense_hat
sense = SenseHat()
temp = sense.get_temperature()
print("Temperature: %s C" % temp)
humidity = sense.get_humidity()
print("Humidity: %s %%rH" % humidity)
# get_orientation_degrees devuelve un diccionario de Python
# con paso clave, balanceo y deriva
orientation = sense.get_orientation_degrees()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**orientation))
Listado 1: La biblioteca Sense HAT de Raspberry Pi permite que los desarrolladores de software utilicen un par de llamadas intuitivas para adquirir datos desde el hardware Sense HAT. (Fuente código: Fundación Raspberry Pi)
Además del Sense HAT Pi, los desarrolladores pueden encontrar HAT terceros, que abordan los requisitos más típicos de aplicación. Por ejemplo, Seeed Technology 114990831 proporciona un convertidor digital a analógico (DAC) de 2 canales de 16 bits de un convertidor analógico a digital (ADC) de 24 bits, ya sea con 8 canales de entrada de una sola terminal o 4 canales de entrada diferenciales. Los desarrolladores pueden encontrar complementos que van desde Seeed GPS, un sensor ultrasónico de determinación del intervalo DFRobot y un motor paso a paso Adafruit, entre muchos otros.
Para los desarrolladores con requisitos que las placas adicionales existentes no pueden satisfacer, Seeed Technology ofrece una placa de interfaz HAT, que tienen un par de componentes integrados que incluyen transistores P-MOS, N-MOS, NPN y PNP.
Al trabajar con los HAT, los desarrolladores pueden aprovechar una serie de herramientas de software proporcionadas por la Fundación Raspberry Pi, los proveedores y otros miembros de la comunidad Pi. Por ejemplo, la herramienta raspi-gpio de Raspberry Pi permite que los desarrolladores vean el estado y modifiquen el comportamiento de un GPIO. Los programadores también pueden utilizar el código C de código abierto de esta herramienta como modelo para desarrollar sus propias rutinas de software de control GPIO.
Los desarrolladores también pueden encontrar bibliotecas GPIO para lenguajes de alto nivel como Python. El módulo RPi.GPIO Python permite que los desarrolladores controlen todos los aspectos de la función GPIO a nivel de pines con llamadas tales como:GPIO.input (canal) para leer el valor de un pin GPIO y GPIO.output (canal, estado) para establecer un pin GPIO específico en un estado específico.
La biblioteca gpiozero Python eleva programación GPIO con abstracciones de nivel superior, tales como MotionSensor, LightSensor, LED, Motor y otros. Con este enfoque, los programadores se ocupan del hardware subyacente mediante la lectura de su estado o estableciendo el estado deseado con comandos más intuitivos como led.on () para encender un LED, confiando en que la biblioteca gestione las transacciones GPIO subyacentes.
Aprovechando Grove
El estándar de interfaz HAT Pi proporciona una base atractiva para los desarrolladores de terceros, pero sin embargo sigue estando limitada a la plataforma Pi. Por el contrario, la interfaz Grove proporciona una base estándar única que cruza las plataformas de hardware, lo que atrae aún más los desarrolladores de placas adicionales. El kit de inicio de Grove de Seeed Technology ofrece una placa HAT compatible con Pi con múltiples conectores compatibles con Grove. Al igual que con otros HAT, el HAT de Grove es compatible con el conector de 40 pines de Pi 3 (Figura 4).

Figura 4: El kit de inicio Grove de Seeed Technology se conecta al conector de 40 pines de Pi estándar, lo que permite que los desarrolladores mejoren su sistema Pi utilizando el amplio conjunto de periféricos compatibles con Grove. (Fuente de la imagen: Seeed Technology)
Con el HAT de Grove, los desarrolladores conservan la sencillez y el rendimiento de Pi 3, mientras ganan acceso a un amplio conjunto de complementos compatibles con Grove incluyendo actuadores, sensores de gas, dispositivos de control de motores, altavoces, transceptores inalámbricos y mucho más. En lugar de conectar la funcionalidad del complemento directamente en el conector de 40 pines de Pi 3, los desarrolladores conectan el conector Grove provisto con estos productos en una de las tomas de corriente Grove que se encuentra en la parte superior de HAT Grove (Figura 4 de nuevo).
Los desarrolladores pueden encontrar bibliotecas de software Grove para C, Java, Node.js, Python y otros que de igual forma les permiten conectar la funcionalidad de Grove en sus aplicaciones. Aquí, las rutinas de alto nivel permiten que los desarrolladores piensen en términos de recopilación de datos analógicos (Listado 2), apoyándose en las rutinas de bajo nivel de la biblioteca para ejecutar las operaciones a nivel de bits correspondientes (Listado 3).
# Tuitee la temperatura, la luz y los niveles de sonido con nuestra Raspberry Pi
# http://www.dexterindustries.com/GrovePi/projects-for-the-raspberry-pi/raspberry-pi-twitter-sensor-feed/
import twitter
import time
import grovepi
import math
# Conexiones
sound_sensor = 0 # port A0
light_sensor = 1 # port A1
temperature_sensor = 2 # port D2
led = 3 # port D3
intro_str = "DI Lab's"
# Conectar a Twitter
api = twitter.Api(
consumer_key='YourKey',
consumer_secret='YourKey',
access_token_key='YourKey',
access_token_secret='YourKey'
)
grovepi.pinMode(led,"OUTPUT")
grovepi.analogWrite(led,255) #llevó al Led al máximo para mostrar la disposición
while True:
# Administración de errores en caso de problemas de comunicación con GrovePi
intentar:
# Obtener el valor del sensor de temperatura
[t,h] = grovepi.dht(temperature_sensor,0)
# Obtener el valor del sensor de luz
light_intensity = grovepi.analogRead(light_sensor)
# Dar salida PWM para LED
grovepi.analogWrite(led,light_intensity/4)
# Obtener nivel de sonido
sound_level = grovepi.analogRead(sound_sensor)
# Publica un tuit
out_str ="%s Temp: %d C, Humedad: %d, Luz: %d, Sonido: %d" %(intro_str,t,h,light_intensity/10,sound_level)
print (out_str)
api.PostUpdate(out_str)
time.sleep(60)
except IOError:
print("Error")
excepto KeyboardInterrupt:
exit()
excepto:
print("Duplicar tuit o denegar tuit")
Listado 2: Los desarrolladores pueden utilizar una placa Pi, complementos Grove y una biblioteca de software Grove para implementar rápidamente sofisticadas aplicaciones como este ejemplo, que emula un proceso parecido al de internet de las cosas para transmitir datos ambientales a un servicio de acogida, Twitter, en este caso. (Fuente código: Dexter Industries)
# Leer el valor analógico del pin
def analogRead(pin):
write_i2c_block(address, aRead_cmd + [pin, unused, unused])
read_i2c_byte(address)
number = read_i2c_block(address)
return number[1] * 256 + number[2]
Listado 3: La biblioteca de software Grove se encarga de las operaciones a nivel de bits necesarios para acceder a los periféricos del hardware, lo que permite que los desarrolladores trabajen con las llamadas más intuitivas como analogRead (pin). (Fuente código: Dexter Industries)
Configuración simplificada
En el pasado, agregar un nuevo hardware a un sistema presenta desafíos en muchos niveles. Los ingenieros de hardware necesitaban diseñar interfaces mecánicas y eléctricas adecuadas. Los desarrolladores de aplicaciones necesitaban encontrar bibliotecas de software adecuadas, capaces de proporcionar el tipo de abstracción necesaria para maximizar la productividad. La Pi 3 y su ecosistema eliminan estos desafíos con el conector de la Pi estándar de 40 pines y con las bibliotecas de software fácilmente disponibles descritas anteriormente. Yendo aún más lejos, la arquitectura Pi libera a los desarrolladores de un requisito adicional ¾ de la recuperación y carga de paquetes de soporte de placas (BSP) específicos del hardware. Los BSP suelen proporcionar el código de bajo nivel necesario para completar la interfaz entre el sistema operativo y el hardware adicional.
La arquitectura Pi elimina en gran medida la necesidad de que los usuarios de Pi instalen y configuren los BSP para diferentes dispositivos de hardware. En cambio, los sistemas de Pi utilizan un árbol de dispositivos que proporciona un mecanismo para cargar los módulos y gestionar la asignación de recursos para evitar conflictos entre múltiples módulos de software que compiten por los mismos recursos. Si un dispositivo de hardware requiere un software especializado, el usuario de Pi solo necesita fijar algunos elementos de configuración. El núcleo del sistema operativo encuentra y carga automáticamente los módulos asociados con los dispositivos de hardware correspondientes. Por ejemplo, la funcionalidad I2C en un sistema Pi está desactivado por defecto. Los desarrolladores solo tienen que editar el archivo de configuración, config.txt, para desmarcar una línea:
#dtparam=i2c_arm=on
La plataforma Pi simplifica incluso ese paso. Cuando Raspbian arranca primero, se ejecuta una herramienta de configuración que le presenta al usuario un menú de elementos de configuración, incluyendo la posibilidad de activar diferentes interfaces.
Para las aplicaciones que dependen de un hardware en base a I2C, las bibliotecas de nivel superior, como las mencionadas anteriormente, eliminan la necesidad de que los desarrolladores codifiquen a nivel de operaciones I2C. Cuando los desarrolladores necesitan para desarrollar códigos para operaciones I2C especializadas, pueden encontrar software como las herramientas I2C para Linux, que se pueden utilizar directamente o pueden utilizarse como ejemplos para crear software I2C personalizado.
Pi integrada
Para los diseñadores que buscan integrar los sistemas de Pi en productos, la recientemente anunciada CM3 ofrece una solución compacta de Pi (Figura 5). Basada en el mismo procesador de cuatro núcleos que Pi 3, el CM3 también proporciona las mismas características y funcionalidades que Pi 3. Además, el CM3 incluye 4 Gbytes de flash eMMC en la placa: otras placas Pi proporcionan una ranura micro SD para agregar tarjetas de memoria flash externas. (Raspberry Pi también ofrece la CM3L, una versión "Lite" del CM3, que incluye todo en ese producto, excepto el flash en la placa).

Figura 5: El Módulo de computación 3 (CM3) de Raspberry Pi ofrece el pequeño tamaño de Pi Zero y el rendimiento de Pi 3, al mismo tiempo que trae más pines que ninguno. También, incluye un módulo flash de 4 Gbytes (en el lado inverso de la placa). (Fuente de la imagen: Fundación Raspberry Pi)
El CM3 se aleja de la interfaz del E/S de 40 pines utilizado en la Pi 3 y en la Pi Zero. En cambio, el CM3 ofrece su interfaz expandida como un conector SODIMM (módulo de memoria dual en línea de contorno pequeño) de 200 pines en el borde de la placa (Figura 6). De hecho, toda la placa CM3 es DDR2 SODIMM compatible con factor de forma, lo que le permite a los desarrolladores conectar el CM3 a un sistema de destino a través de un conector DDR2 SODIMM estándar.

Figura 6: El CM3 de Raspberry Pi va más allá de la interfaz de 40 pines que se encuentra en otras placas Pi; ofrece en su lugar una interfaz de 200 pines del procesador y otros componentes de la placa. (Fuente de la imagen: Fundación Raspberry Pi)
Para simplificar el desarrollo, los ingenieros pueden aprovechar el kit de desarrollo del CM3, de Raspberry Pi, que combina un módulo CM3 con la placa del módulo de computación E/S de Raspberry Pi. La placa E/S es una placa de código abierto simple con un conector SODIMM DDR2 para el CM3 y cabeceras que rompen la interfaz CM3 de 200 pines (Figura 7). Además, la placa E/S proporciona conectores para HDMI, USB, cámara y puertos de pantalla previstas en la placa Pi 3.

Figura 7: Incluido con el kit de desarrollo CM3, la placa del módulo de computación E/S de Raspberry Pi proporciona un conector SODIMM DR2 para el CM3, así como también cabeceras para la interfaz del CM3 de 200 pines y conectores para puertos HDMI, USB, cámara y pantalla. (Fuente de la imagen: Fundación Raspberry Pi)
Aplicaciones en tiempo real
Con su combinación de alto rendimiento y factor de forma pequeño, el CM3 es muy adecuado para utilizarlo como sistema integrado en productos electrónicos, tales como televisores, equipos de audio y productos de consumo similares. Para las aplicaciones en tiempo real, sin embargo, los desarrolladores deben tener en cuenta algunas limitaciones por defecto en la plataforma de Pi.
En particular, los sistemas Pi no incluyen un reloj de tiempo real (RTC). Además, los núcleos tales como el Cortex-A53 utilizado en la Pi 3 y el CM3 (o el ARM1176 utilizado en la Pi Zero) no incluyen características como temporizadores del sistema SysTick necesarios para los eventos en tiempo real, tales como lecturas de sensor temporizado. Los temporizadores SysTick son características importantes de los núcleos, tales como la serie Cortex-M ARM, que están diseñados específicamente para aplicaciones deterministas en tiempo real.
Los ingenieros pueden compensar fácilmente este déficit mediante una precisión de reloj en tiempo real IC como el Maxim Integrated DS3231. Con una precisión ±2ppm sobre el rango de temperatura de los consumidores, el CI RTC DS3231 genera una salida de onda cuadrada, que se puede utilizar para conducir temporizadores del sistema de software. Además, proporciona una sencilla interfaz I2C para lectura de ciclos de reloj en tiempo real. Los desarrolladores pueden integrar los datos de reloj en tiempo real en sus aplicaciones en tiempo real utilizando rutinas de C en función del kit de herramientas I2C mencionado anteriormente.
Otra limitación en el uso de un sistema Pi estándar para aplicaciones en tiempo real radica en el propio sistema operativo. Destinado para aplicaciones de uso general, las distribuciones de Linux típicos carecen de la respuesta determinista requerida para monitorear y controlar de manera fiable los procesos en tiempo real. De hecho, en el modo de funcionamiento por defecto de Linux, incluso un hilo de muy alta prioridad puede fallar al anticiparse al núcleo. Como consecuencia, si una rutina de alta prioridad trata de leer los sensores, motores de control, y similares, la rutina "en tiempo real" podría tener que esperar una cantidad indeterminada de tiempo.
Afortunadamente, el núcleo de Linux incluye una opción de configuración, denominada CONFIG_PREEMPT, que aborda esta limitación. Esta opción permite que las rutinas de alta prioridad se anticipen al núcleo, excepto en circunstancias especiales, tales como cuando el núcleo está ejecutando hilos del núcleo en spinlock (bloqueado a la espera de un recurso). En la práctica, lo que garantiza que el núcleo se pueda anticipar implica pasos adicionales más allá de la modificación de este elemento de configuración. La comunidad de código abierto ha formalizado el proceso de convertir Linux en un núcleo totalmente preventivo con el lanzamiento del conjunto de parches CONFIG_PREEMPT_RT. Simple, si no es sencillo, este procedimiento de parche se ha vuelto relativamente una rutinaria gracias a procedimientos bien documentados proporcionados por los miembros de la comunidad de la Fundación Raspberry Pi y Pi.
Conclusión
A pesar del reciente interés en la placa de Raspberry Pi Zero, que ha demostrado ser difícil de conseguir, la Raspberry Pi 3 y el CM3 ofrecen a los ingenieros una plataforma más atractiva para crear sistemas de alto rendimiento. La Pi 3 y el CM3 disponen cada uno de un procesador de cuatro núcleos y el doble de la RAM disponible en la placa en la Pi Zero de un solo núcleo.
Por su parte, la Pi 3 proporciona una más potente base de cálculo para aprovechar la amplia gama de placas adicionales disponibles desarrolladas para ajustarse a la interfaz GPIO de la Pi estándar de 40 pines. Con el CM3, los desarrolladores encuentran una base de cálculo que coincide tanto con el tamaño pequeño de Pi Zero, así como las ventajas del rendimiento de Pi 3. El uso de estas últimas placas Pi, hardware adicionales y bibliotecas de software fácilmente disponibles, los desarrolladores pueden implementar rápidamente sistemas personalizados capaces de satisfacer las diversas necesidades de la aplicación.
Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de DigiKey o de las políticas oficiales de DigiKey.




