Embedded-Programmierung für Einsteiger: Arduino oder Raspberry Pi? [geschlossen]

Ich studiere Informatik und bin bestrebt, mein Wissen über eingebettete Programmierung und Elektrotechnik zu erweitern.

Ich habe hier gelesen, dass die Verwendung von Tools wie dem Arduino-Mikrocontroller ein guter Anfang ist.

Ich bin hauptsächlich ein Java- und Python-Programmierer, habe aber etwas Erfahrung in C++. Außerdem habe ich mit ArchLinux herumgespielt.

Ein kleines Projekt, das ich gerne machen würde, ist die Steuerung einiger Glühbirnen über Wi-Fi über mein Arduino/Pi.

Nach dem, was ich gelesen habe, sind sowohl Pi als auch Arduino für Studenten gedacht, aber ich kann nicht herausfinden, was für jemanden wie mich besser geeignet ist, der verstehen möchte, wie Computer auf niedriger Ebene funktionieren.

Als Anfänger werde ich auf viele Fragen stoßen, daher ist eine große und hilfreiche Community (von der ich höre, dass der Pi hat) ein großes Plus.

Was eignet sich also besser für einen autodidaktischen Anfänger: Arduino oder Raspberry Pi?

Danke im Voraus.

Bearbeiten:

Aus Ihren vielen tollen Antworten und auch diesen wertvollen Artikeln bin ich auf folgendes gekommen

Schlussfolgerungen

  1. Ich wähle Arduino als Einstiegspunkt in die Embedded-Programmierung, weil es ein einfacheres System als der Pi ist und ich leichter näher am Metall arbeiten kann.

  2. Es lohnt sich, tiefer zu gehen: Ich könnte mich zu einem späteren Zeitpunkt mit AVR- oder Mbed- Mikrocontrollern befassen, um mehr über die einfachen Details der Datenverarbeitung zu erfahren.

  3. Beide Geräte ermöglichen es mir, ohne Betriebssystem zu programmieren, was ich (zunächst) möchte.

  4. Ich habe auch Projekte gefunden , die einen Pi zur Steuerung eines Arduino verwenden. Ich finde das faszinierend, da beide Geräte recht erschwinglich sind und ich gerne die Leistung von Linux nutze, die auf dem Pi laufen kann.

  5. Außerdem habe ich dieses Buch gefunden , das mir helfen soll, mehr über Elektrotechnik zu lernen, während ich mit Arduino experimentiere.

  6. Es scheint schwierig zu sein, mein Glühbirnenprojekt mit dem Arduino durchzuführen. Aber das ist in Ordnung. Ich bin mir sicher, dass mir weitere motivierende Projekte einfallen oder ich mich hier oder hier inspirieren lassen kann .

Vielen Dank für Ihre Antworten.

Der Arduino ist einfacher. Ich schlage vor, dass dies ein besserer Ausgangspunkt für einen "autodidaktischen Anfänger" ist. Der Arduino hat derzeit eine größere Gemeinschaft von Add-On-Herstellern, zB für "Shields" (Plug-In-Tochterplatinen). Der Pi bietet ein besseres Preis-Leistungs-Verhältnis, aber ich denke, er hat weniger Low-Level-Schnittstellen (GPIO-Anzahl, I2C usw.) als viele Arduino-Varianten. Ich habe von jedem einen, wenn Sie weniger an Low-Level-Zeug interessiert sind, würde ich den Pi verwenden.

Antworten (6)

Wenn Sie wirklich „verstehen wollen, wie Computer auf der unteren Ebene funktionieren“, dann könnte man argumentieren, dass weder Arduino noch Raspberry Pi geeignet sind. Diese beiden Plattformen (ihre Hardware und Software) sind speziell darauf ausgelegt, die Details auf niedriger Ebene zu verbergen , um es Leuten, denen diese Details egal sind, zu erleichtern , ihre übergeordneten Ziele durch die Erstellung eingebetteter Anwendungen zu erreichen.

