¿Hay un gran salto entre la creación de prototipos en un Pi y el uso de un microcontrolador?

25

Esta pregunta pregunta, entre otras cosas, si existe una gran curva de aprendizaje entre el uso de Python en una Raspberry Pi para crear un prototipo de punto final y el uso de un microcontrolador.

Claramente, hay una gran mejora en el consumo de energía (a costa de un rendimiento reducido del procesador), por lo que hay buenas razones para adoptar el enfoque MCU para un producto que necesita ser alimentado por batería.

Una de las razones potenciales para quedarse con una computadora de placa única que ejecuta Linux es que no hay un nuevo software para aprender (por encima de Python o similar), suponiendo que la aplicación se pueda escribir en un lenguaje de alto nivel (donde debería haber un montón de estándares bibliotecas).

En una plataforma de desarrollo integrada, las opciones probables son C ++ (mbed o arduino) o micropython. Mi impresión es que estos no son significativamente diferentes o más complejos que escribir código para ejecutar bajo Linux, aunque las plataformas tienen ventajas individuales. ¿Me he perdido algo que sea relevante para un desarrollador de software?

Específicamente, estoy preguntando sobre los puntos finales de IoT, por lo que no es esencial tener todos los recursos de un sistema Linux para las aplicaciones que me interesan aquí. También vale la pena enfatizar que las consideraciones de potencia y latencia hacen que la implementación de MCU sea un requisito difícil en este tipo de aplicación.

Sean Houlihane
fuente

Respuestas:

12

Agregando a la respuesta integral de George y al punto 2) soporte de hardware. Incluso si el hardware deseado (por ejemplo, ethernet, WiFi, tarjeta SD) se agrega al microcontrolador / Arduino a través de escudos o placas de extensión similares, las bibliotecas para operarlos están ejerciendo una gran presión sobre la memoria pequeña (es decir, ATMEGA328 (un controlador Arduino típico) tiene 32Kb de FLASH y 2Kb de RAM). Especialmente cuando se combinan múltiples funciones (redes, pantalla, tarjeta SD), esto puede ser una limitación severa.

Algunos ejemplos del mundo Arduino:

Admite una tarjeta SD y un sistema de archivos simple (FAT):

  • Tarjetas SD (se desconoce el tamaño del código pero es probable que no sea un problema tan grande si se usa SPI de hardware), al menos 512 bytes de búfer de RAM
  • Petit FAT FS requiere ~ 2..4 kB FLASH y ~ 44 bytes de RAM

Usando una pantalla de matriz:

Ethernet con pila de protocolo TCP / IP:

  • uIP : requisitos de RAM en el rango de un tamaño de paquete típico (> 1 kB), sin embargo, los controladores Ethernet de un solo chip generalmente vienen con un búfer en el chip que puede contener algunas tramas Ethernet de tamaño máximo.

    Es posible ejecutar la implementación de uIP con tan solo 200 bytes de RAM, pero dicha configuración proporcionará un rendimiento extremadamente bajo y solo permitirá un pequeño número de conexiones simultáneas. ( Fuente )

  • Pila de IP con protocolos TCP y UDP para Arduino : mínimo de 128 kB de memoria externa

  • Interfaz IP sobre serie: SerialIP ~ 9 kB FLASH y "suficiente" RAM

En general, la programación con esas limitaciones requiere un enfoque bastante diferente y requiere una optimización con respecto al espacio del programa y el tamaño del código (FLASH), los datos de tiempo de ejecución (RAM) y la velocidad de ejecución. Esta respuesta se ha desarrollado muy bien.

Como la pregunta se refiere específicamente a la plataforma mbed, por supuesto, es digno de mención que incluye las características más relevantes para IoT, a saber, conectividad junto con cifrado, autenticación y autorización. Supuestamente ofrece soporte de hardware de Bluetooth Low Energy e IPv6 a través de una red de área personal inalámbrica de baja potencia. Aunque estas características de conectividad solo están disponibles en las placas de desarrollo enumeradas con típicamente> = 128 kB FLASH y> = 16 kB RAM. Las placas de desarrollo más pequeñas, por otro lado, incluyen sistemas con microcontroladores tan pequeños como el ARM Cortex-M0 + Core con 16KB Flash, 4KB RAM (es decir, no mucho más que Arduinos de tamaño mediano) sin conectividad dedicada.

