In dieser Frage wird unter anderem gefragt, ob zwischen der Verwendung von Python auf einem Himbeer-Pi zum Prototypen eines Endpunkts und der Verwendung eines Mikrocontrollers ein großer Lernaufwand besteht.
Es ist klar, dass sich der Stromverbrauch erheblich verbessert (auf Kosten des verringerten Prozessordurchsatzes). Es gibt also gute Gründe, den MCU-Ansatz für ein Produkt zu wählen, das batteriebetrieben werden muss.
Einer der möglichen Gründe, an einem Einplatinencomputer mit Linux festzuhalten, ist, dass keine neue Software (über Python oder ähnliches) erlernt werden muss, vorausgesetzt, die Anwendung kann in einer höheren Sprache geschrieben werden (wo es genügend Standard geben sollte) Bibliotheken).
Auf einer Embedded-Entwicklungsplattform stehen wahrscheinlich C ++ (mbed oder arduino) oder Micropython zur Auswahl. Mein Eindruck ist, dass diese nicht wesentlich anders oder komplexer sind als das Schreiben von Code unter Linux - obwohl die Plattformen individuelle Vorteile haben. Habe ich etwas übersehen, was für einen Softwareentwickler relevant ist?
Insbesondere frage ich nach IoT-Endpunkten - daher ist es nicht unbedingt erforderlich, über die vollständigen Ressourcen eines Linux-Systems für die Anwendungen zu verfügen, die mich hier interessieren. Hervorzuheben ist auch, dass die mcu-Implementierung aufgrund von Überlegungen zu Leistung und Latenz bei dieser Art von Anwendung eine harte Anforderung darstellt.
quelle
Es hängt davon ab, was Sie versuchen.
Die größte Lücke besteht darin, dass ein von Ihnen genannter Mikrocontroller (wie Arduino) kein Multitasking-Betriebssystem wie Linux ausführt. Dies bedeutet, wenn Ihre Anwendung von Multitasking oder Multithreading abhängt, ist dies möglicherweise viel schwieriger oder sogar unmöglich, auf Arduino ausgeführt zu werden.
Die zweite Lücke ist die Hardware-Unterstützung. Zum Beispiel unterstützt Raspberry Pi Kameras, USB-Audio, Ethernet und WiFi. Nichts davon wird direkt von Arduino unterstützt, und obwohl Sie verschiedene Shields (wie USB Host, Ethernet oder WiFi) verwenden können, ist deren Verwendung nicht so einfach wie die Verwendung von Netzwerken auf Raspberry Pi.
Die dritte Lücke sind die verfügbaren Ressourcen. Die meisten Mikrocontroller kommen nicht einmal an die Ressourcen heran, die Raspberry Pi bietet. Zum Beispiel bot bereits der erste Raspberry Pi eine CPU mit 700 MHz und 256 MB RAM und konnte mit 32 GB Speicher verwendet werden. Ein typischer Arduino Uno, der auf ATMEGA328 basiert, läuft mit 16 MHz und verfügt über 32 KB Speicher und 2 KB RAM.
Die Verwendung von Raspberry Pi ist für Entwickler, die vom PC kommen, auf jeden Fall viel einfacher. Die Hauptvorteile des Einsatzes von Mikrocontrollern sind:
Wenn keines davon wichtig ist, ist die Verwendung von Raspberry Pi definitiv sinnvoller.
quelle
JA, es ist ein großer Sprung von der Programmierung in Python zur Programmierung mit den typischen C-basierten Sprachtools auf Mikrocontrollern. Tatsächlich müssen Sie in vielen Fällen möglicherweise einige, wenn nicht sogar alle Ihrer Anwendungen in Assemblersprache schreiben.
Wie bereits in den anderen Antworten erwähnt, sind Mikrocontroller sehr ressourcenintensiv, sodass Sie alle Annehmlichkeiten eines Linux-Betriebssystems und alle Tools, die Sie lokal ausführen können, verlieren. Das Iterieren mit der Arduino IDE ist im Vergleich zum Ausführen lokaler Skripte sehr langsam.
Obwohl ich viel Berufserfahrung mit Mikrocontrollern und Mikroprozessoren habe, ziehe ich es vor, meine persönlichen Projekte mit RPi-Hardware mit einigen Arduinos für kritische Echtzeitaufgaben auszuführen. Ich habe mich auch mit Beagle Bone Black beschäftigt und in mancher Hinsicht ist es praktischer als die Verwendung eines RPi mit einem oder mehreren Arduinos.
quelle
Ja, großer Unterschied
Der Unterschied ist Tag und Nacht, sowohl in Bezug auf Hardware als auch auf Software. Kein gültiger Vergleich.
Wann soll man welche verwenden?
Verwenden Sie ein Arduino, wenn ...
In allen anderen Fällen ist ein Pi wesentlich benutzerfreundlicher. Der Pi ist einfach ein anderer (langsamer) Computer.
Versteh mich nicht falsch. Ich besitze einen Pi und benutze ihn für mehrere Linux-Dienste in meinem Netzwerk. Ich programmiere auch häufig Arduinos (meistens Pro Micros). Beide sind toll, ich mag sie gleich, aber sie haben sehr unterschiedliche Nutzungsszenarien.
Auf Ihre Frage nach dem Schwierigkeitsgrad - es ist relativ. Das einzige Mal, dass das Arduino für mich schwierig wurde, war es schwer, Timing-Probleme zu beheben, insbesondere wenn es mit fragwürdiger Elektronik kombiniert wurde (dh EM-Störungen, zu lange Kabel usw.). Wenn Sie fest in der Sprache Ihrer Wahl sind (dh C für die Arduino IDE), sollten Sie in der Lage sein, alle Bibliotheken, die Sie einsetzen, zu hacken. Trotzdem wird es immer komplexer als ein Pi, bei dem Sie beispielsweise eine Skriptsprache Ihrer Wahl für zeitunkritische Dinge verwenden können - diese sind immer einfacher zu entwickeln und zu debuggen.
quelle
Ich glaube, es gibt einige Punkte, die noch nicht explizit spezifiziert wurden.
Die Entwicklungsumgebung ist völlig anders. Sie können die Pi-Software tatsächlich auf dem Pi entwickeln - Sie können sogar eine GUI verwenden, wenn Sie möchten. Es gibt fortschrittliche Debugging-Tools, die ebenfalls integriert sind - und eine Menge von dem, was für jedes Computersystem verfügbar ist.
Die Controller müssen auf einem separaten Computer entwickelt / emuliert und dann zum endgültigen Testen an den Controller gesendet werden.
Der Pi kann praktisch jede Sprache ausführen, mit der Sie ihn programmieren möchten. Mikrocontroller haben normalerweise eine oder zwei.
Auf dem Pi können eine ganze Reihe von Betriebssystemen ausgeführt werden (einschließlich Windows IoT und einer Reihe von Spezialsystemen). Auf eingebetteten Controllern wird in der Regel überhaupt kein "Betriebssystem" ausgeführt.
Auch was die Laufzeit / das Betriebssystem angeht - der Pi benötigt einige Sekunden zum Booten -, wenn Sie in den ersten Sekunden tatsächlich etwas tun möchten, funktioniert der Pi nicht für Sie. Auch wenn Sie keine extremen Maßnahmen ergriffen haben, um ein Beschreiben des Speichers zu verhindern, sollten Sie nicht einfach die Stromversorgung unterbrechen, sondern einen "Shutdown" ausführen und ein wenig warten. Dies kann auch einige Verwendungszwecke einschränken.
Ein anderer Post-Deployment-Punkt, den ich nicht erwähnt habe. Ich bin mir nicht sicher, wie ich absolut sicher sein kann, dass ich einen Pi richtig gesichert habe - dass keine Agentur irgendwo ein kleines Stück Code geklebt hat, das unter bestimmten Umständen unbefugten Zugriff ermöglicht -, ohne es aus allen Netzwerken zu entfernen und alle drahtlosen Zugriffsmechanismen zu deaktivieren . Mikrocontroller sind relativ einfach zu sichern, da Sie fast den gesamten Code schreiben, der auf dem Gerät ausgeführt wird.
Natürlich könnten Sie jederzeit ein eigenes Pi-Image ohne echtes Betriebssystem entwickeln und die gesamte Platine / CPU übernehmen, was es quasi zu einem leistungsstarken / teuren Mikrocontroller mit allen damit verbundenen Vor- und Nachteilen machen würde. Jemand hat das wahrscheinlich sogar schon getan, aber ich habe in letzter Zeit nicht danach gesucht.
quelle
Der Unterschied zwischen dem Entwickeln einer Anwendung mit einem Pi kann aufgrund von Hardware- und Softwareentwicklungs-Toolchain-Unterschieden sehr unterschiedlich oder ähnlich zum Entwickeln einer Anwendung mit einem Mikrocontroller sein.
Es gibt eine breite Palette von verfügbaren Mikrocontrollern, die zwischen 8-Bit- und 64-Bit-Prozessoren und zwischen einigen K RAM und einigen Gigabyte RAM liegen. Leistungsfähigere Mikrocontroller bieten eine Pi-ähnliche Erfahrung. Weniger leistungsfähige Mikrocontroller nicht.
Und selbst mit dem Pi gibt es große Unterschiede zwischen der Entwicklung für das Windows 10 IoT-Betriebssystem und der Entwicklung für Raspian, Mate oder andere Linux-basierte Betriebssysteme. Für Windows 10 IoT ist ein Entwicklungs-PC erforderlich, der eine Visual Studio-Toolchain mit einem Remote-Debugger verwendet, der auf die Universal Windows Program (UWP) -Umgebung abzielt. Die Entwicklung für Raspian oder Mate kann tatsächlich auf einem Pi mit den auf dem Pi verfügbaren Tools durchgeführt werden.
Das Constrained Application Protocol wird für kleine, eingeschränkte Geräte verwendet, die mit der Internet of Things-Umgebung verwendet werden. Auf dieser Seite der Implementierung des CoAP-Protokolls erhalten Sie einen Überblick über die Vielfalt der Hardware und Software für Mikrocontroller . Es erwähnt das Contiki-Betriebssystem, von dem ich vage gehört habe, zusammen mit bekannteren Betriebssystemen wie iOS, OSX und Android. Die genannten Programmiersprachen sind Java, JavaScript, C, C #, Ruby, Go, Erlang, Rust und Python.
Die für die Entwicklung mit Mikrocontrollern verwendete Toolkette variiert je nach Hersteller sowie je nach Art der Ressourcen, die von Entwicklungsgemeinschaften und Open Source-Initiativen zur Verfügung gestellt werden. In einigen Fällen erhalten Sie einen Cross-Assembler, in anderen Fällen einen C-Cross-Compiler und in anderen Fällen eine nützliche Toolkette mit allen wichtigen Funktionen und Emulatoren, die der Visual Studio-Toolkette für Windows 10 IoT ähneln.
Die eigentliche Entwicklungsumgebung für einen Mikrocontroller umfasst möglicherweise die Verwendung eines EEPROM- Programmiergeräts und der Softwaretools zum Erstellen eines neuen Abbilds und zum Übertragen auf das Gerät, oder das Gerät verfügt möglicherweise über die erforderliche Konnektivität, um das Herunterladen eines neuen Abbilds über eine serielle Verbindung oder über eine serielle Verbindung zu ermöglichen eine Netzwerkverbindung.
Mein Eindruck ist, dass die meisten Mikrocontroller einen C-Cross-Compiler haben, obwohl der Compiler möglicherweise nur ältere Standards wie K & R oder C98 unterstützt. C-Cross-Compiler verfügen häufig über nicht standardmäßige Schlüsselwörter für mikroprozessorspezifische Funktionen, z. B.
far
undnear
Schlüsselwörter für Zeiger bei den alten 8080- und 8086-Prozessoren mit segmentiertem Speicher.Es gibt auch Spezialsprachen, die auf Mikrocontroller wie die Programmiersprache FORTH abzielen . Diese Sprachen haben häufig ein Laufzeitdesign, das auf das Bare-Metal-System abzielt, sodass es kein anderes Betriebssystem als die Laufzeit der Sprache gibt.
Das Betriebssystem kann von praktisch nicht existierendem bis hin zu einfachem Linux bis hin zu einem speziellen Betriebssystem wie freeRTOS oder Windows Embedded oder einem vollständigen Linux oder Microsoft Windows reichen . Sehen Sie dieses SourceForge-Projekt MINIBIAN für Raspberry Pi . Siehe auch dieses eBook, Baking Pi: Operating Systems Development, das die Entwicklung eines rudimentären Betriebssystems für Raspberry Pi in Assembler beschreibt.
Dieser Artikel aus dem Visual Studio Magazine, Programmieren des Internets der Dinge mit Visual Studio , bietet einen Überblick über die vielen verschiedenen verfügbaren Geräte, gefolgt von einem Überblick über die Verwendung der Visual Studio-IDE für die Entwicklung unter Linux sowie unter Windows.
...
Ein spezielles Beispiel für eine Mikrocontroller-Anwendung
Dies ist ein Bild einer Mikrocontroller-Platine von einer automatischen Kaffeemaschine. Dies scheint eine Standardkomponente für in China hergestellte Kaffeemaschinen zu sein. Die Website des Herstellers ist auf der Leiterplatte aufgedruckt.
Das Bild besteht aus zwei Ansichten. Die Ansicht auf der linken Seite ist die Rückseite der Platine, die den Mikrocontroller und die unterstützende Schaltung enthält. Die Ansicht auf der rechten Seite ist die Vorderseite der Platine mit dem LCD-Bildschirm und einer Reihe von Tasten, mit denen die aktuelle Uhrzeit eingestellt und Aktionen wie das Programmieren einer Startzeit usw. ausgeführt werden.
Die Ansicht rechts passt in einen Träger, der dann in eine Öffnung an der Vorderseite der Kaffeemaschine passt. Die Schalter auf der unteren Leiterplatte werden mit Kippschaltern betätigt. Das LCD-Display, das als Sonderzweck erscheint, dient zur Anzeige der aktuellen Uhrzeit und des aktuellen Status sowie zur Anzeige der Benutzeroberfläche, wenn die Einstellungen der Kaffeemaschine geändert werden. Die rote LED wird verwendet, um anzuzeigen, wann die Kaffeemaschine tatsächlich Kaffee kocht, und um anzuzeigen, wann der Vorgang abgeschlossen ist, indem die Beleuchtung wieder ausgeschaltet wird.
Der Mikrocontroller ist ein ELAN Microelectronics Corp EM78P447NAM (Datenblatt), bei dem es sich um einen 8-Bit-Mikrocontroller handelt. Einige der grundlegenden Statistiken zeigen, was für ein kleines und minimales Gerät dies ist, aber es funktioniert gut für den beabsichtigten Zweck. Die Absicht ist, Software zu entwickeln, die dann als Teil der Herstellung in das einmal beschreibbare ROM heruntergeladen wird.
quelle