Nach erfolgreichen Versuchen mit dem Digi-Dot-Booster am Raspberry Pi, habe ich mich nach weiteren Plattformen umgeschaut, die mit wenig Aufwand zu schnellen Ergebnissen führen würden. Nach kurzem Durchwühlen der Bastelkiste kam ein STM32 Nucleo Board zum Vorschein. Das interessante bei diesem Board ist, dass es bereits für die ARM mbed Plattform vorbereitet ist. Die Webseite stellt einen Online Code Editor mit C/C++ Compiler inklusive zahlreicher Bibliotheken für den Zugriff auf die Schnittstellen zur Verfügung – optimal für einen schnellen Test ohne eine komplette Entwicklungsumgebung aufsetzen zu müssen. Also kam das Board aus der Kiste auf den Arbeitstisch zum Experimentieren…
UPDATE: Inzwischen habe ich eine eigenständige DD-Booster Bibliothek für mbed erstellt, welche die Befehle in einfachen Funktionen kapselt.
Ich habe hier das Nucleo F303RE Board für die Anleitung verwendet, es sollte aber grundsätzlich auch mit anderen Plattformen mit mbed Unterstützung funktionieren. Der Programmcode kann im Prinzip in jedem aktuellen Browser auf jedem Betriebssystem geschrieben werden. Nach dem Kompilieren wird das Binary einfach zum Download angeboten – die Datei legt man dann auf dem Wechsellaufwerk ab, welches nach dem Anschluss des Nucleo Boards am Rechner erscheint. Das Board erkennt die neue Datei, der Flash wird damit automatisch programmiert und das Programm dann ausgeführt.
Angeschlossen wird der DD-Booster an die Arduino Pins. Erfreulicherweise sind diese direkt auf der Platine beschriftet, beim DD Booster ist ein Blick in die Dokumentation notwendig (Beschriftung auf dem Board würde dem BB-Booster auch gut tun. Update: laut Folker kommt die Beschriftung auch).
Für die Nutzung des Online Compilers ist die kostenlose Registrierung erforderlich. Nachdem das erledigt ist, kann man sich dort anmelden und bekommt einen leeren Codeeditor zu sehen.
Bevor man mit dem Programmieren anfangen kann, muss eine Plattform ausgewählt werden. Das geht über die Schaltfläche „No device selected“ rechts oben.
Nach der Erstanmeldung wird die Liste zuerst leer sein, später werden dort alle eigenen mbed Plattformen erscheinen, zwischen den man einfach umschalten kann. Zuerst soll das Nucleo Board hinzugefügt werden. Dazu klickt man auf den Button „Add Platform“ unten links. Man wird daraufhin auf die Seite mit den unterstützten Boards weitergeleitet.
Nach der Auswahl des Boards kommt man zunächst auf die Seite des Boards mit umfangreichen Informationen und Hinweisen.
Mit dem Klick auf den Button „Add to your mbed Compiler“ wird diese Plattform zu der Liste hinzugefügt. Übrigens: falls man später eine Plattform aus der eigenen Liste entfernen möchte, muss man das ebenfalls über diese Seite tun und nicht im Compiler selbst.
Zurück im Compiler wird direkt ein neues Projekt erzeugt und zur Auswahl werden unterschiedliche Templates angeboten. Wir fangen mit einem leeren Projekt („Empty Program“) an und vergeben einen aussagekräftigen Namen für das Projekt.
Wir legen nun eine neue Datei über den Rechtsklick auf den Projektordner im Workspace auf der linken Seite an.
Die Datei bekommt ebenfalls einen Namen – `rainbow.cpp` in diesem Fall.
Für der Regenbogen habe ich diesen Code geschrieben, der direkt im Editor eingefügt werden kann. Der Code ist an die bisherigen Beispiele angelehnt mit dem Unterschied, dass die ChipSelect Leitung nun manuell getriggert werden muss.
#include "mbed.h" SPI device(SPI_MOSI, SPI_MISO, SPI_SCK); DigitalOut cs(SPI_CS); #define LEDS 30 void initSPI() { cs = 1; device.format(8,0); device.frequency(10000000); } void initLEDs() { cs = 0; device.write(0xB1); device.write(LEDS); device.write(24); cs = 1; wait_ms(40); } int main() { uint16_t i = 0; initSPI(); initLEDs(); while(1) { i += 5; i = i % 360; cs = 0; device.write(0xA7); device.write(i & 0xFF); device.write(i >> 8); device.write(255); device.write(100); device.write(0); device.write(LEDS - 1); device.write(10); device.write(0xB2); cs = 1; wait_ms(40); } }
Beim Click auf „Compilieren“ bekommt man einen Fehler. Der Grund ist klar – es wird eine Header Datei `mbed.h` importiert, weil wir die Funktionen der mbed Bibliothek für den Zugriff auf die SPI Schnittstelle verwenden wollen, im Projekt ist jedoch nicht definiert, wo diese zu suchen ist. Praktischerweise gibt es neben der Fehlermeldung den „Fix it“ Button.
Beim Klick darauf, versucht die Entwicklungsumgebung die fehlende Bibliothek selbst zu finden – mit Erfolg wie man sieht.
Der erste Treffer ist der richtige – auswählen und mit OK bestätigen. Daraufhin erscheint eine Referenz im Projekt darauf und das Kompilieren geht nun ohne Probleme. Die Datei speichert man direkt auf dem vom Nucleo Board im System erstellten Wechseldatenträger ab.
Das war’s! Das Nucleo Board übernimmt das Programm, macht einen kurzen Reset und lässt die LEDs in Regenbogen-Farben leuchten.
FAZIT: Mit dem „mbed Compiler“ kann man ebenfalls recht schnell Erfolge haben. Man kann dabei nicht nur auf die offizielle mbed Bibliothek zugreifen, sondern auf viele andere, die aus der mbed Community kommen. Der Nachteil ist der fehlende Debugger – möchte man Schritt für Schritt den Code analysieren und die Werte der Variablen prüfen, muss man auf die lokale Entwicklungsumgebung umsteigen.