.NET nanoFramework – Getting started

[Reading Time: 8 minutes]

Die Synthese von embedded Development und .NET Ökosystem

In diesem Post möchte ich dir eine kleine Einführung in das .NET nanoFramework geben, da ich glaube, dass es durchaus für dich interessant sein könnte, falls du schon immer mal ein Auge auf die MicroController-Welt geworfen hast, aber du dich in .NET eher zu Hause fühlst.

Vielleicht hat dich der Aufwand des Einrichtens von Entwicklungsumgebung oder die mit C/C++ verbundenen Herausforderungen abgehalten ein zu steigen oder abgeschreckt. Dann möchte ich dir hiermit einen Weg zeigen, komfortabel ein zu steigen – ohne dass du dein Komfortzone verlassen musst.

Was ist das .NET nanoFramework?

Das .NET nanoFramework ist ein OpenSource-Projekt und auch Teil der .NET Foundation. Damit reiht es sich in eine Vielzahl weiterer prominenter Projekte, wie etwa ASP.NET Core, OmniSharp oder Json.NET, ein.

Das Projekt entstand vor etwa sechs Jahren aus dem .NET Micro Framework, das mit dem Aufkeimen des IoT-Hypes auf einigen wenigen “Bastlerboard” wie zum Beispiel dem Netduino populär wurde.

Netduino 2

Das .NET nanoFramework wird begleitet von allerhand Sponsoren und einer riesigen Community, die mit all ihren Beiträgen das Projekt lebendig hält und stets auf einem sehr aktuellem Stand. Derzeit ist das .NET nanoFramework auf .NET 5; befindet sich aber bereits schon auf einem fortgeschrittenen Preview zu .NET 6.

Vorteile von C# auf Microcontroller

Die MicroController-Welt ist durch zahlreiche unterschiedliche Programmierumgebungen (IDE, Anbindung, Sprache, Compiler usw.) geprägt. In der Regel wird mit C bzw. C++ entwickelt – aber auch Varianten von Diesen sind häufig vertreten. Damit ist die Portierbarkeit von Applikationscode nur eingeschränkt bis gar nicht möglich. Auch muss ein Entwickler sich um viele Aufgaben rund um die Entwicklung seiner Anwendung kümmern. Darunter fällt beispielsweise Memorymanagement und Object (de/con)struction.

Vieles wird mit .NET auf MicroControllern daher sehr einfach. Einer der bedeutendsten Vorteile den das Projekt mitbringt ist die CLR (Common Language Runtime). Diese regelt das Speicherverhalten, das Zerstören nichtmehr benötigter Objekte und vieles weitere (Garbage Collection), so dass ein Entwickler sich stärker auf seine Anwendungslogik konzentrieren kann.

Ein weiterer Vorteil, der daraus resultiert, ist die Einbettung in das .NET Ökosystem. Darunter fällt besonders die IDE (Visual Studio). So kann man seinen Code wie gewohnt entwickeln, testen, bauen und deployen.
Wer schon Code für MicroController entwickelt hat, kennt die umständliche Situation zu debuggen. Wohin gegen C# Entwickler lediglich “Start Debugging” (F5) betätigen und alles in Visual Studio erledigt wird. Dies ist eben mit .NET nanoFramework ohne weiteres möglich.

Getting started…

Es ist sehr einfach, das .NET nanoFramework einzurichten. In Summe ist die größte Herausforderung, das richtige Firmware Image für den MicroController zu flashen – dazu gleich aber mehr. Mit den nächsten Zeilen setzen wir die Umgebung auf und binden die Hardware ein:

1. .NET 6

Bitte lade, falls nicht schon bereits vorhanden .NET 6 herunter und installiere es.

2. Starte Visual Studio (Supported wird ab 2019 / auf 2017 müsstest du etwas tricksen 🙂 )

  • Klicke auf im Menü auf Extensions und anschließend auf Manage Extensions.
  • Daraufhin öffnet sich ein Dialog, dort stellst du sicher, dass du links den Tab Online selektiert hast.
  • suche nun nach “nanoFramework”
  • es sollte ein Ergebnis auftauchen, dass du nun bitte installierst. (der Installationsprozess erfordert, dass du VS schließt und benötigt etwas Zeit)
Installieren von .NET nanoFramework

3. installieren von “nanoff”

als nächstes öffnest du die Package Manager Console (oder acuh jed andere Powershell oder CMD) und gibtst folgenden Befehl ein

dotnet tool install -g nanoff
Installieren des nanoff command

Das Kommandozeilentool ‘nanoff’ hilft dabei, mit dem MicroController Board zu kommunizieren und damit Aufgaben zu erledigen. Zum Beispiel kann man die nanoFramework Firmware flashen, die Device Capabilities abfragen und vieles weiteres.

4. Firmware flashen

Ich habe für meine Projekte den ESP32 verwendet. Dieser MicroController hat Wifi, Bluetooth und viele weitere tolle Features, weshalb ich ihn gern für Bastler-Projekte einsetze.

Für diesen ESP habe ich das aktuellste Firmwareimage in Preview geflasht … und das ging so:

nanoff --platform esp32 --serialport COM4 --update --preview
Im Geräte Manager findet man den COM-Port

