ESP8266, ESPlorer, NodeLua, Node-RED, MQTT, Mosquitto und Fritzing

(M)Eine Entwicklungsumgebung für das Internet der Dinge

Es ist schon eine Weile her, seit ich meinen letzten Beitrag über mein Ding-mit-Licht verfasst habe und ich werde regelmäßig gefragt, ob ich denn noch daran arbeite. Ja, das mache ich tatsächlich noch. Aber es dauert nun mal – aus verschiedenen Gründen. Zum einen habe ich nur eine begrenzte Menge Zeit zur Verfügung und zum anderen ist die Entwicklung, soll das Produkt denn auch was taugen, nicht gerade trivial. Darum stelle ich hier einmal zusammen, womit man sich so beschäftigen muss, wenn man im Bereich IoT und mit den von mir erwählten Komponenten entwickelt.

Hier stelle ich meine Entwicklungsumgebung für mein Projekt „Ding mit Licht“ vor. Es ist das Ergebnis intensiver Recherche auf der Suche nach Lösungen, die schnell zum Ziel führen sollen, sich dabei möglichst gut ergänzen und leicht zu bedienen sind. Zuerst das Herzstück des ganzen:

Der ESP8266

ist ein 32-Bit Microcontroller, der in verschiedenen Ausführungen mit WLAN on Board angeboten wird. Ich betrachte hier drei Varianten, von denen ich zwei für mein Projekt verwende:

NodeMCU

ist ein Entwicklungsboard und eignet sich ausgezeichnet, um erste Gehversuche mit einem Breadboard zu unternehmen. Dank eingebautem Spannungswandler lässt sich das Board wahlweise mit 5V oder 3.3V versorgen. Dabei kann die Versorgung über die entsprechenden Pins erfolgen oder über den eingebauten Micro-USB-Anschluss. Idealerweise funktioniert der Spannungswandler auch ausgehend, sollte aber auch nicht zu sehr beansprucht werden! Wird das Board über den 5V-Pin oder USB mit Spannung versorgt, liegt am 3.3V-Pin eben auch Spannung an. Mit diesem Board habe ich angefangen. Aufgrund seiner Größe eignet es sich aber nicht wirklich für die Verwendung in Projekten, in denen jeder Quadratmillimeter zählt.

D1 Mini

War meine erste Wahl als Chip für meine Platinen, bzw. ist es noch, wenn genügend Platz vorhanden ist. Dieser Chip ist deutlich kleiner, als NodeMCU und kommt mit Steckerleisten, die selbst anzulöten sind. Auch er verfügt über einen Micro-USB-Anschluss und kann über die entsprechenden Pins mit 3.3V oder 5V versorgt werden. Die PIN-Belegung entspricht hier der Bezeichnung der Pins des NodeMCU. Die Programmierung kann also zwischen den beiden problemlos übernommen werden.

ESP-12F

Ist meine erste Wahl für Platinen, die kleiner sein müssen. Es ist quasi die minimalistische Version mit WLAN. Der Chip ist nochmal eine ganze Ecke kleiner, als ein D1 Mini und kann mit Stiftleisten oder SMD-Like, ohne Bohrung auf eine Platine gelötet werden. Tatsächlich liegt dieser Chip auf den beiden oben genannten Versionen auf. Der ESP-12F hat keinen Spannungswandler und auch keinen USB-Anschluss. Daher muss die Spannung bereits vor dem Chip auf 3.3V gebracht werden und zur Programmierung des ESP-12F müssen RX und TX selbst ausgeführt werden. Auch müssen bestimmte Zustände auf bestimmten GPIOs zur Boot-Zeit gewährleistet sein. Daher ist der Einsatz des ESP-12F ein klitzekleinesbisschen komplizierter, als die Verwendung der oben genannten.

Gemein ist allen drei Varianten, dass sie mit 4MB-Speicher daherkommen. Allerdings können sie mit unterschiedlicher Firmware ausgestattet sein, was letztendlich aber keine Rolle spielt, den sie werden ohnehin mit der NodeLua-Firmware bespielt. Und da sind wir dann auch schon beim nächsten Thema!

NodeLua

ist eine Firmware die es erlaubt, den ESP8266 in Lua zu programmieren. Ich hatte bis vor kurzem – bis auf ein Projekt, das schon eine Weile zurückliegt – keine weitere Erfahrung mit Lua-Programmierung. Meine ersten Tests haben mich allerdings sehr schnell überzeugt, dass ich das „Ding mit Licht“ mit Lua umsetze. NodeLua macht es einem dabei aber auch wirklich leicht!