Stattdessen würde ich empfehlen, eine CPU-Familie mit einer relativ "sauberen" Befehlssatzarchitektur auszuwählen und zu lernen, wie man sie in Assembler programmiert. Zum Beispiel habe ich einen Großteil meiner frühen Codierung auf einem PDP-11-Minicomputer gemacht, der eine sehr saubere 16-Bit-Architektur hat (naja, hatte). Mir wurde gesagt, dass die TI MSP430-Familie sehr ähnlich ist. Bei modernen 8-Bit-Familien könnte man argumentieren, dass AVR etwas sauberer als PIC ist. Oder Sie könnten auf die alte Schule gehen und sich den M68K oder sogar den Z80 ansehen.

Es hängt also wirklich davon ab, was Ihre eigentlichen Ziele sind: Wollen Sie eingebettete Anwendungen erstellen oder die Prozessoren selbst studieren?

Wenn Sie mit Ersterem beginnen und später mehr auf Letzteres umsteigen möchten, sollten Sie vielleicht jetzt mit Arduino beginnen und später zur Programmierung des zugrunde liegenden AVR-Prozessors auf einer niedrigeren Ebene migrieren.

Ich mache diese Empfehlung teilweise wegen der Einfachheit der von Ihnen vorgeschlagenen Anwendung und teilweise wegen des Migrationspfads. Es ist viel schwieriger, auf dem Pi zur Low-Level-Programmierung zu migrieren. Es basiert auf einem komplexen SoC, das ziemlich viel Software-"Infrastruktur" erfordert, nur um es zum Laufen zu bringen. Mit dem AVR können Sie ganz einfach bis zum "Bare Metal" programmieren, wenn Sie dazu neigen.

Danke, ich möchte mit der Erstellung eingebetteter Anwendungen beginnen und später vielleicht in die Untersuchung der Prozessoren einsteigen.
Sie können problemlos einen Pi Bare Metal programmieren, ohne dass Sie irgendeine Infrastruktur kennen müssen. Ignorieren Sie einfach Video, Audio und Netzwerk, und Sie haben einen schnellen ARM-Chip mit viel RAM, der für Sie von der SD-Karte geladen wird. Alternativ können Sie einen Bootloader auf die SD-Karte legen und Ihre Anwendung über eine serielle Schnittstelle in den RAM herunterladen.
Für die Burn & Crash-Bare-Metal-Entwicklung wird der Arduino mit seinem sofort einsatzbereiten Bootloader und drastisch einfacheren Startanforderungen viel einfacher zu handhaben sein (dh als ATMEGA-Entwicklungsboard behandelt).

Ein Arduino kann mit der Arduino SDE verwendet werden, die einige Funktionen auf "versteckte" Weise bereitstellt, aber es kann auch mit einfachem Assembler, C oder C++ (und wahrscheinlich mit vielen anderen Sprachen, aber diese scheinen es zu sein) verwendet werden seltener). Es gibt eine große Auswahl an Add-One-Boards, die als Shields bezeichnet werden, in den meisten Fällen mit Support-Software, die sich in die Arduino SDE integrieren lässt. Das Kombinieren mehrerer Schilde kann schwierig sein. Ethernet ist möglich, aber das dehnt die Möglichkeiten aus. USB-Host-Stack ist AFAIK jenseits seiner Möglichkeiten.

Das ursprüngliche Arduino enthält einen AVR-Chip, aber es gibt Alternativen, die auf PICs und LPC (ARM)-Chips basieren.

Der Raspberry Pi ist als Einplatinencomputer konzipiert, auf dem ein abgespecktes Linux läuft. Als solches kann es in einer Vielzahl von Sprachen programmiert werden (von Assembler bis Python und allem dazwischen, einschließlich C und C++). Es kann ein USB-Host sein, daher sollte es kein Problem sein, einen USB-WLAN-Dongle hinzuzufügen. Die Pi-Platine hat einen IO-Anschluss, an dem einige Pins verfügbar sind, und Sie können von Ihrer Linux-App aus auf diese Pins zugreifen, aber es fühlt sich etwas ungeschickt an.

