Embedded-Programmierung für Anfänger: Arduino oder Raspberry Pi? [geschlossen]


32

Ich bin Informatikstudent und möchte mein Wissen über Embedded-Programmierung und Elektrotechnik 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 einige Erfahrung in C ++. Außerdem habe ich mit ArchLinux gespielt.

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

Nach dem, was ich gelesen habe, sind sowohl der Pi als auch der Arduino für Studenten gedacht, aber ich kann nicht herausfinden, welcher für jemanden wie mich besser geeignet ist, der verstehen will, wie Computer auf dem niedrigen Niveau 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 sie hat) ein großes Plus.

Welches ist also besser für einen selbstlernenden Anfänger geeignet: Arduino oder Raspberry Pi?

Danke im Voraus.

Bearbeiten:

Aus Ihren vielen tollen Antworten und auch diesen wertvollen Artikeln bin ich zu Folgendem gekommen

Schlussfolgerungen

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

  2. Es ist Wert in immer tiefer: Ich könnte studieren AVR oder mbed - Mikrocontroller zu einem späteren Zeitpunkt mehr über die niedrige Niveau Einzelheiten der Berechnung zu lernen.

  3. Mit beiden Geräten kann ich (zunächst) ohne Betriebssystem programmieren.

  4. Ich habe auch Projekte gefunden , die einen Pi verwenden, um ein Arduino zu steuern. Ich finde das faszinierend, da beide Geräte ziemlich erschwinglich sind und ich gerne die Leistung von Linux nutze, die auf dem Pi laufen kann.

  5. Zusätzlich 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 sicher, ich kann mir andere motivierende Projekte vorstellen oder mich hier oder hier inspirieren lassen .

Vielen Dank für Ihre Antworten.


2
Der Arduino ist einfacher. Ich schlage vor, dass dies ein besserer Ausgangspunkt für einen "selbstlernenden Anfänger" ist. Das Arduino verfügt derzeit über eine größere Community von Add-On-Herstellern, z. B. für "Shields" (Plug-In-Tochterplatinen). Der Pi bietet ein besseres Preis-Leistungs-Verhältnis, hat aber meiner Meinung nach weniger Low-Level-Schnittstellen (GPIO-Anzahl, I2C usw.) als viele Arduino-Varianten. Ich habe von jedem einen, wenn Sie weniger an Low-Level-Sachen interessiert sind, würde ich den Pi verwenden.
RedGrittyBrick

Antworten:


35

Wenn Sie wirklich "verstehen wollen, wie Computer auf der niedrigen Ebene arbeiten", dann könnte argumentiert werden, dass weder Arduino noch Raspberry Pi geeignet sind. Beiden Plattformen (ihre Hard- und Software) sind speziell zu verstecken , die Low-Level - Details , um es einfach für Menschen , die nicht über diese Details kümmern , um ihre übergeordneten Ziele zu erreichen durch Embedded - Anwendungen zu schaffen.

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

Es kommt also wirklich darauf an, welche Ziele Sie tatsächlich verfolgen: Möchten Sie eingebettete Anwendungen erstellen oder die Prozessoren selbst untersuchen?

Wenn Sie mit dem ersteren beginnen und später mehr zum letzteren wechseln möchten, sollten Sie vielleicht jetzt mit Arduino beginnen und dann später auf die Programmierung des zugrunde liegenden AVR-Prozessors auf einer niedrigeren Ebene migrieren.

Diese Empfehlung gebe ich teilweise aufgrund der einfachen Art der von Ihnen vorgeschlagenen Anwendung und teilweise aufgrund des Migrationspfads ab. Es ist viel schwieriger, auf dem Pi auf Low-Level-Programmierung zu migrieren. Es basiert auf einem komplexen SoC, das einiges an Software- "Infrastruktur" erfordert, um es in Gang zu bringen. Mit dem AVR können Sie ganz einfach auf "Bare Metal" programmieren, wenn Sie dazu neigen.


Vielen Dank, ich möchte mit der Erstellung eingebetteter Anwendungen beginnen und später vielleicht die Prozessoren untersuchen.
Matthias Braun

1
Sie können ein Pi-Bare-Metal-System ohne Probleme programmieren und müssen keine Infrastruktur kennen. Ignorieren Sie einfach Video, Audio und Netzwerk, und Sie haben einen schnellen ARM-Chip mit viel RAM, der von der SD-Karte für Sie geladen wird. Alternativ können Sie einen Bootloader auf die SD-Karte setzen und Ihre Anwendung über eine serielle Schnittstelle in den Arbeitsspeicher herunterladen.
Wouter van Ooijen

