Vor wenigen Tagen hat Microsoft eine Erweiterung für seinen Editor Visual Studio Code veröffentlicht, mit dem man für das Arduino entwicklen kann.
Die Erweiterung ist Open Source (MIT-Lizenz) und kann im Marketplace gefunden werden.
Grund genug also, sich das mal genauer anzuschauen.
Warum?
Nun, ich fand Microsoft Visual Studio schon immer eine sehr schicke IDE.
Da ist man nach der Installation direkt startklar, hat einen Debugger an Board und durch die Autovervollständigung kommt man schnell ans Ziel und findet die gesuchte Methode.
Sowas für Arduino? Her damit!
Installation
Nachdem man Microsoft Visual Studio Code installiert hat, kann die Arduino Erweiterung einfach mit einem Klick über den Marketplace gesucht und installiert werden.
Wichtig: Ihr benötigt mindestens die Arduino IDE in der Version 1.6.x auf eurem PC, welche NICHT über den Windows Store installiert wurde. Da gibt es dann wohl Probleme mit der Sandbox...
Des Weiteren habe ich das Ganze nur unter Windows 10 getestet.
Das erste Projekt
Ich habe noch nie was mit Visual Studio Code gemacht, also eventuell ist das total falsch, aber so bin ich ans Ziel gekommen...
- Datei => Order öffnen...
- Erstellt euch jetzt einen neuen Order, zum Beispiel "VSC_Test" und klick auf "Order auswählen"
Auf der linken Seite ist nun der Order geöffnet worden. Erstellt über das Icon "Neue Datei", eine Datei mit dem Namen "VSC_Test.ino"
In dieser neuen Datei könnt ihr nun die zwei standard Funktionen setup()
und loop()
erstellen
void setup(){
}
void loop(){
}
Das geht bestimmt auch irgendwie automatisch, ich weis nur (noch) nicht wie.
Wie auch immer. In der blauen Leiste am untern Bildschirmrand, könnt Ihr nun euer Arduino Board und den COM Port auswählen.
Bei mir:
Der erste Code
Über die Taste F1, könnt Ihr Befehle ausführen. Das kennt man ja bereits von anderen Editoren.
Wenn ihr einmal nach "Arduino" sucht, bekommt Ihr alle Befehle angezeigt und könnt zum Beispiel den "Board Manager" öffnen, euren Sketch Überprüfen (Verify) oder Flashen (Upload)
Hat man sich an F1 gewöhnt, geht das alles sehr leicht von der Hand.
Autovervollständigung aktivieren/konfigurieren
Hier kommen wir zu dem Teil, der mich interessiert. Autovervollständigung, wir sind doch alle faul!
Natürlich muss Visual Studio Code dafür wissen, wo eure Arduino Dateien liegen.
In eurem Projekt sollte es einen Ordner .vscode
, geben mit der Datei c_cpp_properties.json
.
Wenn es dies bei euch nicht gibt: F1 => Verify, dabei werden die Dateien erstellt.
Ich habe nun einmal ganz stumpf das JSON bearbeitet, und den Order libraries
meiner
Arduino IDE hinzugefügt. Das geht bestimmt auch über die Oberfläche, aber ich hatte keine Lust zu suchen :)
Autovervollständigung ausprobiert
Wenn ich in meinem Quelltext jetzt einen include
auf eine Header-Datei setzen möchte,
wird diese automatisch vervollständigt:
Das Gleiche gilt natürlich auf für Methoden von Objekten:
Soweit so gut. Wie sieht es mit eigenen Methoden, Objekten und Structs aus?
Im folgenden Beispiel habe ich einfach einen Counter gebaut, welcher jede Sekunde um eins erhöht wird und die Ausgabe auf den seriellen Monitor und ein LCD Display schreibt.
Ich habe hierfür nun ein struct overkill
definiert, indem der Wert gespeichert wird, und
die Methode counter
gebaut, welche den Wert erhöht.
Das ist natürlich alles ziemlicher Blödsinn für ein einfaches i++
, aber
ich möchte ja wissen, wie gut ich dabei unterstützt werden.
Und siehe da, es werden alle Parameter rightig angezeigt und vervollständigt:
Serieller Monitor
Für Debugging und Co benötigt man bei einem Arduino auf jeden Fall den Seriellen Monitor.
In Visual Studio Code erreicht man diesen über die blaue Leiste (Stecker Symbol)
Der serielle Monitor öffnet sich nicht in einem eigenen Fenster, sondern, ähnlich wie die Developer Tools im Browser, einfach als eine Leiste, was ich sehr praktisch finde. Das automatisch Scrollen kann man über das Schloss oben Rechts deaktivieren.
Über F1 => Send Text to Serial Port kann man einen String an das Arduino schicken
Code Upload
Der Upload erfolgt wieder über F1 => Upload. Dabei bekommt man die bekannten Ausgaben, bei mir mit kaputten Umlauten?!
Fehler finden
Leider finde ich die Ausgabe, wenn man eine Methode aufruft, die es nicht gibt, nicht so gelungen.
In der Arduino IDE wird dann die ganze Zeile rot unterlegt, dass man den Fehler schnell sieht.
In Visual Studio Code dageben, wird lediglich eine Info in der Konsole angezeigt. Eventuell kann man das aber irgendwo umstellen, wie gesagt habe Visual Studio Code noch nicht benutzt.
Fazit
Alles in allem bin ich mit Visual Studio Code zufrieden. Ich stehe auf die Autovervollständigung und im Gegensatz zur Arduino IDE werden if-Blöcke, Schleifen und Methoden nicht so creepy eingerückt, was ich dann immer manuell reparieren muss. Hier mal ein Beispiel:
Ich werde VS-Code auf jeden Fall weiter testen!
Zum Testen
Für alle die es interessiert. Diesen Code hatte ich zum Testen gebaut:
#include <LiquidCrystal.h>
#include <TimerOne.h>
int triggerTimer = 0;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
struct overkill {
unsigned int value;
};
struct overkill counterValue;
void setup(){
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Aktueller Wert: ");
Timer1.initialize(5*1000000);
Timer1.attachInterrupt(handleTimer);
overkill counterValue;
}
void loop(){
counter(&counterValue);
Serial.println(counterValue.value);
lcd.setCursor(0, 1);
lcd.print(counterValue.value);
if(triggerTimer == 1){
lcd.setCursor(0, 1);
lcd.print("Timer wurde aufgerufen!");
triggerTimer = 0;
}
if(Serial.available() > 0){
Serial.print("Serielle Eingabe: ");
Serial.println(Serial.readString());
}
delay(1000);
}
overkill getCounter(){
struct overkill counter;
counter.value = 0;
return counter;
}
void counter(overkill* counter){
counter->value++;
}
void handleTimer(){
triggerTimer = 1;
}