Obwohl es nicht für eine solche Verwendung konzipiert wurde, ist es kein Problem, den Raspberry Pi Bare Metal (= ohne Betriebssystem) zu programmieren. Jetzt haben Sie direkten und schnellen Zugriff auf die IO-Pins, aber Sie verlieren die Fähigkeit, Liunux-Treiber auszuführen, sodass das Hinzufügen von WiFi schwierig wird. AFAIK, noch gibt es nicht so viele Hardware-Erweiterungen (mit begleitenden Software-Bibliotheken) für das RaPi wie für das Arduino, aber mein Bauchgefühl ist, dass sich das ändern könnte.

Alles in allem würde ich sagen, dass Sie damit auch nichts falsch machen können, aber wenn Sie wirklich WiFi wollen, würde ich RaPi mit Linux empfehlen.

Ein negativer Punkt von Raspberry Pi ist das Fehlen einer offiziellen Dokumentation. Es handelt sich hauptsächlich um streng geheimes, proprietäres Broadcom-Zeug, das Normalsterbliche nicht anfassen können. Wenn ARM-Geschwindigkeit benötigt wird, gibt es andere Plattformen, die eine viel bessere Dokumentation für Bare-Metal-Arbeiten haben, die im Vergleich zu Raspberry Pi billig und einfacher zu beschaffen sind. Andererseits ist der Raspberry Pi einem „echten Computer“ viel näher als diverse billige ARM-Kits von Texas Instruments, STmicro oder Freescale.
AFAIK, der Mangel an Dokumentation betrifft Video- und vielleicht Audioteile (aber ich habe gelesen, dass die Treiber für diese Teile jetzt Open Source sind - also gibt es zumindest eine Art Dokumentation, wenn Sie diese Teile verwenden möchten.) Wenn Sie nur so tun Wenn diese Teile nicht vorhanden sind, bleibt Ihnen eine Menge Geld (RAM und CPU-Leistung) für Ihr Geld. Wen kümmert es, dass es zusätzliche Dinge gibt, die Sie in einer typischen Mikrocontroller-Anwendung sowieso nicht verwenden möchten? Ich brauche keine ausgewachsene Grafik-Engine. Und wenn ich eine Schnittstelle auf Pixelebene brauche, ist sie da.
Es sind nicht nur Audio und Video, die GPIO-Dokumentation des pi ist im Vergleich zu üblichen eingebetteten Geräten sehr spärlich.
Ich hatte keine Probleme, die GPIOs mit der verfügbaren Dokumentation zu verwenden. Haben Sie Probleme gefunden?

Meiner Meinung nach läuft es darauf hinaus: Wollen Sie in einem Betriebssystem oder auf der Hardware selbst programmieren (eine Art eigenes Betriebssystem erstellen)?

Mit einem RaspberryPi werden Sie so ziemlich Debian Linux verwenden. Das ist in Ordnung und Linux ist wirklich nützlich. Wenn Sie das lernen, könnten Sie auf andere PCs, Server usw. wachsen. Sie werden wahrscheinlich wieder in Python programmieren, wenn Sie damit vertraut sind, weil es auf dem Pi schön und einfach zu tun ist.

Wenn Sie andererseits sehen möchten, wie es ist, etwas wirklich Winziges, Billiges und Niedrigenergie zu programmieren, versuchen Sie es mit Arduino. Ihr gesamter Code läuft auf diesem kleinen Chip, Sie könnten ihn sogar von der Platine entfernen (wenn es ein DIP-Chip ist) und auf ein Steckbrett legen und selbst sehen, wie wenig Hardware Sie benötigen, um einen einfachen kleinen Computer zum Laufen zu bringen. Das war zumindest für mich ziemlich erstaunlich. Alles, was Sie schreiben, wird auf diesem Chip selbst ausgeführt, sodass sein gesamtes "Betriebssystem" Ihre kleine Run-Loop ist. Die Arduino IDE/Sprache ist gut für den Einstieg, aber später wird es ziemlich nützlich sein, sich mit C/C++ vertraut zu machen. Wenn Sie sich an diesem Punkt wirklich darauf einlassen, können Sie Ihre C-Kenntnisse problemlos auf anderen Mikros wie ARM Cortex M-Chips oder MSP430 von TI für wirklich geringen Stromverbrauch einsetzen.