Ghanima
fuente
Las limitaciones de recursos fueron la mayor brecha en mis suposiciones: es fácil olvidar que la mayoría de las personas se desarrollan sin estos problemas la mayor parte del tiempo.
Sean Houlihane
20

Depende de lo que intentes hacer.

  1. La mayor brecha es que un microcontrolador que mencionó (como Arduino) no ejecuta un sistema operativo multitarea como Linux. Esto significa que si su aplicación depende de tareas múltiples o subprocesos múltiples, esto puede ser mucho más difícil o incluso imposible de ejecutar en Arduino.

  2. La segunda brecha es el soporte de hardware. Por ejemplo, Raspberry Pi admite cámaras, audio USB, ethernet y WiFi listos para usar. Arduino no admite nada de eso, y aunque puede usar varios escudos (como USB Host, Ethernet o WiFi), usarlos no es tan sencillo como usar redes en Raspberry Pi.

  3. La tercera brecha son los recursos disponibles. La mayoría de los microcontroladores ni siquiera se acercan a los recursos que ofrece Raspberry Pi. Por ejemplo, incluso la primera Raspberry Pi ofreció una CPU que funciona a 700MHz con 256Mb de RAM y podría usarse con 32Gb de almacenamiento. Un Arduino Uno típico basado en ATMEGA328 funciona a 16MHz y tiene 32Kb de almacenamiento y 2Kb de RAM.

Por lo tanto, usar Raspberry Pi es definitivamente mucho más fácil para los desarrolladores que vienen de PC. Las principales ventajas de usar microcontroladores son:

  • costos (un clon chino de Arduino Nano cuesta menos de $ 2 por pieza con envío)
  • consumo de energía (los microcontroladores podrían optimizarse realmente bien para un bajo consumo de energía, importante si tiene que funcionar con baterías);
  • disponibilidad en tiempo real, es decir, capacidad de reaccionar ante el cambio de señal en tiempo real;
  • tamaño (Arduino Mini es dos veces más estrecho que Raspberry Pi Zero, y si no necesita tantos pines, el tamaño ATTINY85 es menos de un centavo, y funciona sin un cristal).

Si ninguno de esos es importante, usar Raspberry Pi definitivamente tiene más sentido.

George Y.
fuente
3
La energía de la batería, y ningún gran requisito de recursos son los controladores para usar un mcu, por lo que supongo que un procesador de 10-100 MHz es suficiente. Punto válido sobre el uso de periféricos, aunque SPI es probablemente el equivalente mcu de USB.
Sean Houlihane
2
Solo tener un autobús no es suficiente. Considere usar WiFi en Linux, su aplicación no necesita ningún conocimiento específico al respecto, el mismo código que funciona con Ethernet funcionará con la interfaz WiFi. Este no es el caso con los microcontroladores, tendrías que usar diferentes bibliotecas, aprender a usarlos y cambiar el código.
George Y.
1
OK, no me di cuenta de que usar una biblioteca diferente sería una gran barrera.
Sean Houlihane
2
Si no necesita muchos alfileres, puede obtener un ATtiny4 del tamaño de un grano de arroz: P
Nick T
1
aparentemente no es mucho más pequeño que Attiny85 :) pero tienes razón, si pensamos que no es DIP, incluso 85 es una punta de los dedos.
George Y.
9

SÍ, es un gran salto de la programación en Python a la programación usando las herramientas de lenguaje típicas basadas en C en el microcontrolador. De hecho, en muchos casos puede que necesite escribir parte, si no toda, de su aplicación en lenguaje ensamblador.

Como ya se señaló en las otras respuestas, los microcontroladores tienen muchos recursos limitados y, por lo tanto, pierde todas las comodidades de un sistema operativo Linux y todas las herramientas que puede ejecutar localmente. La iteración con Arduino IDE es muy lenta en comparación con la ejecución de scripts locales.

Aunque tengo una gran experiencia profesional con microcontroladores y microprocesadores, prefiero ejecutar mis proyectos personales utilizando hardware RPi con algunos Arduinos para cosas críticas en tiempo real. También he incursionado con Beagle Bone Black y de alguna manera es más conveniente que usar un RPi con uno o más Arduinos.

CyberFonic
fuente
9

Sí, gran diferencia

La diferencia es como el día y la noche, tanto en lo que respecta al hardware como al software. No hay comparación válida en absoluto.

Cuando usar cual

