Programación integrada para principiantes: ¿Arduino o Raspberry Pi? [cerrado]

Soy estudiante de informática y estoy ansioso por ampliar mis conocimientos sobre programación integrada e ingeniería eléctrica.

He leído aquí que usar herramientas como el microcontrolador Arduino es una buena forma de empezar.

Soy principalmente un programador de Java y Python, pero tengo algo de experiencia en C++. Además he jugado con ArchLinux.

Un pequeño proyecto que me gustaría hacer es controlar algunas bombillas a través de Wi-Fi en mi Arduino/Pi.

Por lo que he leído, tanto Pi como Arduino están destinados a estudiantes, pero no puedo descifrar cuál es más adecuado para alguien como yo que quiere entender cómo funcionan las computadoras en un nivel bajo.

Como principiante, me encontraré con muchas preguntas, por lo que una comunidad grande y útil (que escuché que tiene Pi) es una gran ventaja.

Entonces, ¿cuál es más adecuado para un principiante autodidacta: Arduino o Raspberry Pi?

Gracias por adelantado.

Editar:

De sus muchas excelentes respuestas y también de estos valiosos artículos , llegué a lo siguiente

Conclusiones

  1. Elijo Arduino como punto de entrada a la programación integrada porque es un sistema más simple que Pi y me permite trabajar más cerca del metal con mayor facilidad.

  2. Vale la pena profundizar más: podría estudiar AVR o microcontroladores mbed en un momento posterior para aprender más sobre los detalles de bajo nivel de la informática.

  3. Ambos dispositivos me permiten programar sin sistema operativo, que es lo que quiero (al principio).

  4. También encontré proyectos que usan un Pi para controlar un Arduino. Encuentro esto intrigante ya que ambos dispositivos son bastante asequibles y me gusta usar el poder de Linux que puede ejecutarse en el Pi.

  5. Además, encontré este libro que debería ayudarme a aprender más sobre ingeniería eléctrica mientras experimentaba con Arduino.

  6. Parece difícil hacer mi proyecto de bombilla con el Arduino. Pero eso esta bien. Estoy seguro de que puedo pensar en otros proyectos motivadores o inspirarme aquí o aquí .

Gracias a todos por sus respuestas o comentarios.

El Arduino es más simple. Sugiero que es un mejor punto de partida para un "principiante autodidacta". El Arduino actualmente tiene una comunidad más grande de creadores de complementos, por ejemplo, para "escudos" (placas hijas enchufables). El Pi tiene una mejor relación calidad-precio, pero creo que tiene menos interfaces de bajo nivel (recuento de GPIO, I2C, etc.) que muchas variantes de Arduino. Tengo uno de cada uno, si estás menos interesado en cosas de bajo nivel, usaría el Pi.

Respuestas (6)

Si realmente quiere "comprender cómo funcionan las computadoras en el nivel bajo", entonces se podría argumentar que ni Arduino ni Raspberry Pi son adecuados. Ambas plataformas (su hardware y software) están diseñadas específicamente para ocultar los detalles de bajo nivel a fin de facilitar que las personas que no se preocupan por esos detalles logren sus objetivos de alto nivel mediante la creación de aplicaciones integradas.

En cambio, recomendaría elegir una familia de CPU que tenga una arquitectura de conjunto de instrucciones relativamente "limpia" y aprender a programarla en lenguaje ensamblador. Por ejemplo, hice gran parte de mi codificación inicial en una minicomputadora PDP-11, que tiene (bueno, tenía) una arquitectura de 16 bits muy limpia. Me dijeron que la familia TI MSP430 es muy similar. En las familias modernas de 8 bits, se podría argumentar que AVR es un poco más limpio que PIC. O podría ir a la vieja escuela y mirar el M68K o incluso el Z80.

Entonces, realmente depende de cuáles sean sus objetivos: ¿quiere crear aplicaciones integradas o quiere estudiar los procesadores mismos?

Si desea comenzar con el primero y luego cambiar más al último más tarde, tal vez debería comenzar con Arduino ahora y luego migrar a la programación del procesador AVR subyacente en un nivel inferior más adelante.

