© StonePictures/Shutterstock.com
Experimente mit Meadow F7

Auf der grünen Wiese


Microsoft war im Maker-Bereich zwar oft eine Quelle guter Ideen (Stichwort .NET Gadgeteer), diese erreichten allerdings nie eine wirkliche Marktwirkung. Mit Meadow F7 stellt Bryan Costanich von Wilderness Labs nun eine komplett neue Technologie aus der Kategorie Einplatinencomputer für .NET-Standard am Microcontroller zur Verfügung.

Ich arbeite bei den folgenden Schritten mit dem Hack Kit von Meadow F7, das unter [1] bereitgestellt wird. Die Packung ist im Großen und Ganzen startbereit; die einzige Hürde ist, dass ich den Steckverbinder für das Breadboard von Hand einlöten muss. Wenn Sie die hier verwendete Hardware nicht brauchen, können Sie den Meadow F7 natürlich auch roh kaufen und benötigte Komponenten separat beziehen.

Erste Schritte

Für die Programmierung von Meadow F7 verwende ich Visual Studio 2019. Manche Entwickler empfehlen hier möglicherweise die Verwendung der dfu-utils, um den Prozessor mit der .NET Runtime auszustatten. Das ist heute aber nur noch unter Linux und macOS aktuell – unter Windows klicke ich auf Extensions | Manage Extensions und suche online nach „VS Tools for Meadow“. Nach dem Neustart öffne ich die IDE ohne Codeprojekt, klicke danach auf View | Other Windows | Meadow und öffne das in Abbildung 1 gezeigte Fenster. Alternativ kann man auch Ctrl + Shift + M drücken.

bosbach_meadow_1.tif_fmt1.jpgAbb. 1: Meadow F7 bringt sein eigenes Verwaltungswerkzeug mit

Meadow F7 kennt zwei Betriebsmodi. Halte ich beim Verbinden der Karte mit dem Rechner die boot-Taste gedrückt, aktiviere ich statt der .NET Firmware den Bootloader. Danach klicke ich im Meadow-F7-Verwaltungswerkzeug auf die Option Download Meadow OS. Der Download läuft mit der Meldung „Download complete“ durch. Zum Zeitpunkt der Drucklegung nutzte ich die Firmwareversion 0.3.6. Danach klicke ich auf Flash Device – in der Combo-Box darf der String Select Target Device Port ausgewählt bleiben. Nach getaner Arbeit adressiert das Meadow-Toolkit die Combo-Box mit dem neuen COM-Port, der das Zielgerät identifiziert. Auf meiner Maschine war das COM3. Meadow F7 ist jetzt aktuell und betriebsbereit.

Sollte es bei der Auslieferung zu Problemen kommen, finden Sie unter [2] Rat und Hilfe. Diese Website ist auch dann nützlich, wenn Sie in der Vergangenheit mittels dfu-utils ein Betriebssystem eingespielt haben.

Die erste Demo

Nach der Installation des Betriebssystems möchte ich ein neues Demoprojekt erzeugen. Dazu verwende ich die Vorlage „Meadow Application“, und entscheide mich für den Namen SUSMeadowApplication1.

Lohn der Mühe ist eine aus zwei Codedateien bestehende Solution. In Program.cs finde ich den Einsprungspunkt, der für die Aktivierung des Programms sorgt:

class Program { static IApp app; public static void Main(string[] args) { if (args.Length > 0 && args[0] == "--exitOnDebug") return; app = new MeadowApp(); Thread.Sleep(Timeout.Infinite); } }

Die Meadow-Firmware ist vollständig Thread-basiert. Nach dem Start der Betriebssystemfirmware initialisiere ich die App-Klasse, um den Haupt-Thread danach durch Übergabe des Werts Timeout.Infinite schlafen zu schicken.

Die eigentliche Applikationsstruktur sitzt in MeadowApp.cs. Sie ist von der Klasse App abgeleitet, die als Templateparameter Informationen über die anzusprechende Platine erwartet:

public class MeadowApp : App<F7Micro, MeadowApp> { const int pulseDuration = 3000; RgbPwmLed rgbPwmLed;

Nach der Deklaration einiger notwendiger Komponenten sehe ich die Erzeugung der RGB-LED. Das Meadow Framework arbeitet im Allgemeinen mit High-Level-Abstraktionsklassen, die den Entwickler so gut wie möglich von der zugrunde liegenden Hardware abschirmen. Eine RGB-LED wird dann durch eine Instanz von RgbPwmLed repräsentiert, die im Rahmen ihrer Erzeugung Verweise auf die drei zum Ansteuern der Farbkomponenten vorgesehenen Pins erwartet:

 public MeadowApp() { rgbPwmLed = new RgbPwmLed(Device, Device.Pins.OnboardLedRed, Device.Pins.OnboardLedGreen, Device.Pins.OnboardLedBlue); PulseRgbPwmLed(); }

Um Entwicklern das von Raspberry Pi und ähnlichen Geräten bekannte Hantieren mit PIN-Nummern zu ersparen, spendiert Bryan Costanich die Enum Device.Pins. In ihr finden sich „physikalische“ Deklarationen, die ein Mapping zwischen den PINs meiner Platine und den logischen PINs der diversen Prozessoren des Meadow F7 herstellen. Die Verwendung der Mehrzahl ist in Bezug auf die Prozessoren übrigens richtig, da wir neben dem STM32-Hauptprozessor auch einen ESP32 bekommen. Er ist für die Kommunikation mit WLAN verantwortlich und hat mit dem Abarbeiten des .NET-Codes sonst nichts zu tun.

Nachdem der Konstruktor die Hardware eingerichtet hat, ruft er die Methode PulseRgbPwmLed auf. Sie enthält eine Endlosschleife, die nacheinander jede der drei Farbkomponenten anspricht:

 pr...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang