Embedded Arduino Entwicklung mit PlatformIO

In letzter Zeit ist bei uns vor Ort das ESP8266-Fieber ausgebrochen!
Der ESP8266 ist ein sehr kleiner Microcontroller, recht preiswert, mit amtlich Dampf unter der Haube, wenig Energieverbrauch und als Sanehäubchen oben drauf: WLAN!!1!
Eine sehr interessante Plattform, womit sich sehr interessante Projekte und Ideen umsetzen lassen.
Deshalb gibt es diese bei uns hin und wieder im Getränkeautomaten (meist nur kurz, weil sofort ausverkauft..).

ESP8266 & Arduino & PlatformIO

Und was hat der ESP8266 jetzt mit Arduino zu tun?
Hier muss man ein bisschen differenzieren, denn das Arduino Projekt besteht aus mehreren Komponenten. Dies sind:

  • die Hardware → Microcontroller Boards: z.B. Arduino Uno, Arduino Mini, Arduino Nano…
  • die Entwicklungsumgebung (IDE) → das Programm, das auf dem lokalen Rechner läuft, um dort zu programmieren, kompilieren, Hardware zu flashen..
  • das Framework → ein großes Paket an Bibliotheken, Funktionen & Helfern die eine von der Hardware unabhänige Programmierung erlauben.
  • (… und vieles mehr)
Besagtes Framework wurde für den ESP8266 portiert.
Das heißt: Wer schon mal ein Programm für einen Arduino Microcontroller geschrieben hat kann nun auch, ohne groß umzulernen, den ESP8266 programmieren.
Und was ist PlatformIO?
PlatformIO ist ein quelloffenes
„Ökosystem“, das es ermöglicht für eine große Reihe von Microcontrollern auf Grundlage einiger Frameworks zu entwickeln.
(Zum Beispiel lassen sich damit Arduino Microcontroller mit dem Arduino-Framework programmieren..)
Dazu gibt es die PlatformIO IDE, die als Plugin für den Text-Editor Atom daherkommt, und damit PlatformIO aus dem Editor heraus kontrollierbar macht.
Mir persönlich sagt die Arduino IDE nicht sehr zu. Also hab ich mich auf die Suche nach Alternativen begeben, und eben PlatformIO entdeckt.
Aller Anfang ist schwer, um Abhilfe zu schaffen, möchte ich in diesem Artikel ein paar Dinge behandeln:
  • Wie man PlatformIO installiert und zum laufen bekommt.
  • Darin ein neues Projekt erstellt.
  • Dieses kompilert, um das auf den ESP8266 zu flashen.
Natürlich lässt sich PlatformIO auch ohne die IDE nutzen, und/oder alle dazu benötigten Komponenten separat installieren.
Dies würde aber den Rahmen des Artikels sprengen, ich beschränke mich auf die Installation mittels Atom-Plugin, da dieses alle Abhänigkeiten mitbringt.

Packliste

  • Als Basis: Den Atom Text Editor.
  • Das PlatformIO IDE Editor Plugin (installiert man in Atom selbst, siehe unten)
  • Clang aus dem LLVM Projekt. Bei der Installation des Plugins wird erkannt, dass Clang fehlt, und es wird ein passender Download angeboten.
  • Einen ESP8266 natürlich. Im Beispiel nutze ich das NodeMCU DEVKIT 1.0 von Amica (das Selbe wie in diesem Artikel hier).
  • Serielle Treiber passend zum Betriebssystem und dem ESP8266.
    Das NodeMCU DEVKIT hat einen CP2102 verbaut, das wären dann die CP210x USB to UART Bridge Virtual COM Port (VCP) Treiber von Silicon Labs.

Installation

Treiber

Falls noch nicht vorhanden, beginnt man mit dem seriellen Treiber. Die Installation variiert je nach Betriebssystem und dem ESP8266.

  • Auf dem Mac lohnt sich der Blick in Homebrew, der Treiber für den CP210x z.B. ist mit dabei:

    brew tap caskroom/drivers
    brew install silicon-labs-vcp-driver
  • Für Wintendo gibt es einen Installer auf der Website.
  • Linux: ja!
  • FreeBSD: CP210x Treiber sind mit im Basissystem: uslcom stellt z.B. /dev/cuaU0 bereit.

Atom Text Editor

Die Installation von Atom selbst bedarf hoffentlich keine größere Erklärung: Die neueste Version herunterladen, und installieren..