Hago esta recomendación en parte debido a la naturaleza simple de la aplicación que sugirió y en parte debido a la ruta de migración. Es mucho más difícil migrar a la programación de bajo nivel en Pi. Se basa en un SoC complejo que requiere bastante "infraestructura" de software solo para que funcione. Con el AVR, puede programar fácilmente hasta el "metal desnudo" si así lo desea.

Gracias, me gustaría comenzar con la creación de aplicaciones integradas y tal vez luego estudiar los procesadores.
Puede programar un Pi bare metal sin ningún problema, sin necesidad de conocer ninguna infraestructura. Simplemente ignore el video, el audio y las redes, y tendrá un chip ARM rápido con mucha RAM, que se carga desde la tarjeta SD. Alternativamente, coloque un cargador de arranque en la tarjeta SD y descargue su aplicación a la RAM usando un puerto serie.
Para el desarrollo bare metal de Burn & Crash, el Arduino con su cargador de arranque listo para usar y requisitos de inicio drásticamente más simples será mucho más fácil de usar (es decir, tratarlo como una placa de desarrollo ATMEGA)

Se puede usar un Arduino con Arduino SDE, que proporciona alguna funcionalidad de forma 'oculta', pero también se puede usar con ensamblador simple, C o C++ (y probablemente con muchos otros lenguajes, pero esos parecen ser menos común). Hay una amplia variedad de placas adicionales disponibles llamadas escudos, en la mayoría de los casos con software de soporte que se integra con Arduino SDE. Combinar múltiples escudos puede ser complicado. Ethernet es posible, pero eso está ampliando las capacidades. La pila de host USB está AFAIK más allá de sus capacidades.

El Arduino original contiene un chip AVR, pero existen alternativas basadas en chips PIC y LPC (ARM).

La Raspberry Pi está diseñada para ser una computadora de placa única que ejecuta un Linux reducido. Como tal, se puede programar en una amplia variedad de lenguajes (desde ensamblador hasta Python, y todo lo demás, incluidos C y C++). Puede ser un host USB, por lo que no debería ser un problema agregar un dongle WiFi USB. El Pi PCB tiene un conector IO en el que hay algunos pines disponibles, y puede acceder a esos pines desde su aplicación Linux, pero se siente un poco torpe.

Aunque no fue diseñado para usarse de esa manera, no hay problema para programar el Raspberry Pi bare metal (= sin ningún sistema operativo). Ahora tiene acceso directo y rápido a los pines IO, pero pierde la capacidad de ejecutar controladores Liunux, por lo que será difícil agregar WiFi. AFAIK, todavía no hay tantas extensiones de hardware (con las bibliotecas de software que lo acompañan) para RaPi como para Arduino, pero mi intuición es que esto podría cambiar.

Considerándolo todo, diría que no puedes equivocarte con ninguno de los dos, pero si realmente quieres WiFi, recomendaría RaPi con Linux.

Un punto negativo de Raspberry Pi es la falta de documentación oficial. Es en su mayoría material ultrasecreto patentado de Broadcom que los simples mortales no pueden tocar. Si se necesita velocidad ARM, existen otras plataformas que tienen una documentación mucho mejor para el trabajo completo que son más económicas y fáciles de obtener en comparación con Raspberry Pi. Por otro lado, Raspberry Pi está mucho más cerca de una "computadora real" que varios kits ARM baratos de Texas Instruments, STmicro o Freescale.
AFAIK, la falta de documentación está en video y tal vez en las partes de audio (pero leí que los controladores para esas partes ahora son de código abierto, por lo que hay al menos algún tipo de documentación si desea usar esas partes). Si solo pretende esas partes no están allí, te quedas con una gran cantidad de explosión (RAM y potencia de CPU) por tu dinero. ¿A quién le importa que haya cosas adicionales que no quiera usar de todos modos en una aplicación típica de microcontrolador? No necesito un motor gráfico completo. Y si necesito una interfaz a nivel de píxel, ahí está.
No es solo el audio y el video, la documentación GPIO del pi es muy escasa en comparación con los dispositivos integrados habituales.
No tuve problemas para usar los GPIO usando la documentación disponible. ¿Encontraste algún problema?

En mi opinión, todo se reduce a esto: ¿quieres programar en un sistema operativo o en el propio hardware (algo así como crear tu propio sistema operativo)?