Usa un Arduino, si ...

  • Las limitaciones de espacio hacen que un Pi no sea factible.
  • El uso de energía de un Pi sería demasiado.
  • El dinero es un problema (especialmente si necesita varios o muchos controladores individuales en su proyecto, cada uno de ellos realiza solo una lógica muy simple).
  • Desea obtener nitidez y arenoso y trabajar en un nivel mucho más bajo por diversión o para adquirir conocimiento.
  • Necesita extrema simplicidad y / o un comportamiento en tiempo real 100% definido y cero posibilidades de que algo fuera de su control mate su programa.
  • No necesita ethernet, una difícil funcionalidad de host USB (es decir, acceder a discos duros; usarlo en el lado del cliente, por ejemplo, como dispositivo HID, está bien), etc. La mayoría de estos se pueden instalar en un Arduino (muy lentamente), pero a un alto costo en términos de RAM / EPROM y también de funcionalidad. Como no hay multitarea preventiva, las tareas de desbloqueo se vuelven bastante complicadas muy rápidamente.
  • Está de acuerdo con el simplista IDE de desarrollo de Arduino, o con cavar mucho más profundo (es decir, construir los programas usted mismo) y, si no va a utilizar un dispositivo de carga USB como el Pro Micro, un kit de desarrollo comprado o hecho a sí mismo /quemador.

En todos los demás casos, un Pi es mucho más fácil de usar. El Pi es simplemente otra computadora (lenta).

No me malinterpretes. Soy dueño de un Pi y lo uso para varios servicios de Linux en mi red. También programo frecuentemente Arduinos (Pro Micros principalmente). Ambos son geniales, me gustan igual, pero tienen escenarios de uso muy diferentes.

En su pregunta sobre la dificultad, es relativa. La única vez que el Arduino se puso difícil para mí fue difícil de depurar problemas de sincronización, especialmente si se combina con componentes electrónicos cuestionables (es decir, interferencia EM, cables demasiado largos, etc.). Si es firme en el idioma de su elección (es decir, C para el IDE de Arduino), entonces debería poder hackear cualquier biblioteca que esté empleando. Aún así, siempre será más complejo que un Pi, donde, por ejemplo, puede usar un lenguaje de scripting de su elección para cosas que no son críticas para el tiempo; siempre serán más fáciles de desarrollar y depurar.

AnoE
fuente
No estoy preguntando cuál es la mejor plataforma de desarrollo: mi caso de uso requiere un mcu, principalmente debido a limitaciones de energía. Sin embargo, veo que la pregunta no era muy clara en este punto.
Sean Houlihane
Muy bien, entonces la primera parte de la respuesta sería suficiente. Dejaré que el resto permanezca como "apéndice" si lo desea.
Año
7

Creo que hay algunos puntos que aún no se han especificado explícitamente.

El entorno de desarrollo es completamente diferente. En realidad, puede desarrollar el software Pi en el Pi; incluso puede usar una GUI si lo desea. Hay herramientas avanzadas de depuración integradas, así como una gran cantidad de lo que está disponible para cualquier sistema informático.

Los controladores tendrán que ser desarrollados / emulados en una computadora separada y luego enviados al controlador para la prueba final.

El Pi puede ejecutar prácticamente cualquier lenguaje con el que desee programarlo, los microcontroladores generalmente tienen uno o dos.

El Pi puede ejecutar bastantes sistemas operativos (incluyendo Windows IoT y un montón de sistemas especializados), los controladores integrados tienden a no ejecutar un "Sistema Operativo" en absoluto.

También en lo que respecta al tiempo de ejecución / sistema operativo, el Pi tarda unos segundos en iniciarse, si realmente desea hacer algo en esos primeros segundos, el pi no funcionará para usted. Además, a menos que haya tomado algunas medidas extremas para evitar cualquier tipo de escritura en el almacenamiento, no debería simplemente quitar la energía, sino que debe ejecutar un "Apagado" y esperar un poco. Esto también puede limitar algunos usos.

Otro punto posterior a la implementación que no he visto mencionado. No estoy seguro de cómo estaría absolutamente seguro de haber asegurado correctamente un Pi, de que ninguna agencia ha colocado un pequeño fragmento de código en algún lugar que permita el acceso no autorizado en determinadas circunstancias, sin eliminarlo de todas las redes y deshabilitar todos los mecanismos de acceso inalámbrico . Los microcontroladores son bastante fáciles de proteger, ya que está escribiendo casi todo el código que se ejecuta en la cosa.

