Die Schaltung, so wie sie zwei Jahre lief

Die Schaltung, so wie sie zwei Jahre lief

Eigentlich würde es deutlich mehr Sinn machen, Projekte zu veröffentlichen direkt nachdem sie fertiggestellt wurden. In diesem Fall war ich mir sicher das getan zu haben. Vor zwei Jahren, als ich es gebaut habe. Dass das nicht so ist fiel mir erst kürzlich auf. Komischerweise drei Tage bevor ich das Ding durch etwas anderes ersetzt habe. Egal, ich liefere schnell nochmal nach…

Anfang 2014 haben wir das Wohnzimmer umgebaut. Dabei hat eine Wand eine steinige Struktur bekommen, und ich dachte dass da ein Streiflicht gut aussehen würde. LED-Streifen boten sich an. Beim Rumalbern habe ich den Töchtern gesagt dass wir eine rosa Lampe einbauen würden. Der Plan war eigentlich warm-weiß, aber die bestanden jetzt auf rosa… zwei gegen einen… ich stand unter Zugzwang. :-)

Ein einfacher RGB-Streifen kann theoretisch auch weiß leuchten. Praktisch ist das alles andere als gemütlich. Also habe ich neben den RGB- auch noch einen warm-weißen Streifen geklebt. In Kombination ließ sich das aber dann nicht mehr mit dem Steuergerät bedienen das bei dem RGB-Streifen dabei war. Eine fertige RGBW-Steuerung habe ich damals nicht gefunden. Also musste ich selbst was bauen.

So funktioniert das

So funktioniert das

Ich glaube das war das erste Mal dass ich ernsthaft was mit einem Arduino gemacht habe. Und es war erstaunlich einfach. Den ersten Prototypen habe ich mit einem Arduino Uno gebaut, und mit der hervorragenden Infrarot-Empfänger-Bibliothek von Ken Shirriff konnte ich schon nach knapp zwei Stunden eine RGB- und eine weiße LED steuern. Mit der Logitech Harmony Fernbedienung mit der ich auch die Medienwiedergabe kontrolliere.

Den zweiten Prototypen habe ich mit MOSFETs gebaut, um zu auszuprobieren wie ich mit dem Arduino die Streifen ansteuern kann, die ja immerhin mit 12V versorgt werden.

Der finale Aufbau ist oben auf dem Foto zu sehen: ein Arduino Pro Mini (der ohne USB-Interface), und eine Lochrasterplatine auf der die Ansteuerung verdrahtet ist. Am Arduino hängt ein Infrarot-Empfänger. Ursprünglich ein TSOP31238, den habe ich aber kurz vor Projektende durch falsche Verdrahtung frittiert. Da ich fertig werden wollte habe ich einen alten DVD-Player zerlegt — keine Ahnung was das für ein Empfänger ist, aber er funktioniert. :-D

Das heißt: er hat funktioniert. Ziemlich genau zwei Jahre lang. Bis Heute Morgen. Seitdem ist die Schaltung obsolet — wie gesagt. Sourcen und was man so für das Projekt braucht habe ich Heute unter dem Namen IRlicht veröffentlicht.

Oh, und falls sich jemand fragt: die Lampe ist bis Heute praktisch ausschließlich in weiß zum Einsatz gekommen. Bunte Farben — insbesondere Farbwechsel — sind praktisch nur zum Ausprobieren und zum Vorzeigen zu sehen gewesen. So selten dass ich letztens schon in den Sourcen nachsehen musste welche Tasten zu drücken sind…

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

TP-Link TL-MR3020 und Fujitsu fi-4120C

TP-Link TL-MR3020 und Fujitsu fi-4120C

Ich verfolge schon lange das Ziel, eingehende Post direkt durch einen Scanner zu ziehen, um sie dann in einer Kiste verschwinden und rein elektronisch weiter verarbeiten zu können. Das mag übertrieben aufwändig klingen, aber erfahrungsgemäß kann ich in Dateien besser den Überblick behalten als in Papierstapeln. Und leider bin ich nicht ordentlich genug um Briefe sortiert abzuheften. Außerdem, selbst wenn: packe ich den Brief wegen der KFZ-Steuer zum Finanzamt oder zum Auto? Im Computer ist das ein Symlink…

