33 votos

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

Soy estudiante de informática y tengo ganas de ampliar mis conocimientos sobre programación embebida e ingeniería eléctrica.

He leído aquí que utilizar herramientas como el microcontrolador Arduino es una buena manera 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 sobre mi Arduino/Pi.

Por lo que he leído tanto la Pi como el Arduino están pensados para estudiantes pero no consigo averiguar cuál es más adecuado para alguien como yo que quiere entender cómo funcionan los ordenadores a bajo nivel.

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

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

Gracias de antemano.

Editar:

De sus muchas y magníficas respuestas y también de estas vale la pena artículos Llegué a lo siguiente

Conclusiones

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

  2. Hay valor en profundizar: Podría estudiar AVR o mbed microcontroladores en un momento posterior para aprender más sobre los detalles de bajo nivel de la computación.

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

  4. Yo también encontrado proyectos que utilizan una Pi para controlar un Arduino. Esto me parece intrigante, ya que ambos dispositivos son bastante asequibles y me gusta utilizar la potencia de Linux que se puede ejecutar en la Pi.

  5. Además, he encontrado este libro que me ayude a aprender más sobre ingeniería eléctrica mientras experimento con Arduino.

  6. Parece difícil hacer mi proyecto de la bombilla con el Arduino. Pero no pasa nada. Seguro que se me ocurren otros proyectos motivadores o consigo inspiración aquí o aquí .

Gracias a todos por sus respuestas.

37voto

GSerg Puntos 33571

Si realmente quieres "entender cómo funcionan los ordenadores a bajo nivel", 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 para facilitar a las personas que no se preocupan por esos detalles para lograr sus objetivos de alto nivel creando aplicaciones integradas.

En su lugar, yo 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, yo hice muchos de mis primeros códigos en un minicomputador PDP-11, que tiene (bueno, tenía) una arquitectura de 16 bits muy limpia. Me han dicho que la familia TI MSP430 es muy similar. En cuanto a las familias modernas de 8 bits, se podría argumentar que el AVR es un poco más limpio que el PIC. O podrías ir a la vieja escuela y mirar el M68K o incluso el Z80.

Así que, en realidad, depende de cuáles sean tus objetivos: ¿Quieres crear aplicaciones integradas o quieres estudiar los propios procesadores?

Si quieres empezar con lo primero y luego pasar más a lo segundo, tal vez deberías empezar con Arduino ahora, y luego migrar a la programación del procesador AVR subyacente a un nivel más bajo.

Hago esta recomendación en parte por la sencillez de la aplicación que has sugerido, y en parte por la ruta de migración. Es mucho más difícil migrar a la programación de bajo nivel en el Pi. Se basa en un complejo SoC que requiere un poco de "infraestructura" de software sólo para ponerlo en marcha. Con el AVR, se puede programar fácilmente hasta el "metal desnudo" si se quiere.

13voto

GetFree Puntos 495

Un Arduino se puede utilizar con el SDE de Arduino, que proporciona algunas funcionalidades de forma "oculta", pero también se puede utilizar con ensamblador simple, C o C++ (y probablemente con un montón de otros lenguajes, pero esos parecen ser menos comunes). Hay una gran variedad de placas adicionales disponibles llamadas escudos, en la mayoría de los casos con software de apoyo que se integra con el SDE de Arduino. Combinar varios shields puede ser complicado. Ethernet es posible, pero eso es estirar las capacidades. La pila de host USB está AFAIK más allá de sus capacidades.

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

La Raspberry Pi está diseñada para ser un ordenador de placa única que ejecuta un Linux a escala. 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 añadir un dongle WiFi USB. El PCB de la Pi tiene un conector IO en el que están disponibles algunos pines, y puedes acceder a esos pines desde tu aplicación Linux, pero se siente un poco torpe.

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

En general diría que no te puedes equivocar con ninguno de los dos, pero si realmente quieres WiFi te recomendaría RaPi con Linux.

4voto

Kris Puntos 172

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 vas a usar prácticamente Debian Linux. Eso está bien y Linux es realmente útil. Si aprendes eso, podrías crecer en otros PC's, servidores, etc. Probablemente volverás a programar en Python si estás familiarizado con él porque es agradable y fácil de hacer en la Pi.

Si por el contrario quieres ver lo que es programar algo realmente pequeño, barato y de bajo consumo, prueba con el Arduino. Todo tu código se ejecuta en ese pequeño chip, incluso puedes quitarlo de la placa (si es una DIP) y ponerlo en una protoboard y ver por ti mismo lo poco que necesitas para hacer funcionar un pequeño ordenador básico. Eso fue bastante sorprendente para mí al menos. Todo lo que escribas se ejecutará en ese mismo chip, por lo que todo su "sistema operativo" será tu pequeño bucle de ejecución. El IDE/lenguaje de Arduino es bueno para empezar, pero más tarde, llegar a C/C++ será bastante útil para saber. Si realmente te pones a ello en ese momento, podrías utilizar tus conocimientos de C fácilmente en otros microprocesadores como los ARM Cortex M o los MSP430 de TI para un consumo realmente bajo.

Te sugeriría que te decantaras por Arduino si te interesa más aprender EE y lenguajes embebidos, sobre todo por lo fácil que es hacer tus propios circuitos para la parte de EE. No se puede quitar fácilmente el chip de la Raspberry Pi a su propia placa o meterse con el hardware mucho; también es más o menos un sistema Linux. Sólo tienes que girar una VM en ese punto y aprender Linux allí.

3voto

Ron Skufca Puntos 941

Yo recomendaría el procesador mbed. Tiene un buen equilibrio de la abstracción de alto nivel (para empezar) en C ++ y luego se puede bajar a C y empezar a trabajar con en un nivel inferior.

Una vez que estés al día y te sientas cómodo con las interrupciones, los tiempos y la lectura de información (tanto analógica como digital), entonces pasa a un PIC simple. Me gusta el 16F886, esto le dará una idea mucho mejor de lo que realmente está pasando en el nivel de registro. Utiliza el compilador Hi-Tech C como punto de partida, no hay necesidad de pasar a ensamblador a menos que realmente quieras hacerlo.

Con el PIC puedes empezar a preocuparte por el consumo de energía, el tamaño del programa, la memoria y los retrasos de tiempo.

A partir de ahí puedes volver a un procesador más grande como el mbed o el arduino sabiendo que tienes una mejor idea de lo que pasa dentro.

3voto

Andrew Walker Puntos 9038

Lo apropiado depende realmente de los detalles de la tarea.

Si necesitas wifi, es probable que una Raspberry Pi sea una solución más rentable, ya que puedes utilizar un dongle wifi barato.

Sin embargo, la pi tiene cierta complejidad - en el lado del software, aunque tienes algo de experiencia con la configuración de linux, y también en sus limitaciones de alimentación - algunos dongles wifi funcionarán directamente, para otros necesitarás un hub alimentado o soldar bypasses alrededor de los polifusibles.

En el camino de Arduino, a menos que obtengas un adaptador wifi que implemente una pila de red completa y simule un canal serial, vas a terminar usando una gran fracción de tu 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 dos plataformas es realmente ideal para esta tarea - la pi resulta ser un poco más de un juguete con sus limitaciones de energía, montaje de la tarjeta SD que sobresale, y la documentación retenida que sería ideal como un bloque de construcción embebido, y el Arduino tiene pocos recursos a bordo para su precio. Dicho esto, no hay muchas alternativas ampliamente populares que sean superiores, aunque hay una larga historia de hackeo de E/S digitales en routers wifi basados en linux, y algunos de ellos son competitivamente baratos/compactos ahora.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X