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

31

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

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

Como principiante, tendré muchas preguntas, por lo que una comunidad grande y útil (que escucho que tiene el Pi) es una gran ventaja.

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

Gracias de antemano.

Editar:

De sus muchas respuestas geniales y también estas worthwile artículos Vine a la 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 mbed microcontroladores en un momento posterior para obtener más información 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 encontrado proyectos que usa una Pi para controlar un Arduino. Me parece intrigante, ya que ambos dispositivos son bastante asequibles y me gusta usar el poder de Linux que se puede ejecutar en la Pi.

  5. Además, he encontrado este libro que debería ayudarme a aprender más sobre ingeniería eléctrica mientras experimentando 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 here .

Gracias a todos por sus respuestas.

    
pregunta Matthias Braun

6 respuestas

35

Si realmente quieres "entender cómo funcionan las computadoras en el nivel bajo", 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 con el fin de facilitar a las personas que no se preocupan por esos detalles para lograr 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, realicé 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 dicen 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 el PIC. O puedes ir a la vieja escuela y mirar el M68K o incluso el Z80.

Por lo tanto, realmente depende de cuáles sean sus objetivos: ¿desea crear aplicaciones integradas o desea estudiar los procesadores en sí?

Si desea comenzar con el primero y luego pasar 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 tarde.

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 el Pi. Se basa en un SoC complejo que requiere un poco de "infraestructura" de software para que funcione. Con el AVR, puede programar fácilmente hasta el "metal" si lo desea.

    
respondido por el Dave Tweed
13

Se puede usar un Arduino con el SDE de Arduino, que proporciona alguna funcionalidad de forma 'oculta', pero también se puede usar con ensamblador plano, C o C ++ (y probablemente con muchos otros idiomas, pero esos parecen ser menos comunes). Existe una amplia variedad de tableros adicionales disponibles, llamados 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 es ampliar 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 PIC y chips LPC (ARM).

La Raspberry Pi está diseñada para ser una computadora de una sola placa que ejecuta un Linux reducido. Como tal, puede programarse en una amplia variedad de idiomas (desde ensamblador hasta Python, y todo lo que se encuentre entre ellos, 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 algunos pines están disponibles, y puedes acceder a esos pines desde tu aplicación de Linux, pero se siente un poco torpe.

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

En general, diría que tampoco te puedes equivocar, pero si realmente quieres WiFi, te recomiendo RaPi con Linux.

    
respondido por el Wouter van Ooijen
4

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

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

Si, por otro lado, quieres ver cómo es programar algo realmente pequeño, barato y de bajo consumo, prueba el Arduino. Todo el código se ejecuta en ese pequeño chip allí, incluso puede quitarlo de la placa (si es un DIP) y ponerlo en una placa de pruebas y ver por sí mismo qué 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 su "OS" completo será su pequeño ciclo de ejecución. Es bueno comenzar con el IDE / idioma de Arduino, pero luego será muy útil saber cómo llegar a C / C ++. Si realmente te involucras en ese punto, podrías usar tus habilidades de C fácilmente en otros micro como los chips ARM Cortex M o MSP430 de TI para obtener una potencia realmente baja.

Le sugiero que se dirija a Arduino si le interesa más aprender EE y los lenguajes integrados, principalmente por lo fácil que es crear sus propios circuitos para la parte EE. No se puede quitar fácilmente el chip de la Raspberry Pi a su propio tablero o desordenar mucho el hardware; También es prácticamente un sistema Linux. Simplemente encienda una máquina virtual en ese momento y aprenda sobre Linux allí.

    
respondido por el nemik
3

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

Si necesitas wifi, es probable que encuentres una Raspberry Pi como una solución más rentable, ya que puedes 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 con sus limitaciones de alimentación, algunos dongles wifi funcionarán directamente, para otros necesitará un concentrador con alimentación o para soldar los bypasses 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 serie, terminará usando una gran parte de la memoria disponible para la implementación de la red; la gente lo hace, pero puede ser un ajuste perfecto.

Como cuestión de opinión, ninguna de las dos plataformas es realmente ideal para esta tarea: el pi resulta ser un poco más como un juguete con sus limitaciones de potencia, el soporte de la tarjeta SD sobresaliente y la documentación retenida de lo que sería ideal como una incrustada bloque de construcción, 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 piratería de E / S digitales en enrutadores wifi basados en Linux, y algunas de ellas son competitivas y baratas ahora.

    
respondido por el Chris Stratton
3

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

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á sucediendo en el nivel de registro. Utilice 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í, puedes volver a un procesador más grande como mbed o arduino, sabiendo que tienes una mejor idea de lo que está sucediendo dentro.

    
respondido por el SimonBarker
2

Comencé con Arduino y cuando entendí cómo funciona, me mudé a Pic y podríamos decir que fue un éxito. Hice algunos proyectos llamativos con Arduino, y es fácil porque en la web tienes muchos ejemplos de código. La frambuesa pi sigue creciendo y no hay tanta ayuda como Arduino. En mi opinión, te recomiendo que comiences con Arduino y cuando llegues a un nivel, pasa a un microcontrolador.

    
respondido por el Manuel Joaquín

Lea otras preguntas en las etiquetas