atom welcome

Danach begrüßt uns der „Welcome Guide“
Den Haken vor „Show Welcome Guide when opening Atom“ sollte man getrost weg machen.

PlatformIO IDE

Es folgt die IDE: In Atom geht es in die Einstellungen (File > Settings), dort findet sich in der linken Leiste unten der Punkt Install.

install ide
Dort nach platformio-ide suchen, und schön brav auf Installieren klicken…

Das ganze dauert ein bisschen, es wird ein eigener Python Interpreter (2.7) installiert, Platformio selbst als Package darin registriert, und weitere Abhängigkeiten vom Plugin selbst werden installiert (Debugger, Terminal)…

LLVM/Clang

Bei der Installation wird erkannt, dass Clang auf dem System nicht vorhanden ist:

clang missing

Dieser Schritt ist nicht zwingend notwendig, wird aber wärmstens empfohlen.

Unter Windows muss man LLVM der PATH Variable hinzufügen lassen.

clang options

Ob das geklappt hat, kann man in der cmd.exe überprüfen:
Gibt man dort echo %PATH% ein, dann sollte die Ausgabe das hier (oder so ähnlich) mit enthalten: C:\Program Files\LLVM\bin;

Konfigurieren

install finished
Hurra, wir sind endlich fertig.
Nach dem Neustart erscheint ein neuer Menüpunkt namens PlatformIO.
Ein Blick in die IDE Settings (PlatformIO > Settings > PlatformIO IDE) lohnt sich:
disable homescreen
Nein, danke, ich möchte gerne sofort losarbeiten, und nicht jedes mal das Zeug wegklicken…
disable login
Habe keinen Account, brauchst mich auch nicht jedes mal wieder danach fragen, danke…

Programmieren

Jetzt können wir loslegen, dazu brauchen wir ein neues Projekt (PlatformIO > Initialize or Update PlatformIO Project):

initialize project

Das NodeMCU DEVKIT hat einen ESP8266-12E verbaut.
Dann noch einen neuen Ordner dazu, fertig.
Fehlende Plattformen/Bibliotheken werden automatisch nachinstalliert.

Innerhalb des Projekts wird im src Ordner der eigene Code abgelegt:

new sourcefiles
Wir brauchen zwei Dateien:

  • src/main.hpp
  • src/main.cpp

main.hpp

Es lassen sich ordentliche Header Files schreiben. Wunderbar.
Wichtig ist, dass das #include <Arduino.h> niemals fehlen sollte. Auch müssen die Signaturen für setup() und loop() definiert werden.
#define LED_PIN D0 verweist auf den Pin der eingebauten Leuchtdiode. (Beim NodeMCU DEVKIT zumindest, ggf. anpassen)
Dazu noch zwei Methoden, damit das Beispiel nicht so langweilig wird.

#ifndef __main_hpp__
#define __main_hpp__

#include <Arduino.h>

#define LED_PIN D0

void setup(void);
void loop(void);

void flashLed(void);
String getUptime(void);

#endif

main.cpp

Hier nicht vergessen, die main.hpp einzubinden.

#include "main.hpp"

void setup(void) {
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, HIGH);
  Serial.begin(112500, SERIAL_8N1);
  Serial.println("setup() done");
}

void loop(void) {
  flashLed();
  delay(2048);
  Serial.println("uptime: " + getUptime());
}

void flashLed(void) {
  digitalWrite(LED_PIN, LOW); delay(256);
  digitalWrite(LED_PIN, HIGH); delay(128);
  digitalWrite(LED_PIN, LOW); delay(256);
  digitalWrite(LED_PIN, HIGH); delay(128);
}

String getUptime(void) {
  unsigned long sec = millis() / 1000;
  unsigned long min = sec / 60;
  unsigned long hrs = min / 60;
  unsigned long day = hrs / 24;
  sec = sec - (min * 60);
  min = min - (hrs * 60);
  hrs = hrs - (day * 24);
  static char res[16];
  if (day >= 1) {
    sprintf(res, "%dd %02d:%02d:%02d", day, hrs, min, sec);
  } else {
    sprintf(res, "%02d:%02d:%02d", hrs, min, sec);
  }
  return String(res);
}
Es folgt der Moment der Wahrheit – Keine Fehler gemacht? Kompilert es?
In der linken Seitenleiste sind ein paar Schnellstarter:

  • Haken → Kompilieren
  • Pfeil → Kompilieren & Upload
  • Mülltonne → Aufräumen