Um die neueste NodeLua-Firmware auf den Chip zu bringen, benötigt man zunächst einen Flasher. Eine sehr gute Anlaufstelle ist die Seite von NodeMCU, auf der verschiedene Alternativen zur Auswahl stehen. Ich selbst habe mich für den NodeMCU-Flasher entschieden, der – auch wenn er, wie auf der Seite angemerkt – trotz längerer Zeit ohne Updates, seinen Dienst einfach und zuverlässig verrichtet.

Die benötigte Firmware muss man nicht selbst kompilieren! Man kann sich die Firmware, mit den Modulen, die man benötigt, über https://nodemcu-build.com/ online kompilieren lassen und dann bequem herunterladen. Man muss nur aufpassen, dass man wirklich die Module auswählt, die man für den späteren Einsatz auch benötigt.

Wurde die neuen Firmware auf den Chip gespielt, kann es mit der Programmierung weiter gehen.

ESPlorer

ist der Editor meiner Wahl. Zugegeben, er ist gewöhnungsbedürftig, aber er funktioniert! Dabei bietet ESPlorer alle Funktionen, die zur Programmierung des ESP8266 nötig sind. Man kann die fertigen Lua-Skripte auch in Bytecode umwandeln lassen und so – je nach Umfang – noch einige Kilobyte einsparen. Einen Geschwindigkeitsgewinn wird das wohl auch bringen, ist aber nicht wirklich fühlbar, da der kleine Prozessor schon so – gefühlt – rasend schnell ist. Das wird wohl auch daran liegen, dass auf dem Chip in der Regel ja keine gar so komplizierten Programme ablaufen müssen, sondern er eher dazu verwendet wird, Dinge zu schalten oder gemessenes zu melden.

Und genau um das geht es: Schalten, Messen und Melden! Meine ersten Versuche habe ich noch mit einfachen HTTP-Post und -Get-Anweisungen durchgeführt. Es wird dabei aber ziemlich schnell klar, dass auch die Verwendung von Sockets nicht wirklich komfortabel ist und mit wachsender Infrastruktur auch der Aufwand wächst, so etwas zu verwalten. Und so bin ich über DAS Protokoll für das Internet der Dinge gestolpert und sofort daran hängen geblieben. Ich liebe es!

MQTT

ist ein 1999 von IBM entwickeltes Protokoll, das zum Ziel hat, auch in unzuverlässigen Netzwerk-Umgebungen, zuverlässig und schnell Steuer- und Messdaten zu übertragen. Es ist inzwischen frei verfügbar und sogar zu einem spezifizierten Standard für das Internet der Dinge geworden. Ich frage mich, warum ich nicht schon viel, viel früher über dieses Protokoll gestolpert bin, denn dann hätte ich auch schon viel, viel früher mit dem „Ding mit Licht“ angefangen. Vermutlich hätte ich auch auf diesem Wege den ESP8266 entdeckt, der sich ebenfalls lange vor mir versteckt hielt.

Nun gut, MQTT ist ein sehr leichtes Protokoll, das nach dem Prinzip „Veröffentlichen“ und „Abonnieren“ arbeitet. Im original heißt das „Publish and Subscribe„. Dabei können Sensoren und/oder Aktoren bestimmte „Überschriften“ oder besser „Topics“ abonnieren oder auf solche Meldungen senden. Dabei reden die Geräte nicht direkt miteinander, sondern über einen sog. Broker. Es gibt zahlreiche Beispiele im Netz, wenn man meinen, hier eingebetteten Links folgt. Deswegen soll es hier mit der Beschreibung reichen.

Mosquitto

ist neben anderen Brokern wahrscheinlich der Broker mit der höchsten Verbreitung. Ich habe mich auch für den Einsatz von Mosquitto entschieden, weil er alle wichtigen Betriebssysteme unterstützt, hervorragend auf einem Raspberry laufen soll, er alle wichtigen Fuktionalitäten von MQTT unterstützt und nicht zuletzt, weil Mosquitto ein OpenSource-Projekt ist.

Mosquitto wird in meinem Projekt auf einem Raspberry Pi installiert, welcher seinerseits auf der einen Seite per Ethernet mit unserem lokalen Netz verbunden wird und auf der anderen Seite ein exklusives WLAN für alle MQTT-Geräte spannen wird.

MQTT-Spy

kann man wohl am besten mit einem geschwätzigen MQTT-Client vergleichen. MQTT-Spy bietet die Möglichkeit Topics zu abonnieren und Meldungen auf Topics zu senden. Dabei bekommt man eine komfortable Ansicht über den MQTT-Traffic, der dabei entsteht. Hiermit lassen sich also Clients simulieren und so simulierte oder reale Umgebungen testen und debuggen.

MQTT-Dash