2
Für die Burn & Crash-Bare-Metal-Entwicklung wird der Arduino mit seinem startbereiten Bootloader und den drastisch einfacheren Startanforderungen viel einfacher zu handhaben sein (dh als ATMEGA-Entwicklungsboard zu behandeln)
Chris Stratton

13

Ein Arduino kann mit dem Arduino SDE verwendet werden, der einige Funktionen auf "verborgene" Weise bereitstellt, aber es kann auch mit einfachem Assembler, C oder C ++ verwendet werden (und wahrscheinlich mit vielen anderen Sprachen, aber diese scheinen es zu sein) seltener). Es gibt eine Vielzahl von Zusatzplatinen, die als Shields bezeichnet werden. In den meisten Fällen wird Support-Software verwendet, die in den Arduino SDE integriert ist. Das Kombinieren mehrerer Schilde kann schwierig sein. Ethernet ist möglich, aber das erweitert die Möglichkeiten. USB-Host-Stack ist AFAIK außerhalb seiner Möglichkeiten.

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

Der Raspberry Pi ist als Single-Board-Computer konzipiert, auf dem ein verkleinertes Linux ausgeführt wird. Als solches kann es in einer Vielzahl von Sprachen programmiert werden (vom Assembler über Python bis hin zu allem dazwischen, was C und C ++ umfasst). Da es sich um einen USB-Host handeln kann, sollte es kein Problem sein, einen USB-WLAN-Dongle hinzuzufügen. Die Pi-Platine verfügt über einen E / A-Anschluss, auf dem einige Pins verfügbar sind. Sie können über Ihre Linux-App 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, das Raspberry Pi Bare Metal (= ohne Betriebssystem) zu programmieren. Jetzt haben Sie direkten und schnellen Zugriff auf die E / A-Pins, können jedoch keine Liunux-Treiber mehr ausführen, sodass das Hinzufügen von WLAN schwierig wird. AFAIK: Es gibt noch nicht so viele Hardware-Erweiterungen (mit zugehörigen Software-Bibliotheken) für das RaPi wie für das Arduino, aber ich bin der Meinung, dass sich dies ändern könnte.

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


1
Ein Nachteil von Raspberry Pi ist das Fehlen offizieller Dokumentation. Meistens handelt es sich um streng geheime Broadcom-Eigenprodukte, die nur Sterbliche nicht anfassen können. Wenn ARM-Geschwindigkeit benötigt wird, gibt es andere Plattformen, die eine viel bessere Dokumentation für Bare-Metal-Arbeiten bieten, die kostengünstiger und einfacher zu beschaffen sind als Raspberry Pi. Andererseits ist Raspberry Pi einem "echten Computer" viel näher als verschiedene billige ARM-Kits von Texas Instruments, STmicro oder Freescale.
AndrejaKo

3
AFAIK der Mangel an Dokumentation ist auf Video und vielleicht die Audio-Teile Wenn diese Teile nicht da sind, bleibt Ihnen eine Menge Geld übrig (RAM und CPU-Leistung). 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 vollwertige Grafik-Engine. Und wenn ich eine Schnittstelle auf Pixelebene brauche, ist sie da.
Wouter van Ooijen

Es geht nicht nur um Audio und Video, die GPIO-Dokumentation des Pi ist im Vergleich zu herkömmlichen eingebetteten Geräten sehr spärlich.
Chris Stratton

1
Ich hatte keine Probleme mit der Verwendung der GPIOs anhand der verfügbaren Dokumentation. Hast du irgendwelche Probleme gefunden?
Wouter van Ooijen

4

