H801 WiFi im Gehäuse

H801 WiFi im Gehäuse

Ich weiß nicht mehr wie ich darauf gekommen bin, aber vor einiger Zeit habe ich mir vom Chinesen meines Vertrauens ein Modul zur LED-Steuerung schicken lassen. H801Wifi wird es genannt, man bekommt es für etwa neun Euro. Dazu gibt es eine App um per Telefon die Lampe zu steuern, aber die habe ich gar nicht erst ausprobiert.

Im Prinzip tut das Ding das gleiche wie mein Projekt IRlicht — von dem ich sicher war dass ich es veröffentlicht hätte (wird nachgeholt): es steuert über mehrere Kanäle die Helligkeiten von LED-Streifen. Meine selbstgebaute Steuerung macht das mit vier Kanälen: RGBW. Also drei bunte Farben und zusätzlich ein Kanal für weiß. Dieses Ding macht RGBWW, so könnte man tatsächlich nicht nur einen Weiß-Streifen anschließen, sondern beispielsweise einen warm- und einen kalt-weißen.

Mein Eigenbau wird per Infrarot-Fernbedienung gesteuert. In diesem Modul steckt ein ESP8266, also arbeitet es mit WLAN. Ich bastele schon länger an einer Firmware für kleine WLAN-Geräte, die kommuniziert auf der Basis von MQTT (hatte ich hier schon erwähnt). Dieses Modul wäre ein Paradebeispiel dafür. Fraglich war nur ob man die Firmware darauf zum Laufen kriegt…

Stellt sich raus: ja. Kriegt man. :-)

Programmier-Jumper gesetzt, serielle Schnittstelle angeschlossen

Programmier-Jumper gesetzt, serielle Schnittstelle angeschlossen

Ich bin nicht der erste der das versucht. Andreas Hölldorfer hat das auch schon gemacht und beschrieben. Dass es so einfach wäre hätte ich nicht vermutet. Fast schon enttäuschend… ;-)

Auf der Platine — dank hervorragender Fotos des Anbieters wusste ich das schon vor dem Kauf — befindet sich eine gut beschriftete serielle Schnittstelle. Und direkt daneben ist ein Anschluss der praktisch nach einem Jumper schreit. Setzt man den Jumper, kann man über die serielle Schnittstelle flashen. Direkt aus der Arduino-Umgebung heraus. Dazu habe ich einfach meinen USB-Seriell-Adapter zwischen Computer und Modul gehängt (ohne externe Stromversorgung, keine Ahnung ob das geschadet hätte) und in der IDE folgendes eingestellt:

  • Board: „Generic ESP8266 Module“
  • Flash Size: „1M (64k SPIFFS)
  • Upload Speed: „1152200“

Nachdem ich RX und TX richtig herum angeschlossen hatte konnte ich direkt flashen.

Ich hatte wie gesagt schon eine Firmware für meine Zwecke fertig, basierend auf dem exzellenten Homie for ESP8266 Framework. Naja, fast: bis jetzt kann die nur RGB, noch kein RGBWW. Aber das einzige was ich für RGB ändern musste waren die Pins. Das Header-File für „Generic ESP8266 Module“ kennt keine sprechenden Bezeichnungen für die Pins. Die Belegung hat Andreas Hölldorfer schon herausgefunden (er scheint aber eine andere Hardware zu haben, bei mir waren einiges Pins vertauscht). Folgendes funktioniert bei mir:

Pin Funktion
15 Ausgang rot
13 Ausgang grün
12 Ausgang blau
14 Ausgang weiß 1
4 Ausgang weiß 2
1 Interne LED grün / Signal
5 Interne LED rot / Power

Schön ist, dass nach dem initialen Flashen auch schon das OTA-Update (Over The Air) funktioniert. So konnte ich das Gehäuse direkt wieder veschliessen, alle weiteren Updates kommen durch die Luft. :-D

Per Mail hat mir Andreas Dhum Kommentare zu meinem Artikel zum blauen Licht in der DDR geschickt. Als Fan blauen Lichtes finde ich das spannend, und er hat mir freundlicherweise erlaubt ein paar Auszüge zu posten:

Es ist schon richtig, dass die hellen blauen und echten grünen LEDs auf Gallium-Nitrid-Basis erst Mitte der 1990er von Nichia auf den Markt kamen, da erst damals der Trick entdeckt wurde, die Elektronen vom Leitungsband wieder in’s Valenzband unter Abgabe eines blauen (oder grünen) Photons zu bewegen. Allerdings gab es schon viel früher blaue LEDs auf Basis von Siliziumcarbid (SiC), die allerdings keine große Helligkeit erzeugten (7 – 14 mcd bei Ø5 mm) und verhältnismäßig teuer waren (ca. 3 DM gegenüber 10 Pf für „normale“ LEDs).

Nichtsdestotrotz hat sich VW nicht davon abhalten lassen, damit die LED-Optik der alten Golfs auszustatten (die Fernlichtleuchte muss blau sein).

Zumindest kann ich mich daran erinnern, dass mein Fahrschul-Golf 1989 eine blaue LED für’s Fernlicht hatte. Hatte selbst ziemlich gestaunt, als ich die erste Nachtfahrt hatte. Das war in der Wendezeit, habe damals extra die Führerschein-Prüfung um zwei Wochen verschoben, um noch an einer Kursfahrt in die Noch-DDR teilnahmen zu können.

weiterlesen

Blaues Licht im Licht...

Blaues Licht im Licht…

Vor einigen Tagen habe ich mir den wirklich guten Film Das Leben der Anderen (2006) angesehen. Es geht um einen Schriftsteller in der DDR, der von der Stasi überwacht wird. Der Großteil des Films spielt 1984, ein paar Schluss-Szenen zeigen die Hauptfiguren nach der Wende.

Für mich als Wessi der zur Zeit der Wende erst 14 war ist das alles sehr weit weg. Unvorstellbar, was die sich ihrem Volk gegenüber herausgenommen haben. Ich frage mich ob und wenn ja an welchen Stellen das im Film übertrieben oder zumindest komprimiert worden ist — also dass vielleicht Erlebnisse von verschiedenen Bürgern zu einer einzelnen Handlung zusammengefasst wurden.

Aber ich schweife ab.

Mir ist eine Besonderheit an dem Abhör-Equipment aufgefallen das gezeigt wurde: an den Geräten befinden sich blaue Displays. Also nicht nur blaue Lämpchen, sondern offenbar Siebensegmentanzeigen. Ist vermutlich jedem ins Auge gesprungen der den Film gesehen hat, oder? :-)

Das ist mir nicht aus dem Kopf gegangen, da ich weiß dass blaue LEDs erst in den 90ern auf den Markt kamen. Die Trivia in der IMDB betonen dass es sich um originale Ausrüstung der Stasi handelte:

All the listening/recording props used in the film are actual Stasi equipment on loan from museums and collectors.

... und im Dunklen

… und im Dunklen

Auch im Making Of das mit auf der DVD ist wird das gesagt. Hier erfährt man auch, dass die Sachen von einem sehr engagierten Sammler namens Dr. Dutka gestellt wurden. Da mich das wirklich irritiert hatte (ja, ich weiss…) habe ich etwas gesucht und konnte den Requisitenverleih Dr. Dutka ausfindig machen, den ich dann umgehend mit meiner wirklich wichtigen blöden Frage behelligt habe.

Sind das wirklich blaue Leuchtdioden an den Abhoergeraeten, oder sieht das nur so aus? Ich denke die gibt es erst seit den 90ern? Sind die Geraete fuer den Film umgebaut worden, oder ist das eine andere Technik die nur wirkt wie blaue LEDs?

Herr Dutka scheint ein wirklich netter Zeitgenosse zu sein, oder er hatte einfach nur Mitleid mit einem Nerd. Seine Antwort hat mich auf jeden Fall sehr gefreut (er hat mir erlaubt die hier zu veröffentlichen):

Lieber Herr Schaten,

vielen Dank für Ihre mail.
Die blauen Displays waren echt DDR, aber keine LEDs, sondern nur blaue Displays.
Übrigens war die gesamte Abhörtechnik natürlich stark übertrieben – die Stasi hätte es unauffällig gemacht…
Aber der Regisseur wollte es so – aus dramaturgischen Gründen.