ist eine Android-App, mit der sich Buttnons und Anzeigen erstellen lassen, die MQTT-Nachrichten senden oder solche auswerten und entsprechend anzeigen.

Nun ist MQTT zwar das ideale Protokoll für die Kommunikation aller zu überwachenden und zu steuernden Geräte, aber die Topics von Hand abzusetzen oder diese hart mit Aktionen in den Aktoren und Sensoren zu verknüpfen, verspricht auch keine besonders flexible Zukunft. Und da kommt ein geniales Tool ins Spiel, dessen Wurzeln ebenfalls bei IBM zu finden sind.

Node-RED

kann man am besten mit einem Schaltschrank vergleichen, in dem Steuerleitungen nach Belieben von jedem beliebigen Gerät zu jedem beliebigen Gerät gesteckt werden können. Mehr noch, man kann auch Geräte dazwischen stecken, um bestimmte Ereignisse zu beeinflussen oder darauf zu reagieren. Node-RED stellt dazu eine Web-Oberfläche zur Verfügung, auf der man seine Geräte (Nodes) mit virtuellen Kabeln vernetzen kann. Auf der Strecke können so fast beliebig viele Nodes vom Eintreffen eines Ereignisses bei der ersten Node bis zur letzten Node eingefügt werden.

Sofort neugierig und jetzt süchtig nach Node-RED wurde ich übrigens durch dieses Video:

Der Macher dieses Videos hat mich außerdem mit seiner speziellen Art der Präsentation gepackt. Sehenswert!

Amazon Echo

So richtig cool und smart wird es erst, wenn die Geräte sich nicht nur über Apps und Schalter steuern lassen, sondern auch über Sprache. Hier bietet Amazon Echo sicher den einfachsten und interessantesten Einstieg. Amazon Echo ist schon von Haus aus recht interessant. Technisch könnte sich damit allerdings noch viel mehr machen, würde Amazon nicht so unsagbar langsam neue und nützliche Funktionen genehmigen. Als Beispiel seien nur genannt, die Stimmerkennung oder Raum-(Geräteabhängige) Aktionen auf gleiche Sprachkommandos. Mit der Einführung von „Routinen“ ist schon ein guter Schritt in Richtung „Stapelverarbeitung“ getan. Die Funktionen sind allerdings noch ziemlich beschränkt.

Einige Dinge lassen sich mit Node-RED basteln – aber leider nicht alles, was – wie schon gesagt – rein technisch durchaus als „Standard-Funktionalität“ möglich wäre.

Also, wir haben eine fertige Entwicklungsumgebung und ein Breadboard, auf dem wir unsere Schaltungen ausprobieren. Wenn alles funktioniert, dann wollen wir natürlich ordentliche Platinen haben, die dann mit unseren ESP12f oder D1 Minis bestückt werden und das tun, was sie tun sollen.

Fritzing

ist eine frei verfügbare Platinen-Layout-Software. Fritzing stellt drei verschiedene Bearbeitungs-Modi zur Verfügung:

  1. Breadboard-Ansicht
  2. Schaltplan-Ansicht
  3. Platinen-Ansicht

In der Breadboard-Ansicht können – wie der Name schon sagt – Schaltungen auf dem Breadbord geplant werden. Dafür bietet Fritzing eine beeindruckende Auswahl an Bauteilen, die stetig erweitert wird. Es können aber auch Lochraster-Platinen in dieser Ansicht verwendet werden, um so Testplatinen zu entwerfen.

In der Schaltplan-Ansicht werden eben Schaltpläne gezeichnet und in der Platinen-Ansicht kann dann eine fertige Platine entworfen werden.

Das tolle an Fritzing ist, dass egal in welcher Ansicht man arbeitet, alle Änderungen auf die beiden anderen Ansichten übertragen werden. Man muss dann allerdings ggf. die Bauteile entsprechend ausrichten, denn neue oder geänderte Bauteile oder Verbindungen werden in den anderen Ansichten nur stumpf hinzugefügt.

Wenn ich also in der Schaltplan-Ansicht einen Schaltplan entwerfe, wird mir in der Platinen-Ansicht zunächst ein Durcheinander an Bauteilen mit gestrichelten, geraden Linien für die jeweiligen Verbindungen gezeigt. Und gerade die Anzeige der Verbindungen erleichtert das Layout so ungemein. Schließlich kann eine Leiterbahn auf der Platine einen völlig anderen Weg zwischen den Bauteilen nehmen, als es im Schaltplan scheint und erfüllt doch genau die Funktion, wie sie im Schaltplan vorgesehen war.