Por supuesto, siempre puede desarrollar su propia imagen de Pi sin un sistema operativo real y hacerse cargo de toda la placa / CPU, lo que lo convertiría en un microcontrolador caro / hella-potente con todas las ventajas / desventajas asociadas. Probablemente alguien ya haya hecho esto, pero no he buscado algo así últimamente.

Bill K
fuente
Escribe tu último párrafo, sí, eso se llama metal desnudo y pocas personas lo hacen, pero técnicamente es posible ... ¡bienvenido al sitio!
Ghanima
3

La diferencia entre desarrollar una aplicación con un Pi puede ser muy diferente o algo similar al desarrollo de una aplicación con un microcontrolador debido a las diferencias de hardware y las diferencias de la cadena de herramientas de desarrollo de software.

Hay una amplia gama de microcontroladores disponibles que van desde procesadores de 8 bits a 64 bits y tienen desde unos pocos K de RAM hasta unos pocos gigabytes de RAM. Los microcontroladores más capaces proporcionan una experiencia más similar a Pi. Los microcontroladores menos capaces no lo hacen.

E incluso con Pi hay grandes diferencias entre el desarrollo para el sistema operativo Windows 10 IoT y el desarrollo para Raspian, Mate u otro sistema operativo basado en Linux. Windows 10 IoT requiere una PC de desarrollo que use una cadena de herramientas de Visual Studio con depurador remoto dirigido al entorno del Programa Universal de Windows (UWP). El desarrollo para Raspian o Mate en realidad se puede hacer en un Pi con las herramientas disponibles en el Pi.

El Protocolo de aplicación restringida se utiliza para dispositivos pequeños y restringidos que se utilizan con el entorno de Internet de las cosas. Para tener una idea de la variedad de hardware y software de microcontroladores, esta página sobre la implementación del protocolo CoAP proporciona una idea del entorno al que se dirige. Menciona el sistema operativo Contiki del que he oído hablar vagamente junto con sistemas operativos más conocidos como iOS, OSX y Android. Los lenguajes de programación mencionados son Java, JavaScript, C, C #, Ruby, Go, Erlang, Rust y Python.

La cadena de herramientas utilizada para el desarrollo con microcontrolador varía según el fabricante y los tipos de recursos disponibles de las comunidades de desarrollo y las iniciativas de código abierto. En algunos casos obtienes un ensamblador cruzado, en otros casos obtienes un compilador cruzado C, y en otros casos obtienes una buena cadena de herramientas con todas las campanas y silbatos y emuladores y similares a la cadena de herramientas de Visual Studio para Windows 10 IoT.

El entorno de desarrollo real para un microcontrolador puede implicar el uso de un programador EEPROM y las herramientas de software para crear una nueva imagen y llevarla al dispositivo o el dispositivo puede tener la conectividad necesaria para permitir que una nueva imagen se descargue a través de una conexión en serie o más Una conexión de red.

Mi impresión es que la mayoría de los microcontroladores tienen un compilador cruzado C, aunque el compilador solo puede admitir estándares más antiguos como K&R o tal vez C98. Los compiladores cruzados de C a menudo tienen palabras clave no estándar para funciones específicas de microprocesador, por ejemplo, las palabras clave fary nearpara punteros con los antiguos procesadores 8080 y 8086 con su memoria segmentada.

También hay lenguajes especializados que se dirigen a microcontroladores como el lenguaje de programación FORTH . Estos idiomas a menudo tienen un diseño de tiempo de ejecución que apunta al metal desnudo para que no haya otro sistema operativo que no sea el tiempo de ejecución del idioma.

El sistema operativo puede variar desde prácticamente inexistente hasta un Linux básico hasta un sistema operativo especializado como freeRTOS o Windows Embedded o un Linux o Microsoft Windows completo. Vea este proyecto de SourceForge MINIBIAN para Raspberry Pi . Vea también este libro electrónico, Baking Pi: Desarrollo de sistemas operativos que describe el desarrollo de un sistema operativo rudimentario para Raspberry Pi en ensamblador.

Este artículo de Visual Studio Magazine, Programming the Internet of Things with Visual Studio , proporciona una descripción general de los diferentes dispositivos disponibles, seguido de una descripción general del uso del IDE de Visual Studio para el desarrollo de Linux y Windows.

