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.
fuente
Depende de lo que intentes hacer.
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.
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.
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:
Si ninguno de esos es importante, usar Raspberry Pi definitivamente tiene más sentido.
fuente
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.
fuente
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 ...
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.
fuente
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.
fuente
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
far
ynear
para 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.
...
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.
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.
fuente