Sie können sich gerne meine website ansehen: requisiten-dutka.de

Viele Grüße aus Berlin!

Wolfgang Dutka

Ich vermute also mal dass es sich um VFDs handelt, die könnten je nach Filterscheibe und Beleuchtung blau aussehen. Bei Gelegenheit muss ich mal ein Museum zu dem Thema aufsuchen, bestimmt gibt’s da was in Berlin. Auf jeden Fall kann ich jetzt wieder ruhig schlafen… :-D

Ikea Ledare

Ikea Ledare

Ich mache normalerweise hier keine Werbung. Ausnahmsweise möchte ich aber doch mal auf ein Produkt hinweisen das ich Heute gekauft habe: eine Ikea Ledare Lampe mit klarem Glaskolben und E27-Fassung (Artikelnummer: 102.224.73).
Nach und nach rüste ich unseren kompletten Haushalt auf Energiesparbeleuchtung um. An vielen Stellen geht das einfach mit den üblichen Lampen, die praktisch aufgewickelte Leuchtstoffröhren sind. In unsere Hängelampen in der Küche hätte ich sowas aber nicht eingeschraubt. Die haben ein nostalgisches Design und einen klaren Glasschirm, das hätte schlimm ausgesehen.
Ich habe schon länger Ausschau gehalten ob es da nicht vielleicht was mit LED-Technik gibt. Die sind aber in der Regel entweder viel zu dunkel, haben ein total kaltes Licht, oder sie sehen zu sehr nach High Tech aus.
Heute ist mir im Ikea die besagte Ledare in die Hände gefallen. Sie verbraucht 8,1W, und neben der alten 60W-Glühbirne macht sie ein gutes Bild. In etwa die gleiche Helligkeit, und auch in etwa die gleiche Lichtfarbe. Einziges Manko: 12 Euro Anschaffungswiderstand. Aber die Lampen sind bei uns sehr oft und sehr lange an, eine kurze Rechnung ergibt dass die Anschaffung von zwei dieser Birnen sich tatsächlich schon nach etwa drei Monaten amortisiert haben dürfte (hat mich auch erschrocken). Oh, und die eignen sich nicht für den Anschluss an Dimmer. Das betrifft aber nicht unsere Küche.
Die Lampen gibt es in verschiedenen Ausführungen. Ich denke das wird nicht die letzte aus der Serie gewesen sein die den Weg in unser Haus findet…

Dieser Text ist erst 2015 von meinem alten CMS in den Blog gewandert.

Testschaltung auf dem Steckbrett

Testschaltung auf dem Steckbrett

Dieses Projekt macht aus einem AVR ATmega8 Mikrocontroller einen LED-Controller für eine Matrix aus 8×8 LEDs. Der Controller verhält sich als I2C-Slave, die anzuzeigenden Bitmuster können also über diesen Bus (der auch als TWI bekannt ist, Two Wire Interface) geschickt werden.

Sinn und Zweck

In meinem nächsten grösseren Projekt will ich Zahlenwerte auf Siebensegmentanzeigen ausgeben. Ich habe vor einer Weile eine Menge von diesen Dingern gekauft, jetzt kommen sie zum Einsatz. Das sind vierstellige mit einem zwölfpoligen Anschluss an der Unterseite. Acht Pins für die Kathoden der LEDs (sieben Segmente plus Punkt) und vier Anoden, eine für jede Ziffer.

Man kann sich diese Module als Matrix aus vier mal acht LEDs vorstellen, wie in dem Schaltplan hier dargestellt wird. Ich benutze zwei von den Modulen, also habe ich eine Matrix aus acht mal acht LEDs.

Die Zeilen und Spalten dieser Matrix werden an den Mikrocontroller angeschlossen, so dass der die Lampen Zeile für Zeile befeuern kann. Das hat zwei Vorteile: erstens sind maximal acht LEDs gleichzeitig an, das drückt den Stromverbrauch. Und zweitens braucht man auf diese Weise nur 16 Pins um 64 LEDs anzutreiben.

Durch diese Art der Ansteuerung flackert die Ausgabe natürlich etwas, aber der Controller ist schnell genug damit man das mit dem bloßen Auge nicht sehen kann.