Zugegeben, Fritzing ist hier und da etwas schwerfällig. Gerade beim Start braucht man Geduld. Und die Auto-Routing-Funktion des Platinen-Layouts ist auch eher – bescheiden. Mit der Zeit entwickelt man aber selbst die Fähigkeit, Leiterbahnen sinnvoll von Hand zu verlegen und erzielt damit m. E. deutlich bessere Ergebnisse, als durch die Funktion in Fritzing.

Wenn wir also unsere Platinen entworfen haben und sicher sind, dass sie so funktionieren, dann wollen wir sie auch irgendwann in der Hand haben.

Dazu kann man die Entwürfe in verschiedenen Formaten aus Fritzing exportieren. Wer die Zeit und das Material hat, kann natürlich seine Platinen selbst belichten. Ich habe weder die Zeit, noch den Nerv mich mit der Eigenproduktion von Platinen, vor allem wenn sie Doppelseitig sind und viele Vias beinhalten, auseinanderzusetzen. Daher habe ich mich auf die Suche nach einer externen Lösung gemacht wurde schließlich fündig.

PCB-Way

ist ein chinesisches Unternehmen, das „Platinen-Prototypen“ auch in geringen Mengen zu einem sehr günstigen Preis fertigt. Der Upload der Daten gestaltet sich einfach. Danach wird der Entwurf wohl noch geprüft und wenn nichts gegen das Design spricht, bekommt man eine Nachricht und kann die Bestellung abfeuern.

Die Preise sind wirklich unglaublich klein und die Qualität der Boards, die ich nach meiner ersten Bestellung erhalten habe, hat mich wirklich überrascht. Da hat – bis auf eine Leiterbahn, aber das kann auch mein Fehler gewesen sein, alles gepasst! Die Beschriftung war klar und deutlich lesbar, die Vias passten wie Faust aufs Auge, die Kanten waren sauber gefräst und der Schutzlack überall und gleichmäßig verteilt.

Das teuerste an einer Bestellung bei PCB-Way ist der Versand. PCB-Way liefert via DHL-Express nach Deutschland, und das quasi in Lichtgeschwindigkeit. Nun ist der Versand mit DHL-Express schon nicht unbedingt billig und obendrauf kommt noch die Zollabwicklung, die DHL-Express ebenfalls übernimmt. Das lässt sich DHL-Express aber ebenfalls gut als „Kapitalbereitstellungsprovision“ bezahlen, da sie das Geld für die Einfuhrumsatzsteuer vorstrecken. Dafür war meine erste Bestellung nach nur drei Tagen bei mir.

Es wäre auch möglich, einen günstigeren Versand-Dienstleister zu wählen. Aber dann kann es wieder ewig dauern, bis die Platinen ankommen und man muss auf jeden Fall zum Zoll, um die Steuern zu bezahlen. Alleine das rumdümpeln beim Zoll kann schon wieder Tage dauern. Und warum muss man auf jeden Fall zum Zoll? Weil PCB-Way – anders als andere China-Versender – nicht irgendeine Fantasie-Rechnung auf das Paket pappt, sondern den tatsächlich bezahlten Preis. Also mit bestellen und hoffen, dass es durch geht, ist hier nichts zu holen.

Meine nächste Bestellung wird also entsprechend umfangreicher, wenn erst alle Platinen-Layouts fertig sind und auf Lochraster-Platinen getestet wurden. So verschiebt sich das Verhältnis zwischen Bestellwert und Versandkosten in den günstigeren Bereich.

Alles zusammen

ist das die Basis für mein Ding mit Licht. Ich könnte zu jeder einzelnen Überschrift dieses Beitrags ganze Romane schreiben. Aber genau wie in der Software-Entwicklung schenke ich mir das, was andere bereits getan haben. Folgt man den Links in diesem Beitrag, findet man ohne Ende weitere Informationen.

Ich habe diese grobe Übersicht nur als Beispiel für (m)eine Entwicklungsumgebung aufgestellt. Außerdem soll es meinen ungeduldig auf die Umsetzung wartendenden Freunden vermitteln, was überhaupt hinter so einem Projekt steckt. Jeder einzelne Punkt dieser Liste erfordert, sich zunächst damit auseinanderzusetzen, Alternativen zu betrachten und schließlich, hat man sich erst entschieden, zu lernen damit umzugehen. Jeder Punkt für sich hat „best Practices“. Und für alles zusammen muss man ebenfalls, seine eigenen, individuellen Praktiken schaffen. Sonst bekommt man am Ende nur ein halbgares Produkt. Soll es aber stabil, zuverlässig und sicher sein, braucht es eben seine Zeit.

Ich wünsche allen, die sich hier her verirren, einen guten Rutschs und ein erfolgreiches und gesundes Jahr 2018!

 

Kommentar verfassen

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