compile and upload
Beim initialen Kompilieren oder Upload werden weitere Abhängigkeiten automatisch nachinstalliert..
Der Schnellstarter mit dem Stecker-Symbol öffnet den „Serial Monitor“

serial monitor
Den passenden Port auswählen, die Baudrate anpassen. Muss man nur einmalig machen, die Einstellungen werden gespeichert und beim nächsten mal mit vorgeschlagen. Nett.
Erfolg! Freude! Wir sind fertig!

final
Auf dem Schreibtisch liegt nun ein ESP8266, der auf der internen LED fleißig blinkt, und die Uptime im seriellen Monitor anzeigt.

Fazit

Von Atom mag man halten was man will. Die Entscheidung einen bereits existierenden Editor zu erweitern finde ich aber gut.
Zumindest klüger als mit einer Eigenentwicklung anzutreten, so wie es bei der Arduino IDE der Fall ist.
Es existieren bereits eine Menge interessanter Plugins, die Oberfläche sieht schicker aus, die Keybord Shortcuts sind sinnvoll belegt..
An so Details, dass sich der Serielle Monitor automatisch beendet, wenn man versucht eine neue Firmware zu flashen, sieht man, dass jemand mitgedacht hat (würde die Verbindung offen bleiben, bricht der Flash-Vorgang mit einem Fehler ab → „Verbindung nicht möglich“).

Hübsch: Der Source-Code hat korrekte Dateiendungen, nicht mehr dieses unsägliche .ino oder .pde, das von keinem normalen Syntax-Highlighter erkannt wird.
Da am Ende alles ganz normaler C++ Quellcode ist, lässt sich auch komfortabel die #include Direktive nutzen.
Dies hilft ungemein bei größeren Projekten, um die Übersicht zu behalten.
Somit ist es ganz einfach möglich auch Objekt-Orientiert für die Microcontroller zu programmieren. Mach ich in letzter Zeit sehr gerne, und muss gestehen, erst dadurch ist die Arduino Plattform für mich interessant geworden…
Die Installation & Einrichtung macht man zum Glück nur einmal. Läuft alles wie es soll, kann man viel Freude am Programmieren haben!

Viel Spaß am Gerät!

Videoinstallation im Kunsthaus Wiesbaden

Im Zuge der Ausstellung „Berna Reale – über uns – zeitgenössische Kunst aus Brasilien“ haben wir eine Videoinstallation gebaut, mit der es möglich ist eine Playlist von 8 Videos auf einer beliebigen Anzahl von Displays oder Beamern auszugeben. Ebenso ist es möglich die ganze Anlage zeitgesteuert zu starten und zu beenden.Wir haben die Arbeit in einem Video dokumentiert.

Wer sich die Austellung noch vor Ort ansehen mag, sie läuft noch bis zum 16.04 und Eintritt ist frei.

Jahres Rückblick 2016

Hier ist unser Jahresrückblick 2016:

Themen übers Jahr:

Briefwahlen in Wiesbaden:

Im Januar endeckte ein Mitglied das es möglich war mit dem Namen und Geburtsdatum die Briefwahl für eine Person Online zu beantragen und einen vollen Datensatz aus dem Wählerverzeichnis zu erhalten, inklusive Adressdaten. Daraufhin haben wir zusammen mit dem ZDF diese Nachlässigkeit der Stadt gemeldet und als POC den Wahlschein von unserem OB veröffentlicht.

http://www.heute.de/hacker-beantragen-briefwahlunterlagen-fuer-wiesbadener-ob-ohne-dessen-wissen-41957210.html

https://www.wired.de/collection/latest/ccc-hacker-entdecken-eine-sicherheitsluecke-bei-der-wahl-wiesbaden

http://www.focus.de/regional/wiesbaden/wahlen-hacker-beantragen-wahlunterlagen-fuer-wiesbadener-ob_id_5238222.html

http://www.welt.de/regionales/hessen/article151466337/Hacker-beantragen-Wahlunterlagen-fuer-Wiesbadener-OB.html

App-Banking:

Im Februar haben wir dann noch mal auf die Gefahren von Mobilen Banking hingewiesen.Leider scheint die Gefahr den Menschen noch nicht all zu bewusst zu sein.

16.02.2016 Banking http://www.rhein-main-presse.de/vermischtes/vermischtes/die-schattenseiten-der-bequemlichkeit_16646569.htm
18.02.2016 Bargeldloses Bezahlen SWR Interview 15.02.2016 Heimathafen

