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
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.
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.
Ambos dispositivos me permiten programar sin un sistema operativo, que es lo que quiero (al principio).
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.
Además, he encontrado este libro que debería ayudarme a aprender más sobre ingeniería eléctrica mientras experimento con Arduino.
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.
fuente
Respuestas:
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.
fuente
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.
fuente
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í.
fuente
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.
fuente
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.
fuente
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.
fuente