Ich hätte meine Displaymodule natürlich auch direkt an den Hauptcontroller des nächsten Projektes anschließen können, aber da habe ich nicht mehr genug freie Pins. Außerdem wird das Programm auf dem Hauptcontroller übersichtlicher wenn das Multiplexen der LEDs woanders geschieht, da ich mich nicht um irgendein Timing kümmern muss. Also ist ein billiger ATmega8 ein prima LED-Treiber, und ich sage dem per I2C was er anzeigen soll.

I2C sprechen

Der ATmega8 hat ein eingebautes Hardware-I2C-Interface, also braucht es nicht allzu viel Code um I2C zu sprechen. Trotzdem habe ich mir von roboternetz.de die kleine Bibliothek gezogen, die Uwe Grosse-Wortmann (uwegw) geschrieben hat. Ich habe die nur etwas umformatiert um den Code meinem Programmierstil anzupassen. Nein, ich habe die Kommentare nicht gelöscht… ;-)

Benutzung

Am anderen Ende der Kommunikation habe ich die großartige Procyon AVRlib von Pascal Stang benutzt. Ein einfaches Code-Beispiel um mit der I2C LED Matrix zu sprechen sieht so aus:

Der Schaltplan

Der Schaltplan

Man bemerke: der Buffer hält nicht wirklich die Zahlen die auf dem Display dargestellt werden sollen, zumindest nicht in diesem Beispiel. Da sind nur die Bitmuster drin.

Zahlen anzeigen

Wenn man Siebensegmentanzeigen an den Controller anschließt um darauf Zahlen anzuzeigen müssen die auf der Master-Seite des Busses definiert werden. Ich habe die Definitionen nicht in dieses Projekt aufgenommen um dem Master die volle Kontrolle über die LEDs zu geben, selbst wenn keine Zahlen angezeigt werden sollen.

Außerdem hängt die Darstellung davon ab wie die Displays an den Controller angeschlossen sind. Ich weiß nicht ob die Pinbelegung irgendwie standardisiert ist.

Um ein Beispiel zu geben wie sowas gebaut wird, hier ist ein Codeausschnitt der mit meinem Display funktioniert:

Nachteile

Bis jetzt hat das Teil in allen getesteten Situationen prima funktioniert. Alles läuft wie geplant.

Danke!

Ich danke den Autoren der Bibliotheken die ich benutzt habe: Uwe Grosse-Wortmann (uwegw) für die I2C-Slave-Bibliothek und Pascal Stang für seine Procyon AVRlib.

Lizenz

Dieses Projekt steht unter der GNU General Public License (GPL). Eine Kopie der GPL liegt dem Paket in der Datei License.txt bei.

Download

Wenn ich mal wieder ein Projekt habe in dem ich viele LEDs ansteuern möchte werde ich der Technik namens Charlieplexing ein paar Gedanken widmen. Nur beschaltet mit ein paar Widerständen kann ein Controller mit n Pins (n*(n-1)) LEDs schalten. Das wären (wenn man einen Quarz und Reset nicht belegen möchte) 210 mit einem ATtiny2313, 380 mit dem ATmega8 oder sogar 992 mit einem ATmega32 oder ATmega644…

Dieser Text war 2006 noch nicht im Blog, den habe ich 2015 aus dem alten CMS übernommen.

Die fertige Schaltung in Aktion.

Die fertige Schaltung in Aktion.

Der USB-LED-Fader ist ein Gerät mit dem mehrere LEDs mittels USB kontrolliert werden können. Ich habe es gebaut um den Status meiner Internet-Verbindung und den Füllstand meiner Festplatte, sowie den aktuellen Zustand meines Videorecorders (VDR) anzuzeigen. Die Anzahl der Einsatzmöglichkeiten ist praktisch unbegrenzt.

Die LEDs werden mittels Pulsweitenmodulation (PWM) gesteuert. So sind sie nicht einfach an oder aus, sondern die Helligkeit kann gesteuert werden. Und genau das ist die Hauptaufgabe des Mikrocontrollers: die Firmware verfügt über mehrere ‚Wellenformen‘, die auf den LEDs wiedergegeben werden können. So kann jede LED eine Art Sinus- oder Dreieckswelle darstellen, ohne daß der Host-Computer eingreifen muß.