http://www.swr.de/zur-sache-rheinland-pfalz/streit-ums-bargeld-zahlen-wir-bald-nicht-mehr-mit-muenzen-und-scheinen/-/id=13831244/did=16755184/nid=13831244/19nmq55/index.html

Hype-Themen:

Der Sommer war vor allem durch die Hype-Themen Darknet und Jackpotting geprägt:

15./16.08.2016 Jackpotting http://www.swr.de/landesschau-aktuell/rp/mainz/geld-der-kunden-nicht-betroffen/-/id=1662/did=17971630/nid=1662/9cso3u/index.html

 

09.09.2016 Darknet http://www.silver-tipps.de/von-illegalen-geschaeften-und-geschuetzten-bereichen-des-internets/

Rechtspopulismus, Homophobie und Hackerethik

Der September und Oktober war stark durch unsere Bündnis Arbeit für Akzeptanz und Vielfalt geprägt. Wir haben erfolgreich mit über 100 Verbänden ein Starkes zeichen gegen die sogennante  „Demo für Alle“ gesetzt und klar Position für Offenheit und Akzeptanz bezogen.

26.10.2016 Ihr seid nicht alle https://www.jungewelt.de/2016/10-27/035.php?sstr=demo%7Cf%C3%BCr%7Calle

 

https://www.cccmz.de/fortschritt-darf-sich-nicht-auf-technik-beschraenken/

Jungbrunnen

Im Dezember haben wir zusammen mit unseren Freifunkern die IT-Infrastruktur für den Stadtjugendring im Jungbrunnen gebaut. Da wir Jugendarbeit für wichtig halten wussten wir das wir das Projekt unterstützen wollen das Allen Jugendverbänden in Wiesbaden Räume zur Verfügung stellt. Natürlich haben wir die Gelegenheit genutzt um gleich noch einen weiteren Freifunkknoten aufzubauen.

33c3

Der November und Dezember standen voll im Zeichen des 33c3 auf dem wir dieses jahr gleich drei Assemblys hatten.

Ferienspiele

Auch dieses jahr haben wir wieder unseren Roboterkurs für die Ferienspiele der Stadt Wiesbaden durchgeführt. Kinder und Jugendliche konnte so einen ersten Eindruck von Robotik und Informatik bekommen.

Fnordfunk

Unsere Radiosendung auf Radio Rheinwelle läuft auch noch gewohnt unregelmäßig. http://fnordfunk.de/

Fortschritt darf sich nicht auf Technik beschränken

„Beurteile einen Hacker nach dem, was er tut, und nicht nach üblichen Kriterien wie Aussehen, Alter, Herkunft, Spezies, Geschlecht oder gesellschaftliche Stellung.“
-Hackerethik

Auch wenn wir uns vor allem mit technischen Themen beschäftigen, müssen wir bei menschenverachtenden Äußerungen den Mund aufmachen.

In unserem Umfeld befinden sich Schwule, Lesben, Transgender und queere Menschen und wir bekommen mit, dass diese Mitmenschen immernoch weit entfernt davon sind, akzeptiert zu werden und dass sie weiter unter Vorurteilen und Anfeindungen leiden.
Das ist für uns nicht hinnehmbar!
Deshalb haben wir uns sehr gefreut, als der neuen Lehrplan des Landes Hessen beschlossen wurde. Wir halten dies für einen wichtigen Schritt in die richtige Richtung. Die Mobilmachung zur sogenannten „Demo für Alle“ gegen den Lehrplan hat uns somit zum Handeln gezwungen.

Die Organisationen, die zur sogenannten „Demo für Alle“ aufrufen, entlarven sich glücklicherweise selbst als Ultra-Konservative und Rechtspopulisten.

Es gibt zu unserer Freude ein sehr breites „Bündnis für Akzeptanz und Vielfalt“, das mittlerweile von mehr als 70 Verbänden und Parteien getragen wird.
Zusammen mit diesen wollen wir folgenden Aufruf teilen:

Aufruf Bündnis für Akzeptanz und Vielfalt

Weitere Informationen: www.ihr-seid-nicht-alle.de
Pressekontakt:
Christian Schuster
Chaos Computer Club Mainz/Wiesbaden
Sedanplatz 7
65183 Wiesbaden
kontakt@cccmz.de
www.cccmz.de

Download Pressemitteilung