Ich würde vorschlagen, dass Sie zu Arduino gehen, wenn Sie sich mehr für das Erlernen von EE und eingebetteten Sprachen interessieren, hauptsächlich weil es so einfach ist, Ihre eigenen Schaltungen für den EE-Teil zu erstellen. Sie können den Chip des Raspberry Pi nicht einfach auf Ihrem eigenen Board entfernen oder viel mit der Hardware herumspielen. auch ist es so ziemlich ein Linux-System. Starten Sie an diesem Punkt einfach eine VM und lernen Sie dort Linux.

Was angemessen ist, hängt wirklich von den Details der Aufgabe ab.

Wenn Sie WLAN benötigen, ist ein Raspberry Pi wahrscheinlich eine kostengünstigere Lösung, da Sie einen billigen WLAN-Dongle verwenden können.

Der Pi hat jedoch eine gewisse Komplexität - auf der Softwareseite, obwohl Sie einige Erfahrung mit der Linux-Konfiguration haben, und auch in Bezug auf die Einschränkungen der Stromversorgung - einige WLAN-Dongles funktionieren direkt, für andere benötigen Sie einen Hub mit eigener Stromversorgung oder zum Löten von Umgehungen um die Polyfuses herum.

Wenn Sie auf dem Arduino-Pfad keinen WLAN-Adapter erhalten, der einen vollständigen Netzwerkstapel implementiert und einen seriellen Kanal simuliert, werden Sie am Ende einen großen Teil Ihres verfügbaren Speichers für die Netzwerkimplementierung verwenden. Leute tun es, aber es kann eng werden.

Meiner Meinung nach ist keine der beiden Plattformen wirklich ideal für diese Aufgabe - der Pi entpuppt sich mit seinen Leistungsbeschränkungen, der überhängenden SD-Kartenhalterung und der zurückgehaltenen Dokumentation eher als Spielzeug, als es als eingebetteter Baustein ideal wäre. und der Arduino hat nur wenige Onboard-Ressourcen für seinen Preis. Allerdings gibt es nicht viele weit verbreitete Alternativen, die überlegen sind, obwohl es eine lange Geschichte des Hackens digitaler E / A auf Linux-basierten WLAN-Routern gibt, und einige davon sind jetzt konkurrenzfähig günstig / kompakt.

Ich würde den mbed Prozessor empfehlen. Es hat eine gute Balance zwischen Abstraktion auf hoher Ebene (um Ihnen den Einstieg zu erleichtern) in C++, und dann können Sie zu C heruntersteigen und auf einer niedrigeren Ebene damit arbeiten.

Sobald Sie mit Interrupts, Timings und Leseinformationen (sowohl analog als auch digital) auf dem neuesten Stand und vertraut sind, wechseln Sie zu einem einfachen PIC. Ich mag den 16F886, das gibt Ihnen eine viel bessere Vorstellung davon, was tatsächlich auf der Registerebene vor sich geht. Verwenden Sie den Hi-Tech-C-Compiler als Ausgangspunkt. Sie müssen nicht zur Assemblierung gehen, es sei denn, Sie möchten dies wirklich.

Mit dem PIC können Sie sich Gedanken über Stromverbrauch, Programmgröße, Speicher und Zeitverzögerungen machen.

Von dort aus können Sie zu einem größeren Prozessor wie mbed oder arduino zurückkehren, da Sie wissen, dass Sie eine bessere Vorstellung davon haben, was im Inneren vor sich geht.

Ich habe mit Arduino angefangen und als ich verstanden habe, wie es funktioniert, bin ich zu Pic gewechselt und wir können sagen, dass es gelungen ist. Ich habe einige auffällige Projekte mit Arduino erstellt, und es ist einfach, weil Sie im Web viele Codebeispiele haben. Raspberry Pi wächst immer noch und es gibt nicht so viel Hilfe wie Arduino. Meiner Meinung nach empfehle ich Ihnen also, mit Arduino zu beginnen und, wenn Sie ein gewisses Niveau erreicht haben, zu einem Mikrocontroller zu wechseln.

Ich habe mir die gepostete Zeit nicht angesehen, es ist mir nur in den vorgeschlagenen Themen aufgetaucht und ich wollte nur helfen.