Con una RaspberryPi, prácticamente vas a usar Debian Linux. Eso está bien y Linux es realmente útil. Si aprende eso, podría crecer en otras PC, servidores, etc. Probablemente programará en Python nuevamente si está familiarizado con él porque es agradable y fácil de hacer en el Pi.

Si por el contrario quieres ver cómo es programar algo realmente pequeño, barato y de bajo consumo, prueba el Arduino. Todo su código se ejecuta en ese pequeño chip allí, incluso podría quitarlo de la placa (si es uno DIP) y ponerlo en una placa de prueba y ver por sí mismo qué poco hardware necesita para que funcione una pequeña computadora básica. Eso fue bastante sorprendente para mí al menos. Todo lo que escriba se ejecutará en ese chip, por lo que todo su "SO" será su pequeño ciclo de ejecución. El IDE/lenguaje de Arduino es bueno para comenzar, pero luego será muy útil conocer C/C++. Si realmente te involucras en ese punto, podrías usar tus habilidades de C fácilmente en otros micros como los chips ARM Cortex M o los MSP430 de TI para una potencia realmente baja.

Le sugiero que vaya hacia Arduino si le interesa más aprender EE y lenguajes integrados, principalmente debido a lo fácil que es hacer sus propios circuitos para la parte EE. No puede quitar fácilmente el chip de Raspberry Pi a su propia placa o meterse mucho con el hardware; También es más o menos un sistema Linux. Simplemente active una VM en ese punto y aprenda Linux allí.

Lo que es apropiado realmente depende de los detalles de la tarea.

Si necesita wifi, probablemente encontrará que una Raspberry Pi es una solución más rentable, ya que puede usar un dongle wifi barato.

Sin embargo, el pi tiene cierta complejidad: en el lado del software, aunque tiene algo de experiencia con la configuración de Linux, y también en sus limitaciones de suministro de energía: algunos dongles wifi funcionarán directamente, para otros necesitará un concentrador alimentado o para soldar derivaciones alrededor de los polifusibles.

En la ruta de Arduino, a menos que obtenga un adaptador wifi que implemente una pila de red completa y simule un canal en serie, terminará usando una gran fracción de su memoria disponible para la implementación de la red; la gente lo hace, pero puede ser un ajuste apretado.

Como cuestión de opinión, ninguna de las plataformas es realmente ideal para esta tarea: el pi resulta ser un poco más un juguete con sus limitaciones de energía, el montaje de la tarjeta SD que sobresale y la documentación retenida de lo que sería ideal como un bloque de construcción integrado. y el Arduino tiene pocos recursos a bordo por su precio. Dicho esto, no hay muchas alternativas muy populares que sean superiores, aunque hay una larga historia de hackeo de E/S digital en enrutadores wifi basados ​​en Linux, y algunos de ellos son competitivamente baratos/compactos ahora.

Recomendaría el procesador mbed. Tiene un buen equilibrio de abstracción de alto nivel (para comenzar) en C++ y luego puede bajar a C y comenzar a trabajar en un nivel más bajo.

Una vez que esté al día y se sienta cómodo con las interrupciones, los tiempos y la información de lectura (tanto analógica como digital), baje a un PIC simple. Me gusta el 16F886, esto le dará una mejor idea de lo que realmente está pasando en el nivel de registro. Use el compilador Hi-Tech C como punto de partida, no es necesario ir al ensamblaje a menos que realmente lo desee.

Con el PIC puede comenzar a preocuparse por el consumo de energía, el tamaño del programa, la memoria, los retrasos en el tiempo.

A partir de ahí, puede volver a un procesador más grande como mbed o arduino sabiendo que tiene una mejor idea de lo que sucede dentro.

Empecé con Arduino y cuando entendí cómo funciona, pasé a Pic y podríamos decir que funcionó. Hice algunos proyectos llamativos con Arduino, y es fácil porque en la web tienes muchos ejemplos de código. Raspberry pi sigue creciendo y no hay tanta ayuda como Arduino. Entonces, en mi opinión, te recomiendo que comiences con Arduino y cuando alcances algún nivel, cambies a un microcontrolador.

No miré el tiempo publicado, solo me apareció en los temas sugeridos y solo quería ayudar.