Nun, um das zu realisieren habe ich schon vor längerer Zeit einen Scanner gekauft. Fujitsu fi-4120C. Altes Modell, aber immerhin ein echter Dokumentenscanner, mit Duplex und automatischem Einzelblatteinzug. Eigentlich wollte ich den mit einem Raspberry ins Netz bringen, kürzlich ist aber bei einer anderen Bastelei ein TP-Link TL-MR3020 abgefallen. Den kriegt man gebraucht schon unter 20 Euro, und in Kombination mit der freien Firmware OpenWRT ist das echt interessantes Spielzeug — das sogar Pakete enthält die meinen Scanner befeuern können.

Leider ist der Router so klein dass mit einer Standard-Installation von OpenWRT kein Platz mehr für meine Zwecke ist. Und einfach Pakete deinstallieren geht nicht, die vorinstallierten wird man nicht los. Es sei denn man baut ein eigenes Image-File…

Glücklicherweise ist das mit dem Image Generator kein Problem. In dem Paket ist alles wichtige vorcompiliert enthalten. Das stellt man sich geeignet zusammen, pflegt bei Bedarf ein paar eigene Dateien ein und fertig ist die Laube. In meinem Fall habe ich folgende Dateien angelegt, alle in einem Unterordner files unter dem entpackten OpenWRT-Paket:

  • files/etc/resolv.conf und files/etc/config/network — Konfiguration für mein Netz
  • files/etc/config/system — Hostnamen einstellen
  • files/etc/fstab — ein Laufwerk von meinem Server mounten
  • files/etc/hotplug.d/button/buttons — ruft das Scan-Skript auf
  • files/root/scan.sh — das eigentliche Scan-Skript
  • files/etc/zabbix_agentd.conf — Überwachung mit Zabbix (soviel Platz war noch frei :-) )

Das ist alles keine Raketentechnik. Zentral sind aber die beiden Dateien die mit dem Scanner zu tun haben (hätte ich auch in einer Datei machen können, finde ich so aber übersichtlicher). Zum einen ist das files/etc/hotplug.d/button/buttons, das wird vom Hotplug-Daemon gestartet sobald der Button auf dem Router gedrückt wird:

Und zum anderen das eigentliche Scan-Skript files/root/scan.sh:

Sind diese Dateien angelegt ist man nur noch einen Make-Aufruf von der eigenen Firmware entfernt:

Nach kurzer Bauzeit lag in meinem Fall unter bin/ar71xx eine Datei die ich vermutlich auch direkt aus der originalen Firmware hätte flashen können. Da ich schon OpenWRT und somit eine Shell auf dem Router hatte konnte ich das dort machen:

Die Installation beendet sich mit einem Reboot. Per Telnet komme ich direkt auf das Gerät, da es sich ja direkt in mein Netz verbinden kann (kabelgebunden, ich habe eine Steckdose an der Stelle wo der Scanner stehen soll). Und mit scanimage -L sehe ich direkt den Scanner: device `fujitsu:fi-4120Cdj:44135' is a FUJITSU fi-4120Cdj scanner. Und scannen kann ich direkt auf Knopfdruck aus dem Skript heraus.

Ich habe mir auch schon Skripte gebastelt die die Scans weiter verarbeiten. Leere Seiten rausfischen, alles gerade rücken, Texte erkennen, komprimieren und Sandwich-PDF erstellen. So habe ich jetzt einen Haufen elektronisch durchsuchbarer Dokumente. Was mir noch fehlt ist eine nette Lösung um die dann auch zu archivieren. Mit Suchfunktion und so. Bis jetzt nutze ich Alfresco, aber für zu Hause ist das zu groß und zu umständlich. Für Tipps bin ich offen!

Das einzige was ich jetzt noch zu meinem Glück fehlt ist eine Möglichkeit, herauszufinden in welchem Zustand sich der Scanner befindet. Der hat eine Taste und eine Anzeige ‚Function‘, damit könnte ich dann die weitere Verarbeitung des Scans steuern… mal sehen, vielleicht finde ich dafür auch noch was. Mit scanimage -A sehe ich dass das irgendwie implementiert ist, aber ich habe noch nicht herausgefunden wie ich es benutzen kann.

Die meisten Pins sind belegt

Die meisten Pins sind belegt

Den ESP8266 habe ich hier ja schon öfter erwähnt. Kurz zusammengefasst handelt es sich um einen Mikrocontroller den man frei programmieren kann. Im Vergleich zu Arduino & Co. ist er aber sehr leistungsfähig. Er rechnet deutlich schneller, hat mehr Speicher und das beste: er funkt im WLAN. Genauere Daten finden man überall im Netz, nicht zuletzt in der Wikipedia.

Ich habe hier schon verschiedene Boards ausprobiert um mit dem Ding zu spielen. Vorstellen möchte ich Heute eines das unter dem Namen Witty Cloud bekannt ist. Lustigerweise findet man es in den automatisch übersetzten chinesischen Shops auch gerne unter dem Namen Witzig Wolke:-D

Es handelt sich um einen ESP-12-F, mit auf der Platine ist ein USB-Anschluss mit dem man das Ding mit Strom versorgen kann, ein Tastschalter, ein LDR (lichtempfindlicher Widerstand) und eine RGB-LED. So hat man direkt etwas Hardware zum Spielen. Geliefert wird das Modul als Stapel aus zwei Platinen. Die untere enthält eine weitere USB-Buchse, mit der kann man nicht nur Strom liefern sondern dank des USB-Seriell-Konverters auch direkt programmieren. Weiterhin sind hier ein Reset- und ein Flash-Button untergebracht. Zum wirklichen Betrieb braucht man nur das obere Board, und nach einer initialen Programmierung kann man die Module bei Bedarf sogar OTA (Over The Air) mit neuer Software betanken.

Das untere Board wird nur zum Programmieren benutzt

Das untere Board wird nur zum Programmieren benutzt

So gestapelt kostet das Modul weniger als drei Euro, und um mit dem Programmieren anfangen zu können braucht man nur noch ein USB-Kabel und einen Compiler. Da empfehle ich die Arduino-IDE, damit ist man auch als Anfänger sehr schnell im Rennen. Wenn man die Erweiterungen für ESP8266 installiert hat wählt man im Board Manager am besten den WeMos D1-Mini aus, damit klappt alles auf Anhieb.

Leider findet man zu dem Witty kaum Dokumentation. Also habe ich das Bildchen da oben gemalt, schon allein damit ich selbst nachsehen kann was an welchem Pin angeschlossen ist. So hängt an dem Pin der mit GPIO13 beschriftet ist der blaue Kanal der RGB-LED, in der Programmierumgebung heißt der Pin D7.

Label Pin (Arduino) Funktion
REST Reset
ADC A0 Analoger Eingang, belegt mit LDR
CH_PD Chip Power-Down
GPIO16 D0 GPIO, frei benutzbar
GPIO14 D5 GPIO, frei benutzbar
GPIO12 D6 GPIO, grüner Kanal der RGB-LED
GPIO13 D7 GPIO, blauer Kanal der RGB-LED
VCC +5V Versorgungsspannung
TXD TX Serielle Schnittstelle
RXD RX Serielle Schnittstelle
GPIO5 D1 GPIO, frei benutzbar
GPIO4 D2 GPIO, belegt mit dem Tastschalter
GPIO0 D3 GPIO, verbunden mit dem Flash-Taster, nicht völlig frei benutzbar
GPIO2 D4 GPIO, belegt mit der blauen LED auf dem ESP-Modul
GPIO15 D8 GPIO, roter Kanal der RGB-LED
GND Masse

Falls jemand einen Schaltplan des Boards hat, oder falls mich jemand korrigieren oder ergänzen möchte: immer her damit!

Mein Fazit: ein echt interessantes Board. Wer mehr GPIO braucht sucht vielleicht lieber nach einem NodeMCU, wer sowieso einen LDR oder eine RGB-LED braucht sollte zugreifen. Ich habe mittlerweile einige davon hier, und eine Firmware mit der ich die Dinger hier im Haus verteilen möchte ist auch fast fertig.

Oh, das Bild habe ich übrigens mit einer Grafik aus diesem Projekt gemacht, das ist die Witty Cloud für Fritzing.

Der fertige Joystick

Der fertige Joystick

Dies ist ein Projekt von 2004, auf der alten Schatenseite war es ausführlich beschrieben. Da gab es noch ein paar Bilder mehr, dazu Schaltpläne und eine Beschreibung wie ich den Tastaturcontroller analysiert habe.

Der PS/2-Anschluss von damals ist heutzutage obsolet. Mittlerweile würde ich so ein Projekt auf Basis von Mikrocontrollern machen, und dann per USB an den Rechner gehen. Deshalb lasse ich die Einzelheiten in der Vergangenheit und stelle das Projekt hier nur kurz vor.

Seinerzeit habe ich mich für MAME interessiert, den Multi Arcade Machine Emulator. Damit konnte man — man kann immer noch — auf einem PC die alten Spielhallenklassiker spielen. Eine Tastatur lässt aber nicht das authentische Feeling aufkommen, und so habe ich mir was gebastelt.

Ein Vogelnest

Ein Vogelnest

Die Joysticks waren eigentlich Zubehör für eine Sega Dreamcast Konsole. Ich habe die originale Elektronik rausgeworfen und stattdessen einen Controller aus einer PC-Tastatur implantiert. Dazu musste ich herausfinden wie die Matrix der Tastatur aufgebaut war, und die nötigen Kontakte dann mit den Mikroschaltern im Joystick verbinden. Gar nicht so kompliziert, eigentlich.

Die Kontakte für den zweiten Spieler habe ich auf einen Stecker gelegt, über ein Kabel das eigentlich für eine serielle Schnittstelle gedacht war konnte ich den zweiten Joystick anschliessen. Zusätzlich habe ich eine Y-Weiche gebastelt, damit ich neben den Joysticks auch noch eine richtige Tastatur anschliessen konnte. Irgendwie will so ein PC ja auch bedient werden.

Das Ergebnis war vom Aufbau her nicht schön, aber es hat funktioniert. :-D

Mittlerweile habe ich keinen PC mehr mit einer PS/2-Schnittstelle. Einen Joystick habe ich schon zerlegt und einer anderen Verwendung zugeführt. Aber das ist eine andere Geschichte, und die soll ein anderes Mal erzählt werden…

Siehe auch…

  • MAME – Die offizielle Seite des Arcade-Emulators
  • xMAME – Die Unix- bzw. Linux-Version
  • ArcadeControls – Tips und Anleitungen zum Selbstbau

Vor längerer Zeit habe ich hier mal auf eine Seite hingewiesen die Text durch entsprechende Homoglyphen ‚verschönert‘ hat, also Buchstaben durch ähnlich aussehende Zeichen aus anderen Alphabeten ersetzt hat.

Die Seite ist mittlerweile offline, aber hier gibt es einen Unicode Text Converter der das gleiche tut. Und wenn ich das Original noch richtig in Erinnerung habe mit noch mehr unterschiedlichen Varianten.

Wohlgemerkt: Da wird nicht der Font ausgetauscht. Es werden lediglich Teile aus den Fonts benutzt die man über eine gängige Tastatur kaum erreicht. Also Zeichen die eigentlich nicht dazu gedacht sind, normalen deutsch- oder englischsprachigen Text herzustellen. Copy & Paste funktionieren trotzdem, wenn man beispielsweise mal in irgendwelchen Messengern Schindluder treiben will…

Ḳäá¹…á¹… ṡëïṅ bAê™…ê™… biɘ ÆŽá´™gɘdá´Žiꙅꙅɘ иісЂт іммэѓ 🅖🅤🅣 𝖆𝖚𝖘𝖘𝖊𝖍𝖊𝖓. :-)

Ich sehe mir immer mal wieder gerne esoterische Programmiersprachen an. Lustig, auf was für Ideen Leute kommen — einfach nur weil es geht. :-)

Die meisten Sprachen haben eine vergleichsweise einfache Grammatik (es sei denn sie legen es speziell darauf an eben keine einfache Grammatik zu haben). Bei fast allen werden die Quelltexte in ASCII-Notation verfasst. Nennenswerte Ausnahmen sind Piet (da liegen die Quelltexte als GIF vor) und neuerdings vielleicht noch Emojicode. Aber selbst wenn es kein ASCII ist: es sind Dateien.

Jetzt habe ich von Folders gehört. Bei der Sprache liegen Quelltexte nicht mehr als Dateien vor, sondern als Ordner. Und damit die Ordner nicht so aus der Reihe tanzen haben sie griffige Namen bekommen: so heißt die Entsprechung für if jetzt New Folder, und aus print wird Setup. Der Datentyp für Integers heißt Vacation photos, der für Texte ist Img

Eingängig, oder? Und das beste: Quelltexte haben eine Länge von Null Bytes (nur halt eine komplexe Verzeichnisstruktur). Wer schreibt jetzt einen Flugsimulator? :-D

Traditionell bewege ich mich viel in der Shell, und da habe ich es oft mit verschiedenen Datenformaten zu tun die ich lesen oder schreiben möchte. Lesen ist mittlerweile vergleichsweise einfach: jq für JSON, XMLStarlet für XML.

Wie man sinnvoll XML generiert weiss ich noch nicht, aber vor ein paar Tagen hat Jan-Piet Mens ein Tool veröffentlicht mit dem man sauber JSON generieren kann: jo (hier bei Github).

Ausprobiert habe ich das noch nicht, aber die Beschreibung sieht sehr vielversprechend aus. Gerade in Verbindung mit dem Monitoring-Tool meiner Wahl — Zabbix — hätte ich mit so einem Tool im Werkzeugkasten einiges deutlich eleganter schreiben können…

Was stimmt hier nicht?

Was stimmt hier nicht?

Dies ist ein weiteres altes Projekt, entstanden etwa um 2004. Ich hatte das auf der alten Schatenseite, und damit es nicht komplett verloren geht stelle ich es hier nochmal kurz vor.

Damals konnte ich einen Commodore C64 der Mülltonne entreissen. Die ganz alte Bauform, in Fachkreisen auch liebevoll Brotkiste genannt. Leider war das Ding nicht mehr einzuschalten, und da ich eh keine Commodore-Vergangenheit habe tat es mir auch nur ein bisschen leid das Teil zu zerlegen.

Leider hatte ich zu der Zeit noch keine Ahnung von Mikrocontrollern, ansonsten hätte ich versucht die Tastatur funktionstüchtig zu halten. So ging das nicht, dementsprechend ist sie dem Dremel zum Opfer gefallen um Platz für Kühlkörper und Speicher frei zu machen. Schade. :-(

Eingebaut habe ich dann ein VIA EPIA M10000b, somit lief der C64 mit einer Taktfrequenz von 1GHz. Dazu kamen 256MB RAM, eine 2,5″-Platte mit 20GB, ein CD-Laufwerk aus einem Notebook und ein externes Netzteil.

Der C64-PC

Der C64-PC

So ausgestattet hing das Ding damals an meinem Fernseher. Hauptsächlich als Daddelkiste. Wirklich oft ist er dann aber ehrlich gesagt nicht mehr zum Einsatz gekommen…

Heutzutage würde man das anders angehen. In dem Gehäuse würde sich ein Raspberry gut machen. Der braucht wesentlich weniger Platz, also könnte man sogar die Funktion der Tastatur erhalten. Und mit Retropie als Distribution wäre das 80er-Jahre-Feeling fast authentisch… :-D

Siehe auch…