Jede der LEDs kann separat eingestellt werden, jede kann ein eigenes Muster zugewiesen kriegen.

Es ist möglich, für jede LED drei ‚Wellen‘ zu definieren: zwei ‚unendliche‘ Wellen (0 & 1), und eine einmalige Welle (2). Die unendlichen Wellen wechseln sich ewig ab, wenn eine komplett angezeigt wurde wird die andere aktiv. Die einmalige Welle wird dagegen nur einmal angezeigt, nach ihrem Ablauf springt die Firmware wieder zu den unendlichen Wellen, falls diese definiert wurden.

Jede Welle wird mit drei Parametern definiert: Die Wellenform, die Dauer einer Wiederholung und die Anzahl der Wiederholungen bevor zur nächsten Welle gewechselt wird.

Die hier gezeigte Version unterstützt vier LEDs, es sollte aber nicht allzu schwer sein diese Zahl zwischen eins und acht zu variieren. Ich habe keine Tests mit mehr als vier LEDs gemacht, aber ich könnte mir vorstellen daß es dabei zu Problemen mit der Last auf dem Controller kommen könnte, das könnte die Kommunikation via USB beeinträchtigen.

Die Distribution besteht aus drei Teilen: Der Firmware für einen ATmega8 Mikrocontroller, einem Kommandozeilen­Tool das unter Linux läuft und den Plänen für die Schaltung.

Dieses Projekt basiert auf dem PowerSwitch Beispielprojekt von Objective Development. Wie dort wird auch hier der Firmware-USB-Treiber verwendet, den Objective Development für Atmels AVR-Mikrocontroller entwickelt hat.

Dieser Treiber ist eine reine Firmware-Implementierung des USB 1.1 (low speed device) Standards für den Einsatz auf billigen Ein-Chip-Systemen wie der AVR-Serie von Atmel. Er kann zum Beispiel auf einem ATtiny2313 oder sogar auf einigen noch kleineren 8-Pin-Devices eingesetzt werden. Er implementiert den Standard, soweit es für einen sinnvollen Einsatz notwendig ist. In der Datei „firmware/usbdrv/usbdrv.h“ der Distribution werden Features und Grenzen beschrieben.

Bau und Installation

Die Schaltung umfaßt nur ein paar Standard-Bauteile. Darunter befindet sich kein spezieller USB-Chip.

Die Schaltung umfaßt nur ein paar Standard-Bauteile. Darunter befindet sich kein spezieller USB-Chip.

Die Installation wird in der beiliegenden Dokumentation beschrieben.

Benutzung

Nachdem das fertige Gerät an USB angeschlossen wurde, sollten alle LEDs kurz aufleuchten, um zu bestätigen daß alles funktioniert.

Dann kann der Kommandozeilen-Client wie folgt zum Einsatz kommen:

Mit der Set-Funktion können mehrere Wellen gleichzeitig definiert werden, indem einfach alle benötigten Parameter angegeben werden. Siehe Beispiele weiter unten.

Parameter

  • ledId: Nummer der LED (0-n, je nachdem wie viele LEDs das Gerät hat)
  • waveId: ID der Welle (0-1: ewige Wellen, 2: einmalige Welle).
  • waveformId: ID der Wellenform (0-31: konstante Helligkeit, 32-37: Muster). Die Form der Welle kann mit der show-Funktion angezeigt werden.
  • periodDuration: Zeit in zehntel Sekunden, die eine Anzeige der Wellenform dauern soll. Mit einem Wert von 0 wird die Welle gelöscht.
  • repetitionCount: Anzahl der Wiederholungen für diese Welle mit einer 0 an dieser Stelle wird die Welle für immer wiederholt.

Beispiele

Den Status aller LEDs anzeigen

Die Ausgabe sieht wie folgt aus:

Die Werte curvalue, curpos, nextupd und updtime dienen zum Debuggen. Sie sollten nur nach einem Blick in den Code von Interesse sein. Die Bedeutung der anderen Werte dürfte klar sein.