Hay un enorme y creciente universo de dispositivos de microcontroladores programables y conectables en red disponibles ahora. A un nivel muy bajo, tiene una variedad de dispositivos simples de 16 y 32 bits de una variedad de fabricantes de chips tradicionales como Texas Instruments. (Jugué un poco con el kit de desarrollo SensorTag y es muy divertido, lo que me hace pensar que Watch DevPack también podría ser un gran conjunto de herramientas de aprendizaje).

Algunos dispositivos de microcontroladores más conocidos incluyen Arduino, BeagleBoard y Raspberry Pi. Todos estos entornos tienen un amplio soporte comunitario y están listos para conectarse a una gran cantidad de sensores externos, motores, servos y cualquier otra cosa que pueda imaginar. Adafruit, el supermercado de aprendizaje de electrónica fundado por Limor "Ladyada" Fried, proporciona todo tipo de periféricos para estas placas, junto con su propia línea de placas de desarrollo ligeras Feather.

...

El universo más interesante de dispositivos para desarrolladores familiarizados con Microsoft .NET Framework y Visual Studio pueden ser entornos compatibles con Windows 10 IoT Core. Estos son dispositivos x86 y ARM que admiten aplicaciones de la Plataforma universal de Windows (UWP) escritas en una variedad de lenguajes, incluidos C #, Visual Basic, Python y Node.js / JavaScript. Windows 10 IoT core es compatible con dispositivos que incluyen Raspberry Pi, Arrow DragonBoard 410C, Intel Joule y Compute Stick y MinnowBoard. También hay plataformas de productos interesantes, como el Askey TurboMate E1 ponible.

Un ejemplo específico de una aplicación de microcontrolador

Esta es una imagen de una placa de microcontrolador de una cafetera automática. Este parece ser un componente estándar para cafeteras automáticas fabricadas en China. El sitio web del fabricante está impreso en la PCB.

La imagen se compone de dos vistas. La vista de la izquierda es la parte posterior de la placa que contiene el microcontrolador y los circuitos de soporte. La vista de la derecha es la parte frontal del tablero con la pantalla LCD y un conjunto de botones que se utilizan para configurar la hora actual y realizar acciones como programar una hora de inicio, etc.

La vista de la derecha se ajusta a un transportista que luego se ajusta a una abertura en la parte delantera de la cafetera. Los interruptores en la PCB inferior se accionan con interruptores basculantes. La pantalla LCD, que parece tener un propósito especial, se usa para mostrar la hora y el estado actuales, así como para mostrar la interfaz de usuario al cambiar la configuración de la cafetera. El LED rojo se usa para indicar cuándo la cafetera está realmente haciendo café y para indicar cuándo se hace apagando la iluminación.

ingrese la descripción de la imagen aquí

El microcontrolador es un ELAN Microelectronics Corp EM78P447NAM (hoja de datos) que es un microcontrolador de 8 bits. Algunas de las estadísticas básicas muestran que este es un dispositivo pequeño y mínimo, sin embargo, funciona muy bien para su propósito previsto. La intención es desarrollar software que luego se descarga en la ROM de escritura una vez como parte de la fabricación.

• Bajo consumo de energía:

* Less then 2.2 mA at 5V/4MHz

* Typically 35 µA, at 3V/32KHz

* Typically 2 µA, during sleep mode

• 4K × 13 bits en chip ROM

• Tres bits de protección para evitar la intrusión de códigos de memoria OTP

• Un registro de configuración para acomodar los requisitos del usuario

• 148 × 8 bits en registros de chip (SRAM, registro de propósito general)

Richard Chambers
fuente
2
No creo que esto aborde la pregunta. Claro, algunos productos no están bien empaquetados, pero eso también vale para un SBC.
Sean Houlihane
1
@SeanHoulihane, lo que he intentado hacer con esta respuesta es proporcionar un punto de vista del microcontrolador sobre la pregunta, específicamente que hay una amplia gama de dispositivos que cumplen con la etiqueta del microcontrolador. Hay más en el panorama del sistema operativo que Linux y hay más en el lenguaje de programación que python o C.
Richard Chambers
1
Para mí, solo estás diciendo que el mundo MCU es un desastre. Lo que siento es engañoso.
Sean Houlihane
1
@SeanHoulihane Lamento que tu impresión de mi publicación sea que el mundo MCU es un desastre. Otra interpretación es que el mundo MCU es una de las muchas alternativas y oportunidades maravillosas, sin embargo, el lector aporta sus propios prejuicios y prejuicios a cualquier narrativa.
Richard Chambers