Dabei steht —plattform für die MCU Art. Der —serialport wird hier mit COM4 zugewiesen.
Als nächstes gebe ich mit —update an, dass ich, falls bereits vorhanden, das Update eines neueren Images flashen möchte. Das Flag —preview erlaubt es mir auch die Preview-Versionen von Images mit ein zu beziehen.

Wenn das Flashen erfolgreich war, dann bekommst du im Output-Fenster eine entsprechende Meldung und hast damit schon den schwierigsten Teil gemeistert. Als nächsten Schritt kannst du dich ans Coden machen. Doch bevor du los legst, möchte ich gern noch auf nützliche Features hinweisen.

Der Device-Explorer

Im Device Explorer kannst du dein angeschlossenes Gerät identifizieren. Die Liste ist leer, wenn du nichts verbunden hast. Mit dem Explorer kannst du nun verschieden Aktionen auf das Gerät anwenden.

Diese will ich kurz beschreiben. Im Bild oben habe ich die Funktionen mit einem grünen Rechteck markiert. Von links beginnend:

  • Ping: damit kann ich mein Gerät einmal pingen, wenn es vlt. unresponsive scheint.
  • Device Capabilities: Nach einem Klick bekomme ich im Output Fenster Informationen zum verwendeten Firmware Image, dem Flash-Speicher uvm.
  • Löschen des Geräte-Deployment-Bereichs: Falls einmal beim Deployment etwas schiefgelaufen ist, oder sich die Anwendung auf eurem Gerät anders als erwartet verhält, dann könnt ihr hier mit einem Klick aufräumen.
  • Netzwerk-Einstellungen: Damit kann man dem ESP, bspw., seine Netzwerkkonfig. mitgeben (WIFI-Password,….)
  • Reboot (CLR, nanoBooter oder bootloader): hiermit kann man, falls notwendig, eine der drei Optionen neu starten.

Die anderen Buttons dienen dazu den Device Explorer zu bedienen. Zum Beispiel findest du dort auch einen Button zum manuellen Suchen nach Geräten, falls mal die Kommunikation hakt oder Eisntellung zur Art, wie Deploymentimages gehandhabt werden.

Code

Nun kann das Codieren los gehen. Dazu kannst du in VS ein neues Projekt erstellen. Dazu wählst du eines der nanoFramework-Templates aus (Blank zum Beispiel) und schon kannst du starten.

VS Projekt erstellen

Nun wirst du sicher nicht einfach nur irgendwelche Schleifen schreiben, die Zähler hochsetzen, sondern würdest vielleicht zum Anfang auch gern mal Pins ansteuern wollen oder gar Module, die du verdrahtet hast, dann ist nun die Zeit gekommen, die GitHub Repos des .NET nanoFrameworks anzuschauen.

Hier entdeckst du eine Vielzahl an Beispielprojekten und zahlreiche Bibliotheken zum Ansteuern von LEDs, Gas-Sensoren, Displays und viele Weitere. Den Code dazu brauchst du nicht in jedem Fall selber schreiben. Dazu hat das nanoFramework Projekt bereits schon viele Bibliotheken mitgebracht. Auch die Community stellt oft eigene Bibliotheken für Geräte zur Verfügung, die durch das Projekt (noch) nicht zur Verfügung gestellt sind. Vieles davon findest du hier.

Um eine Bibliothek zu einem bestimmten Bauteil einzubinden, kann man wie gewohnt NuGet Packages verwenden, so wie ich es im Beispielbild gemacht habe.

Nuget Package einbinden

Übrigens, falls das Bauen nicht so recht funktionieren will und Hinweise auf Versionskonflickte aus gegeben werden, dann schau, ob du auch alles auf die neueste Version geupdated hast. Im Bild oben kannst du sehen, dass sechs Updates ausstehen. Einige könnten die nanoFramework Core Assembly betreffen, die zur Firmware eures Devices passen sollte.

Alles bereit für eigene Versuche

Damit ist nun alles eingerichtet und du kannst loslegen. Für den Fall, dass du hier nicht alles finden konntet, was du suchst, wirf doch gern einen Blick in mein Video, dort gehe ich Schritt für Schritt durch die Einrichtung und zeige noch etwas mehr Anwendung (Youtube Video hier).

Meine Erfahrungen sind durchweg positiv. Hin und wieder kommt es vor, dass du die Buttons für das manuelle Suchen, Rebooten oder Speicherlöschen verwenden musst, da sich irgendetwas merkwürdig verhält, aber das sind einfach zu behebende Themen, die du auch hättest, wenn du mit einer Arduino IDE, PlatformIO oder anderen IDEs auf C/C++ (Variante) Basis entwickeln würdet.

Meiner Meinung nach ist der Gewinn an Fokus für die Anwendungslogig den Versuch auf .NET nanoFramework zu gehen und damit zu entwickeln die Sache wert. Ich würde mich freuen, wenn du mir hier deine Erfahrungen da läßt oder Vorschläge für eigene Projekte.

Bis zum nächsten Artikel bleib gesund!

Von Thomas

Als Chief Technology Officer bei Xpirit Deutschland. Ich bin dafür verantwortlich, die Produktivität unserer Kunden durch einen Full-Stack von Dev und Technologie in der heutigen Zeit zu steigern. Dabei kümmere ich mich nicht nur um Technologien aus Microsofts Stack wie Azure, AI und IoT, sondern auch um die Bereitstellung von Qualität und Expertise mit DevOps

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.