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

32

Soy estudiante de ciencias de la computación 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 manera de comenzar.

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 a través de mi Arduino / Pi.

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

Como principiante, me encontraré con muchas preguntas, por lo que una comunidad grande y útil (que escucho que Pi tiene) 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 el Pi y me permite trabajar más cerca del metal con mayor facilidad.

  2. Hay valor en profundizar: podría estudiar AVR o microcontroladores mbed más adelante para aprender más sobre los detalles de bajo nivel de la informática.

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

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

  5. Además, he encontrado este libro que debería ayudarme a aprender más sobre ingeniería eléctrica mientras experimento 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 u obtener inspiración aquí o aquí .

Gracias a todos por sus respuestas o comentarios.

Matthias Braun
fuente
2
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 secundarias enchufables). El Pi tiene una mejor relación calidad-precio, pero creo que tiene menos interacciones de bajo nivel (conteo 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.
RedGrittyBrick

Respuestas:

35

Si realmente quiere "comprender cómo funcionan las computadoras en el nivel bajo", entonces podría argumentarse 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 con el fin de facilitar que las personas que no se preocupan por esos detalles logren sus objetivos de nivel superior 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 muchas de mis primeras codificaciones 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ías ir a la vieja escuela y mirar el M68K o incluso el Z80.

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

Si desea comenzar con el primero y luego cambiar más al segundo 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.

Realizo 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 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.

Dave Tweed
fuente
Gracias, me gustaría comenzar con la creación de aplicaciones integradas y tal vez luego estudiar los procesadores.
Matthias Braun
1
Puede programar un Pi bare metal sin ningún problema, no necesita conocer ninguna infraestructura. Simplemente ignore el video, el audio y las redes, y tiene un chip ARM rápido con mucha RAM, que se carga desde la tarjeta SD. Alternativamente, coloque un gestor de arranque en la tarjeta SD y descargue su aplicación a la RAM utilizando un puerto serie.
Wouter van Ooijen
2
Para el desarrollo de metal desnudo quemado y bloqueado, el Arduino con el cargador de arranque listo para usar y los requisitos de inicio drásticamente más simples serán mucho más sencillos de comenzar (es decir, tratarlo como una placa de desarrollo ATMEGA)
Chris Stratton
13

Un Arduino se puede usar con el Arduino SDE, que proporciona cierta funcionalidad de forma 'oculta', pero también se puede usar con ensamblador simple, C o C ++ (y probablemente con muchos otros lenguajes, pero parece que son menos común). Hay una gran 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 es 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, incluyendo 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 agregar WiFi será difícil. AFAIK aún no hay tantas extensiones de hardware (con las bibliotecas de software que lo acompañan) para RaPi como las hay para Arduino, pero mi intuición es que esto podría cambiar.

En general, diría que tampoco puedes equivocarte, pero si realmente quieres WiFi, recomendaría RaPi con Linux.

Wouter van Ooijen
fuente
1
Un punto negativo de Raspberry Pi es la falta de documentación oficial. En su mayoría son cosas de Broadcom patentadas de alto secreto que los simples mortales no pueden tocar. Si se necesita la velocidad ARM, hay otras plataformas que tienen una documentación mucho mejor para el trabajo de metal desnudo que son baratas y más 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 de ARM baratos de Texas Instruments, STmicro o Freescale.
AndrejaKo
3
AFAIK la falta de documentación está en video y tal vez las partes de audio (pero leí que los controladores para esas partes ahora son de código abierto, por lo que hay al menos alguna forma de documentación si desea usar esas partes). Si solo pretende esas partes no están allí, te quedan una gran cantidad de energía (RAM y 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 de nivel de píxeles, está ahí.
Wouter van Ooijen
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.
Chris Stratton
1
No tuve problemas para usar los GPIO con la documentación disponible. ¿Encontró algún problema?
Wouter van Ooijen
4

En mi opinión, todo se reduce a esto: ¿desea programar en un sistema operativo o en el hardware en sí mismo (como hacer su propio sistema operativo)?

Con un RaspberryPi estarás usando Debian Linux. Eso está bien y Linux es realmente útil. Si aprende eso, podría crecer en otras PC, servidores, etc. Probablemente estará programando en Python nuevamente si está familiarizado con él porque es agradable y fácil de hacer en Pi.

Si, por otro lado, desea ver cómo es programar algo realmente pequeño, barato y de bajo consumo, pruebe el Arduino. Todo su código se ejecuta en ese pequeño chip, incluso puede eliminarlo de la placa (si es DIP) y ponerlo en una placa de prueba y ver por sí mismo cuán 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 lenguaje / IDE de Arduino es bueno para comenzar, pero luego será muy útil conocer C / C ++. Si realmente se mete en eso en ese momento, podría usar sus habilidades C fácilmente en otros micro como chips ARM Cortex M o MSP430 de TI para una potencia realmente baja.

Te sugiero que vayas hacia Arduino si te interesa más aprender EE y lenguajes integrados, principalmente por lo fácil que es hacer tus propios circuitos para la parte EE. No puedes quitar fácilmente el chip de Raspberry Pi a tu propia placa o meterte mucho con el hardware; También es más o menos un sistema Linux. Simplemente haga girar una VM en ese punto y aprenda Linux allí.

nemik
fuente
3

Lo apropiado realmente depende de los detalles de la tarea.

Si necesita wifi, es probable que encuentre una Raspberry Pi como 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 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 muy ajustado.

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 potencia, sobresale el soporte de la tarjeta SD y la documentación retenida de lo que sería ideal como un bloque de construcción incorporado, y el Arduino tiene pocos recursos a bordo por su precio. Dicho esto, no hay muchas alternativas ampliamente populares que sean superiores, aunque hay una larga historia de pirateo de E / S digitales en enrutadores wifi basados ​​en Linux, y algunas de ellas ahora son competitivamente baratas / compactas.

Chris Stratton
fuente
3

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

Una vez que esté al día y cómodo con las interrupciones, los tiempos y la información de lectura (tanto analógica como digital), pase a un PIC simple. Me gusta el 16F886, esto le dará una idea mucho mejor de lo que realmente está sucediendo en el nivel de registro. Use el compilador Hi-Tech C como punto de partida, no hay necesidad de 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 y los retrasos de tiempo.

Desde allí, puede volver a un procesador más grande como mbed o arduino sabiendo que tiene una mejor idea de lo que está sucediendo dentro.

SimonBarker
fuente
2

Comencé con Arduino y cuando entendí cómo funciona, me mudé a Pic y podríamos decir que tuvo éxito. 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 cierto nivel, pases a un microcontrolador.

Manuel Joaquín
fuente
2
No vi el tiempo publicado, solo se me apareció en los temas sugeridos y solo quería ayudar.
Manuel Joaquín