Die erste LED auf eine mittlere Helligkeit schalten

So wird die Welle 0 der LED 0 auf die Wellenform 15 (eine mittlere Helligkeit) gesetzt. Sie wird für eine Sekunde angezeigt und nach einmal wiederholt bevor zur nächsten Welle gewechselt wird. Noch ist keine zweite Welle definiert, also bleibt dieser Zustand bis auf weiteres.

Jetzt eine zweite Welle für die erste LED definieren, etwas heller als die erste

Dies ist Welle 1 auf LED 0, die Form 25 ist ebenfalls eine konstante Helligkeit. Nachdem die zweite Welle gesetzt wurde wechselt sie sich mit der ersten im Sekundentakt ab, weil beide Wellen die gleiche Länge und die gleiche Anzahl an Wiederholungen haben.

Eine dritte Welle auf die erste LED legen

Dies setzt die dritte Welle (Nummer 2) auf der ersten LED. Wellenform 36 ist eine schicke Sinus-ähnliche Form, also beginnt die LED zu faden. Eine Wiederholung dauert dabei zwei Sekunden, die Welle wird fünf mal wiederholt. Da dies die dritte Welle ist, kehrt die Schaltung nach diesen Wiederholungen wieder in die Abwechslung zwischen den beiden Helligkeiten zurück, diese Welle wird somit gelöscht.

Mehrere Wellen gleichzeitig definieren

Damit werden alle oben angegebenen Wellen gleichzeitig definiert. Die LED wird also erst fünf mal sinus-artig faden, und danach anfangen im Sekundentakt zwischen den beiden Helligkeitszuständen zu blinken.

Die erste LED löschen

Damit werden alle Wellen auf der ersten LED gelöscht.

Das Gerät zurücksetzen

Alle LEDs leuchten dabei einmal auf, um zu signalisieren daß alles funktioniert.

Eine Wellenform auf dem Bildschirm anzeigen

Die Ausgabe sieht wie folgt aus:

Dabei ist zu beachten, daß die angezeigte Breite der Länge der Wellenform entspricht. Eine einfache konstante Helligkeit (0-31) hat eine Länge von 1. Die Anzeige umfaßt also nur eine Spalte.

Das Gerät testen

Diese Funktion sendet viele zufällige Zahlen an das Gerät. Die Datenpakete werden wieder zurückgegeben und mit den Originalen verglichen, um Unterschiede zwischen den gesendeten und den empfangenen Daten festzustellen.

Schwachpunkte

Ich weiß, man kann das auch schöner anordnen... ;-)

Ich weiß, man kann das auch schöner anordnen… ;-)

Wie schon erwähnt ist die Kontrolle der Pulsweitenmodulation für mehrere LEDs eine Menge Arbeit für den kleinen Controller. Das gleiche gilt für das Sprechen des USB-Protokolls. Beides zusammen ergibt eine hohe Last auf dem Gerät, dadurch ist die Kommunikation mit dem Gerät nicht zu 100% verläßlich. Tests haben aber gezeigt, daß mehr als 99% aller Kommandos ankommen.

ACHTUNG: Man sollte diese Schaltung deshalb nicht benutzen um zum Beispiel den Zustand eines Kernreaktors zu überwachen. Solltest Du das trotz dieser Warnung vorhaben, bitte ich um kleine Nachricht… ;-)

Danke!

Ich möchte der Firma Objective Development für die Möglichkeit danken, ihren Treiber benutzen zu können. Ohne den gäbe es dieses Projekt nicht.

Und ganz besonderer Dank geht an Thomas Stegemann. Er hat das Modul für die PWM-Steuerung geschrieben, und für mich selbst wäre es nahezu unmöglich gewesen, den Rest des Projektes ohne seine Hilfe zu schreiben. C ist halt nicht meine Muttersprache… ;-)

Lizenz

Unsere Arbeit, also alles außer dem USB-Treiber, fällt unter die GNU General Public License (GPL). Eine Kopie der GPL liegt dem Projekt bei. Der USB-Treiber untersteht einer gesonderten Lizenz von Objective Development. In firmware/usbdrv/License.txt befinden sich weitere Informationen dazu.

Download