Raspberry PI – LCD direkt an GPIOs

Stellt sich immer die Frage : „was kann ich an den GPIOs des PIs eigentlich alles anschliessen ?!?“

Auch ein LCD ist problemlos möglich. Es gibt unzählige Anleitungen dazu im Internet. Zumeist sind die aber alle auf ein kleines Python Programm zurückzuführen.
Hardwareseitig besteht der Trick dabei darin, dass das LC zwar mit 5V läuft, allerdings problemlos auch die 3,3V Signale des PIs versteht. Es findet keinerlei Datenübertragung vom LC zum PI statt.

Bei mir schaut das dann so aus :

Habe dazu einen Stecker von einem Floppy Kabel verwendet (nur soviel abgeschnitten, dass ich alle Pins erreichen kann, die ich dazu gebraucht hab). War relativ kompliziert, das alles richtig anzuschliessen, weil das Flachbandkabel am LC Display offenbar falsch herum eingelötet ist; das Kabel hat bei dem Display die Belegung „2-1-4-3-6-5-8-7-u.s.w…“

Der Stecker benötigt PI-seitig nur 2×8 Pins. (Pin 1&2 können frei gelassen werden)
Somit bleiben auch bei einem „alten“ PI1 einige nützliche GPIOs frei. z.B. 1x 5V, 2XGND und einige GPIOs…

Ansteuern lässt sich das zum Beispiel so :
rpi-lcdisplay

Diese 3 Scripts lesen einen 1wire Fühler aus, schalten einen GPIO, je nachdem, ob die Temperatur < oder > 23 Grad ist, und zeigen das ganze auf dem Display an.
Noch ein wenig unschön programmiert, aber es läuft zumindest mal…
Und /run/line2 kann man noch immer frei verwenden; alles was da drin steht, wird in der 2. Zeile angezeigt…

Raspberry PI Image auf eine kleinere SD Karte schreiben

Das Raspbian bring von haus aus bereits alles mit, um die Root-Partition zu vergrössern.
Was aber, wenn ein Image z.B. von einer 32GB Karte auf eine 16GB Karte übertragen werden soll ?!?

Ich hab sowas schon öfter gemacht, Sektor Sizes, Beginn und Ende der Partitionen herumgerechnet, dann verkleinert, und schliesslich alles wieder zusammengesetzt. Aber es geht auch einfacher.

Der erste Trick versteckt sich im „-P“ Parameter. Dadurch werden auch für die Partitionen loop devices angelegt :

losetup /dev/loop0 -v -P EntpacktesImage.img

-> Jetzt gibt es ein loop0, loop0p1 und ein loop0p2 !!

Der nächste Trick besteht darin, dass mindestens eine Partition gemountet bleiben muss, sonst „verschwinden“ die Partition loop devices :

mkdir -p /mnt/1
mount /dev/loop0p1 /mnt/1

Danach erst darf die autogemountete 2. Patition ausgehängt werden :

umount /dev/loop0p2

Filesystem repair + Verkleinern :

e2fsck -f /dev/loop0p2
resize2fs /dev/loop0p2 10G

Loop Device wieder aushängen :

losetup -d /dev/loop0

Anmerkung :
1) Das Image kann dann – am besten unter Linux mit dd – auf eine kleinere Karte geschrieben werden.
Wie zu erwarten – tritt natürlich beim Schreiben eine Fehlermeldung auf „no space left on device“ …
Diese kann ignoriert werden. danach mit fdisk die root Partition wieder löschen und neu anlegen – auf die volle Grösse.
(oder alternativ – einfach den PI mit der neuen Karte starten, und dann mit raspi-config die Partition wieder vergrössern)

2) Unter Windows mit Win32Diskimager kann die Datei NICHT geschrieben werden. Denn das image hat noch die ursprüngliche Grösse, und dieses Programm lässt das nicht zu….

TP-Link TL-WR741 Erweiterung

1-Wire Temperaturfühler ist offenbar möglich via OSS-Button GPIO.
D.h. hinter dem Taster einfach den SMD-Kondensator entfernen, dann D und GND direkt am Taster anlöten. (Via Durchgangsprüfer findet man ganz einfach heraus, was was ist). +3,3 V einfach von vorne von einer LED nehmen.

Pakete installieren :

opkg update
opkg install kmod-w1 kmod-w1-gpio-custom kmod-w1-master-gpio kmod-w1-slave-therm - 3.10.49-1

Damit das auch funktioniert, müssen die Module in der richtigen Reihenfolge und das eine mit den richtigen Parametern gestartet werden. Dazu hab ich einfach das in ein Init-Script gepackt :

sleep 30

rmmod gpio_button_hotplug

rmmod gpio-buttons
rmmod wire
rmmod w1_therm
rmmod w1_gpio
insmod w1-gpio-custom bus0=0,12,0 # GPIO12 = QoS button
insmod w1-gpio
insmod w1_therm

Auslesen lässt sich der Fühler dann mit :

cat /sys/devices/w1_bus_master1/28-xxxxxxxxxx/w1_slave | grep "t=" | cut -d"=" -f2

(das xxxxxx ist natürlich durch die echte Seriennummer zu ersetzen)

Zusätzlich hab ich noch 2 LAN LEDs angezapft, damit ich via H-Brücke ein Bistabiles Relais schalten kann :

Rasperry PI Relais Platine

Hab mir eine billige Relais Platine bei Amazon aus China bestellt; 4 Euro + 2 Euro Versand.
Die Relais laufen mit 5V, d.h. die können direkt vom GPIO Header des Raspberry PI, d.h. ohne extra Netzteil versorgt werden.

Sind 8 Wechsler Kontakte, die jeweils 10A schalten können !!
D.h. bei fachmänischer berührungssicherer Montage auch Netzspannung.

Bei einem neueren PI (1+, 2, 3) genügen sogar die „erweiterten“ GPIOs. d.h. die 26 „original“ PI GPIOs können frei bleiben. nur die +5V müssen von weiter oben „geklaut“ werden, auch ein Flachbandkabel von einem alten PC (für die Floppy Laufwerke) ist recht einfach möglich :

Die einzelnen Eingänge können gefahrlos direkt an die gewünschten GPIOs angeschlossen werden. Denn :
Das sind Opto-Eingänge (gegen +5V geschaltet). D.h. einmal die interne LED im Optokoppler (etwa 1,4 V) + eine Rote LED (etwa 1,6V) und ein 1kOhm Widerstand. Macht bei hochohmiger Beschaltung eine Spanung von 5-3=2Volt. und wenn der Pin vom PI gegen masse gezogen wird einen Strom von max. 2mA. Somit alles im grünen Bereich.
Kleiner „Schönheitsfehler“ : Sind die GPIOs noch nicht initialisiert, dann glimmen die LEDs ganz leicht.
Möchte man was „heikles“ damit schalten, so sollte zumindest der GPIO, der als Serielle Schnittstelle verwendet werden kann, vermieden werden. (Um „wilde“ Schaltvorgänge beim booten zu vermeiden).