Meiner Meinung nach kommt es darauf an: Möchten Sie in einem Betriebssystem oder auf der Hardware selbst programmieren (sozusagen Ihr 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önnen Sie auf andere PCs, Server usw. umsteigen. Sie werden wahrscheinlich wieder in Python programmieren, wenn Sie sich damit auskennen, weil es auf dem Pi schön und einfach ist.

Wenn Sie andererseits sehen möchten, wie es ist, etwas wirklich Winziges, Billiges und Niedriges zu programmieren, probieren Sie das Arduino aus. Dort läuft Ihr gesamter Code auf diesem kleinen Chip. Sie können ihn sogar von der Platine entfernen (falls es sich um einen DIP handelt) und ihn auf ein Steckbrett legen. Überzeugen Sie sich selbst, wie wenig Hardware Sie benötigen, um einen kleinen Computer zum Laufen zu bringen. Das war zumindest für mich ziemlich erstaunlich. Alles, was Sie schreiben, läuft auf diesem Chip selbst, so dass sein gesamtes "Betriebssystem" Ihre kleine Run-Loop ist. Die Arduino-IDE / Sprache ist ein guter Einstieg, aber es ist sehr nützlich, sich später mit C / C ++ vertraut zu machen. Wenn Sie sich zu diesem Zeitpunkt wirklich darauf einlassen, können Sie Ihre C-Kenntnisse problemlos auf andere Mikrofone wie ARM Cortex M-Chips oder MSP430 von TI anwenden, um einen wirklich geringen Stromverbrauch zu erzielen.

Ich würde vorschlagen, dass Sie sich an Arduino wenden, wenn Sie mehr Wert auf das Erlernen von EE und eingebetteten Sprachen legen. Dies liegt hauptsächlich daran, wie einfach es ist, eigene Schaltungen für den EE-Teil zu erstellen. Sie können den Raspberry Pi-Chip nicht so einfach auf Ihrem eigenen Board ablegen oder viel mit der Hardware herumspielen. Es ist auch so ziemlich ein Linux-System. Drehen Sie zu diesem Zeitpunkt einfach eine VM hoch und lernen Sie dort Linux.


3

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

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

Allerdings ist das pi etwas komplex - auf der Softwareseite, obwohl Sie Erfahrung mit der Linux-Konfiguration haben, und auch in Bezug auf die Stromversorgungseinschränkungen - einige WLAN-Dongles funktionieren direkt, für andere benötigen Sie einen Hub mit eigener Stromversorgung oder zum Löten von Bypässen um die polyfuses.

Wenn Sie auf dem Arduino-Pfad keinen WLAN-Adapter erhalten, der einen vollständigen Netzwerkstapel implementiert und einen seriellen Kanal simuliert, wird ein großer Teil Ihres verfügbaren Arbeitsspeichers für die Netzwerkimplementierung verwendet. Leute tun es, aber es kann eine enge Passform sein.

Meiner Meinung nach ist keine Plattform wirklich ideal für diese Aufgabe - das Pi entpuppt sich aufgrund seiner Leistungsbeschränkungen, der überhängenden SD-Kartenhalterung und der vorenthaltenen Dokumentation als ideal als eingebetteter Baustein. und der Arduino hat nur wenige Ressourcen an Bord für seinen Preis. Trotzdem gibt es nicht viele weit verbreitete Alternativen, die überlegen sind, obwohl es eine lange Geschichte des Hackens digitaler E / A auf linuxbasierte WLAN-Router gibt, und einige davon sind jetzt wettbewerbsfähig billig / kompakt.


3

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 wechseln und mit einer niedrigeren Ebene arbeiten.

Sobald Sie mit Interrupts, Timings und dem Lesen von Informationen (analog und digital) vertraut und vertraut sind, wechseln Sie zu einem einfachen PIC. Ich mag den 16F886, dies gibt Ihnen eine viel bessere Vorstellung davon, was tatsächlich auf Registerebene vor sich geht. Verwenden Sie den Hi-Tech C-Compiler als Ausgangspunkt. Sie müssen nur dann zur Baugruppe gehen, wenn Sie es wirklich möchten.

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

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


2

Ich fing mit Arduino an und als ich verstand, wie es funktioniert, wechselte ich zu Pic und wir konnten sagen, dass es erfolgreich war. Ich habe einige auffällige Projekte mit Arduino gemacht, und es ist einfach, weil Sie im Web viele Codebeispiele haben. Himbeer-Pi wächst immer noch und es gibt nicht so viel Hilfe wie Arduino. Also meiner Meinung nach empfehle ich Ihnen, mit Arduino zu beginnen und, wenn Sie eine gewisse Stufe erreicht haben, zu einem Mikrocontroller zu wechseln.


2
Ich habe die eingestellte Zeit nicht gesehen, sie erschien mir nur in den vorgeschlagenen Themen und ich wollte nur helfen.
Manuel Joaquín
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.