Sonntag, 17. November 2019

SNES Controller für Nintendo Switch - 8BitDo Mod Kit

Für die Nintendo Switch Konsole gibt es nach der NES- auch die SNES-Emulation, sofern man eine Nintendo Switch Online Mitgliedschaft abschließt.

Es gibt einen Wireless-Controller im SNES-Stil von Nintendo. Die SNES-Controller sind nur mit den SNES-Spielen der Switch Online-Mitgliedschaft kompatibel und nur für Mitglieder von Switch Online verfügbar.

Eine Alternative gibt es in Kombination mit einem Nintendo Classic Mini: Super Nintendo Entertainment System und dem 8BitDo Mod Kit für original SNES Classic controller. Es entstehen dabei Kosten von ca. 25 EUR.
Hinweis: Leider gibt es nicht die Möglichkeit den SNES Controller einzeln zu erwerben (wie in meinem NES Artikel vom Dezember 2018). Daher ist der Umbau nur für die jenigen geeignet, die ein SNES Classic besitzen oder per Ebay einen Controller erworben haben.

8BitDo stellt einen Bausatz (Wireless-Funktion und wiederaufladbarer Akku) bereit, dadurch lässt sich der Controller sehr schnell umbauen.





Anleitung: http://download.8bitdo.com/Manual/Mod-Kit/Mod-Kit-for-SNES-Original&Classic-controller.pdf

Mittwoch, 6. November 2019

Retrokonsole - ODROID-GO mit ESP32, Arduino und MicroPython

Mit dem Selbstbausatz von ODROID-GO bekommt man eine Retrokonsole im Gameboy Design. Zusätzlich ist mit dem ESP32 MicroPython und Arduino Programmierung möglich.


Man benötigt ca. 15 Minuten für den Zusammenbau und der Bausatz selber kostet ca. 40 EUR. Desweiteren benötigt man noch eine MicroSD Karte für die ROMs und sonstige Erweiterungen (siehe https://forum.odroid.com/viewtopic.php?f=159&t=31716).

Eine gute Anleitung zum schnellen Zusammenbau findet sich direkt im ODROID Wiki:
 

Die folgenden Konsolen werden ab Werk unterstützt:
  • Nintendo Entertainment System (NES)
  • Nintento GameBoy (GB)
  • Nintendo GameBoy Color (GBC)
  • Sega Master System (SMS)
  • Sega Game Gear (SGG)
  • ColecoVison bzw. Atari(COL)
Eine Anleitung zur Installation dazu findet sich hier https://wiki.odroid.com/odroid_go/make_sd_card .

Dank des sparsamen ESP32 Mikrocontroller hält der Akku bis zu 10 Stunden. Über die GPIO-Pins (I2C) lässt sich der ODROID-GO erweitern

Mir persönlich fehlt ein Kopfhöreranschluss, damit man unterwegs niemanden mit den Retrospiele-Sounds stört ;-) .



Technische Daten:
  • CPU & RAM: 80MHz - 240MHz(Adjustable), 4MB PSRAM
  • Wi-Fi: 802.11 b/g/n 2.4GHz - 2.5GHz
  • Bluetooth: Bluetooth v4.2 BR/EDR, BLE
  • Display: 2.4inch 320×240 TFT LCD (SPI interface)
  • Battery: Li-Polymer 3.7V/1200mAh, Up to 10 hours of continuous game playing time
  • Speaker: 0.5Watt 8Ω Mono
  • Micro SD card slot: 20Mhz SPI interface
  • Micro USB port: Battery charging(500mA) and USB-UART data communication
  • Expansion Port: 10Pin port (I2C, GPIO, IRQ at 3.3Volt)
  • Input Buttons: Menu, Volume, Select, Start, A, B, Direction Pad
  • Power consumption: Game emulation: 100~115mA, Sleep mode: 5.3~5.8mA, Power off: 0.1mA
Quelle: https://wiki.odroid.com/odroid_go/odroid_go#specifications

Samstag, 2. November 2019

Raspberry Pi - Camera Modul V2.1

Für den Raspberry Pi gibt es ein Kamera Modul V2, welche mit dem Flachbandkabel direkt an den CSI-Port (Camera Serial Interface) angeschlossen wird. Die Kamera kann full HD 1080p mit 30fps und hat einen 8 Megapixel Sensor (Sony IMX219).

Hinweis für die Verwendung der Kamera am Raspberry Pi Zero

Das Kameramodul wird mit einem flexiblen Kabel geliefert, das nicht in den CSI-Kameraanschluss des Raspberry Pi Zero W passt. Dieses muss durch z.B. AZDelivery Ersatz Flexkabel 15 cm für Raspberry Pi Zero Kamera/Display 15cm ersetzt werden.



Adafruit Raspberry Pi Camera Board Case für mit 1/4 Zoll Stativhalterung, ich habe hier die Plastikabdeckung entfernt. Da das Loch für die Linse nicht optimal ist. Mir ging es hier in erster Linie nur um die Möglichkeit die "Pi Cam" auf ein Stativ zu stellen.

Kamera aktivieren

Bevor man mit der Kamera arbeiten kann, muss man sie in unter raspi-config aktivieren.
sudo raspi-config => 5 Interfacing Options => Enable Camera

Einzelbilder erstellen

Mit dem folgenden Befehl lässt sich ein erstes Bild erstellen:
 raspistill -o testimage.jpg
Nach einer Auslöseverzögerung von ca. 5s wird ein Bild mit der Maximalauflösung der Pi Cam von 3280 x 2464 Pixel erstellt.


Fehler - mmal: Cannot read camera info, keeping the defaults for OV5647

Sollte es hierbei zu der folgenden Fehlermeldung kommen:

mmal: Cannot read camera info, keeping the defaults for OV5647</strong>
mmal: mmal_vc_component_create: failed to create component 'vc.ril.camera' (1:ENOMEM)
mmal: mmal_component_create_core: could not create component 'vc.ril.camera' (1)
mmal: Failed to create camera component
mmal: main: Failed to create camera component
mmal: Camera is not detected. Please check carefully the camera module is installed correctly


Dies kann verschiedene Ursachen haben, das verwendete Flachbandkabel hat einen Defekt oder sitzt nicht richtig, die Kamera wurde nicht per raspi-config aktiviert, die Kamera selber ist nicht richtig mit dem Sockel verbunden.
In meinem Fall war einfach die verwendete Kamera selber defekt. Tipp: Mittlerweile bestelle ich alle Pi Bauteile im Doppelpack ;-)

Mit den Befehlen -hf horizontal und -vf vertikal lässt sich das Bild drehen:
raspistill -hf -vf -o testimage.jpg

Videos aufnehmen

Mit dem folgenden Befehl lässt sich ein erstes Video aufnehmen:
raspivid -o testvideo.h264 -t 8000
Auch hier lässt sich das Bild mit -hf und -vf wieder drehen.

Mit dem folgenden Befehl lässt sich auch die Bitrate (default: 17MBit/s) anpassen, um in einer geringeren Qualität (z.B. 9MBit/s) die Videos aufzunehmen.
raspivid -o testvideo.h264 -t 8000 -b 9000000
Weitere Befehle finden sich in der original Dokumetation zum Kameramodul.

Angepasstes Script für den "Webcam- und Temperatur-Server mit OLED Display"

In dem Artikel vom Februar 2015 (https://sebastianhemel.blogspot.com/2015/02/raspberry-pi-logitech-webcam-anschlieen.html), habe ich noch eine Logitech USB-Webcam verwendet.
 
Durch die Verwendung des Camera Moduls, muss das Script (webcam.sh) angepasst werden.
Zuvor muss auch ImageMagick installiert werden, damit das erstellte Bild angepasst werden kann (z.B. crop, Titel, Datum und Uhrzeit).
sudo apt-get install imagemagick
Jetzt benötigen wir noch die Schriftart arial, welche wir schon hier verwendet haben.

Mit der Option ROI "Region of Onterest" kann man den Zoom für einen bestimmten Bereich realisieren. Siehe auch https://elinux.org/Rpi_Camera_Module:
-roi, --roi     : Set region of interest (x,y,w,d as normalised coordinates [0.0-1.0])
Ich selber habe mich aber dann für die "crop" Funktion von ImageMagick entschieden:
convert camPre.jpg -crop 1920x1080+550+680 cam.jpg
Angepasste webcam.sh

#!/bin/sh
# Webcam Bild mit Pi Cam erstellen und auf FTP hochalden
# (c) Sebastian Hemel

OPTIONS='-w 2592 -h 1944 -q 95 -x'
DATE=$(date +"%d.%m.%Y")
HOUR=$(date +"%R")

#-roi, --roi     : Set region of interest (x,y,w,d as normalised coordinates [0.0-1.0])
#raspistill -roi 0.6,0.6,1,1 -o /home/pi/webcam/cam.jpg $OPTIONS

raspistill -o /home/pi/webcam/camPre.jpg $OPTIONS
#Overlay?
#composite -gravity center overlay.png  cam.jpg  result1.jpg

#crop rectangle, start at top corner X: 550 Y: 680, crop rectangle to be of size W: 1920 H: 1080
convert /home/pi/webcam/camPre.jpg -crop 1920x1080+550+680 /home/pi/webcam/cam.jpg
convert /home/pi/webcam/cam.jpg -font /home/pi/font/arial.ttf \
   -pointsize 15 -fill white -annotate +1785+1072  \
   $DATE \
   -pointsize 15 -fill white -annotate +1865+1072  \
   $HOUR \
   -pointsize 15 -draw "gravity southwest \
   fill white text 15,6 'www.webcam-ingolstadt.de | 85051 Ingolstadt' " \
/home/pi/webcam/cam.jpg

sleep 1
ncftpput -f /home/pi/ftp.cfg /cam /home/pi/webcam/cam.jpg



Nicht vergessen, den FTP Client zu installieren. siehe auch https://sebastianhemel.blogspot.com/2015/02/raspberry-pi-logitech-webcam-anschlieen.html:
sudo apt-get install ncftp

Freitag, 1. November 2019

nano - Zeilennummern anzeigen / zu Zeile springen

Nano ist ein freier Texteditor für Unix/Linux. Beim Starten wird allerdings nicht angezeigt in welcher Zeile man sich gerade befindet.



Mit Hilfe von ALT + C kann man sich die Zeilennummern anzeigen lassen.

Mit Hilfe von ALT + G kann man direkt zu einer bestimmten Zeile springen.

ffmpeg - Video ru­di­men­tär schneiden

Mit Hilfe von ffmpeg ist ein schneller Videoschnitt möglich, ohne das man ein "mächtiges" Tool installieren muss.


Dies ist mit dem folgenden Konsolen Befehl möglich:
  • ffmpeg -ss [Sekunden Beginn] -t [Dauer Sekunden] -i [inputfile] [outputfile]
  • ffmpeg -ss 00:00:00 -t 00:04:00 -i MOVI0002.AVI 2019-10-31.AVI
 In dem oben genannten Beispiel werden nur die ersten 4 Minuten des Videos benötigt.

Dienstag, 29. Oktober 2019

Kommandozeilen Spiel - moon-buggy (Moon Patrol)

Für viele die mit dem Raspberry Pi experimentieren und ihn ohne GUI bzw. X-Server betreiben, gibt es mittlerweile einige Spiele, die man nur auf der Kommandozeile bzw. in der Shell spielen kann.
Siehe auch https://sebastianhemel.blogspot.com/2018/03/kommandozeilen-spiel-ninvaders-space.html .

Eines davon ist zum Beispiel moon-buggy, dabei handelt es sich um eine Variante des Rennspiels Moon Patrol.

Installieren kann man es einfach mit dem folgenden Befehl:
sudo apt-get install moon-buggy

Danach lässt sich das Spiel mit dem folgenden Befehl starten:
moon-buggy

Vielp Spaß beim Zocken!

Donnerstag, 3. Oktober 2019

Raspberry Pi - Sicherheits Checkliste

Kurze Checkliste, um seinen Pi zu "härten".


Passwort ändern

Nach der Inbetriebnahme sollte das Passwort "raspberry" des "pi" Benutzer geändert werden.

Updates durchführen

In regelmäßigen Abstanden und auch nach der Erstinstallation sollten die installierten Pakete auf Updates geprüft werden. Aufruf über die Konsole mittels apt-get https://wiki.ubuntuusers.de/apt/apt-get/ .
  • sudo apt-get update (Neueinlesen der Paketlisten)
  • sudo apt-get dist-upgrade (im Gegensatz zu upgrade werden nicht nur neue Pakete installiert sondern diese auch durch neue Abhängigkeiten unnötig gewordene Pakete ersetzt)

Regelmäßige Backups

Hat die Speicherkarte des Pi einen defekt, kann eine erneute komplette Einrichtung sehr viel Zeit kosten. Mit einem Windows Rechner und dem Win32 Disk Imager, kann man sehr schnell eine ISO Kopie der aktuellen Speicherkarte (je Partition) erstellen.
Als Alternative bietet sich hier Roadkil’s Disk Image an, es wird vom kompletten Laufwerk eine IMG-Datei erstellt.

Externer Zugriff per VPN

Von unterwegs sollte man nach Möglichkeit nur per VPN auf den Pi (z.B. per SSH) zuzugreifen. Mit Hilfe einer Fritzbox von AVM lässt sich dies mittlerweile sehr schnell realisieren.

Freitag, 27. September 2019

Download von Video Streams mit ffmpeg

Viele Filme und Serien von Mediatheken kann man nicht einfach als MP4 Datei herunterladen, da diese im "m3u8" Format vorliegen (siehe auch https://en.wikipedia.org/wiki/HTTP_Live_Streaming). 


Mit Hilfe von ffmpeg ist einfacher Download möglich, ohne das man ein "mächtiges" Tool wie z.B. jDownloader installieren muss.

ffmpeg.exe -i https://xyz.akamaihd.net/.../09/film_2.../index_5_av.m3u8 -c copy FilmXYZ.mp4

Den Streaminglink kopieren und in den oberen Befehl einbauen (Dateiendung: m3u8).

Samstag, 21. September 2019

Klassische Desktop-Symbole unter Windows 10

Auch unter Windows 10 kann man die klassischen Desktop-Symbole z.B. "Computer" oder "Systemsteuerung" wieder aktivieren.


Die Einstellung dafür findet sich unter "Einstellungen" => "Personalisierung" => "Designs" => "Desktopsymboleinstellungen".


Dienstag, 17. September 2019

Online Visitenkarte mit GitHub Pages

Mit Hilfe von GitHub Pages ist es relativ schnell möglich eine online Visitenkarte oder auch einen Blog vollkommen kostenlos zu erstellen.


Alles was hierzu nötig ist, ist ein GitHub Account (in der kostenlosen Version):
 
Jetzt muss man ein Repository erstellen (z.B. mit dem Namen "card"):


Anschließend kann man das noch "leere" Repository aufrufen:

Jetzt kann man direkt eine neue Datei mit dem Namen "index.md" anlegen (https://github.com/shemel/card/new/master) und dort seine Informationen (Visitenkarte etc.) hinterlegen:

Hierbei handelt es sich dann um ein Markdown (vereinfachte Auszeichnungssprache): https://github.com/shemel/card/blob/master/index.md

Unter den Einstellungen (Settings) des Repository kann man unter dem Punkt "GitHub Pages" verschiedene Themes aussuchen:


Hier sollte man jetzt den "master branch" und ein passendes "Theme" auswählen. Das Theme selber wird in der "_config.yml" abgelegt:

Jetzt ist die Visitenkarte unter der folgenden URL abrufbar: https://shemel.github.io/card/


Montag, 2. September 2019

Webseite mit interaktiver Karte ohne Google Maps? Leaflet.js


Leaflet.js ist eine Open-Source-JavaScript-Bibliothek für interaktive Karten auf der eigenen Webseite.


Die JavaScript Bibliothek ist klein, einfach und flexibel und derzeit wahrscheinlich die beliebteste Open-Source-Mapping-Bibliothek. Gleichzeitig ist Leaflet.js auch eine gute Alternative zu Google Maps, da eine Verwendung nur noch nach Registrierung möglich ist und nur noch in einem geringen Umfang kostenlos ist.

Die Bibliothek ist kostenlos und frei nutzbar (2-Clause BSD License).
Desweiteren ist es möglich, dass die Karten vom eigenen Server ausgeliefert werden können, somit muss im Impressum bei der Datenschutzerklärung (DSGVO) nicht auf einen externen Service verwiesen werden.

Aktuelles Beispiel, wenn die Verwendung der Google Maps API ohne Registrierung erfolgt:


  • Are you using an API key?
  • Is billing enabled on your account?
  • Is the provided billing method no longer valid (for example an expired credit card)?
  • Is there an exceeded self-imposed daily limit on the API?
  • Does your API key have an IP addresses restriction?

Integration von Leaflet.js in die eigene Webseite:

  • Ordner entpacken und unter ../leaflet speichern
  • In der HTML-Datei ein div element mit einer id hinterlegen:
    • <div id="map_leaflet"></div>
  • Die CSS‐Datei und das Leaflet‐API‐Script einbinden:
    • <link rel="stylesheet" href="leaflet/leaflet.css" rel="stylesheet" />
    • <script src="leaflet/leaflet.js"></script>
  • Der Kartencontainer (mapid) muss eine definierte Höhe hat z.B. per CSS festlegen:
    • #map_leaflet{ height: 392px; } 
    • <div id="map_leaflet" style="width:800px; height:392px"></div>
  • Damit ein Layer anzeigt werden kann, muss der Kartenbereich (hier mit den Koordinaten) initalisiert werden:
    • var map = L.map('map_leaflet').setView([50.869333, 9.715948], 14);
  • Wie auch die Google Maps API benötigt die Leaflet API Kartenbilder (Tiles im .png oder .jpeg Format), diese werden je nach Zoomstufe schachbrettartig zu einer Karten zusammengesetzt:
    • https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png (Templatestring hinzufügen)
    • Servernummer = (s)
    • Zoomlevel = (z)
    • Koordinaten = (x,y)
    • Zoom Bereich und Copyright werden festgelegt
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
{
    attribution: 'Map data © OpenStreetMap and contributors CC-BY-SA',
    maxZoom: 18,
    minZoom: 9
}).addTo(map);
  • Metrischen Maßstab in der Karte einblenden:
    • L.control.scale({imperial:false}).addTo(map); // metrisch
  • Mit der Methode L.marker. kann man Orte auf der Karte markieren:
    • L.marker([50.869333, 9.715948]).addTo(map);


  • Mit bindPopup kann ein Popup hinterlegt werden und beim Aufrufen der Karte geöffnet werden:
    • L.marker([50.869333, 9.715948]).addTo(map).bindPopup("Bahnhofsmission Bad Hersfeld").openPopup();

Weitere Beispiele finden sich auch auf der Herstellerseite: https://leafletjs.com/examples.html

Anbei der komplette Quellcode:

<html>
    <head>
...
        <link rel="stylesheet" href="leaflet/leaflet.css" rel="stylesheet" />
...
        <script src="leaflet/leaflet.js"></script>
...
        <script type="text/javascript"> 
            function showMap() {           
                // initialize the map
                var map = L.map('map_leaflet').setView([50.869333, 9.715948], 14);
               
                // load a tile layer
                L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
                    {
                        attribution: 'Map data © OpenStreetMap and contributors CC-BY-SA',
                        maxZoom: 18,
                        minZoom: 9
                    }).addTo(map);
               
                L.control.scale({imperial:false}).addTo(map); // metrisch
               
                //L.marker([50.869333, 9.715948]).addTo(map);
                L.marker([50.869333, 9.715948]).addTo(map).bindPopup("Bahnhofsmission Bad Hersfeld").openPopup();
            }
        </script>
    </head>
   
    <body onload="showMap()">
...
        <div id="map_leaflet" style="width:800px; height:392px"></div>
...
    </body>
</html>

Donnerstag, 22. August 2019

Raspberry Pi - Sensor BME280 Temperatur, Luftfeuchtigkeit, Luftdruck

Nachdem ich mit dem Ergebnis vom DHT22 Sensor nicht zufrieden war, erfolgt mit dem BME280 von Bosch ein erneuter Versuch.

Der Sensor BME280 misst Temperatur, Luftfeuchtigkeit, Luftdruck und Höhe. In dem Beitrag stelle ich die Anbindung und das Auslesen des Sensors vor.



Wie auch beim Anschluss des OLED Display (SSD1306) https://sebastianhemel.blogspot.com/2018/05/raspberry-pi-oled-display-ssd1306-i2c.html erfolgt auch die Ansteuerung des BME280 per I2C. Daher müssen auch hier die folgenden Einträge hinzugefügt werden:

sudo nano /etc/modules

i2c-bcm2708
i2c-dev


Jetzt muss noch die Konfigurationsdatei angepasst werden:
sudo vi /boot/config.txt

dtparam=i2c_arm=on #entfernen
dtparam=i2s=on     #entfernen
dtparam=i2c1=on

Jetzt muss noch ein reboot erfolgen, damit die Einstellungen übernommen werden:
sudo reboot 

Jetzt kann der Sensor analog dem OLED Display angeschlossen werden:


Damit man jetzt die Verbindung testen kann, sollte noch das folgemde Packet installiert werden:
sudo apt-get install i2c-tools

Mit dem folgenden Befehl kann überprüft werden, ob die Verbindung zum Sensor (Adressen 0x76 oder 0x77) Display funktioniert bzw. verbunden ist:
i2cdetect -y 1

Mit Hilfe des folgenden Scripts von Matt Hawkins, kann man den Sensor direkt abfragen (ggf. muss noch sudo apt-get install python-smbus -y installiert werden) oder auch die Befehle in seinen eigenen Python Scripts verwenden.

wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bme280.py
python bme280.py

import bme280
...
temperature,pressure,humidity = bme280.readBME280All()
print "Temperature : ", temperature, "C"
print "Pressure : ", pressure, "hPa"
print "Humidity : ", humidity, "%"



Um die Daten jetzt auch im OLED I2C Display anzeigen zu können, habe ich folgende Methode hinzugefügt:

def GetTempBME280():
    temperature,pressure,humidity = bme280.readBME280All()
    print "Temperature : ", temperature, "C"
    print "Pressure : ", pressure, "hPa"
    print "Humidity : ", humidity, "%"
    time.sleep(0.2)
    value = "{:5.1f} °C {:.0f} %".format(float(temperature), float(humidity))
    value = unicode(value, 'utf-8')

    return value


wget http://www.shemel.de/download/raspberry/OLEDdisplayTempBME280.py


Alternativ kann man den Sensor auch mit der RPi.bme280 library ansteuern.
sudo pip install RPi.bme280

Montag, 19. August 2019

Raspberry Pi - Temperatursensor DHT22

Mit dem Temperatursensor DHT22 (ca. 5 EUR) kann man Luftfeuchtigkeit und Temperatur messen. Der Verkabelung ist analog zu dem Temperatursensor DS18B20.

In dem Beitrag stelle ich die Anbindung und das Auslesen des Sensors mit zwei verschiedenen Methoden vor. Ich habe auch den Quellcode vom https://sebastianhemel.blogspot.com/2018/05/raspberry-pi-oled-display-ssd1306-i2c.html angepasst, damit eine Ausgabe auf dem OLED I2C Display erfolgen kann.


Der DHT22-Sensor ist kostengünstig, lässt sich einfach ansteuern und ist digital (kein Analogkonverter/Kalibration notwendig). 
Der große Nachteil ist aber, dass er relativ langsam ist (Abfrage max. alle 3 Sekunden) und der Sensor stürzt oft ab und er muss vom Strom genommen werden, damit er neu gestartet werden kann.


Technische Daten des DHT22:
  • 3 - 5 V Spannungsversorgung und I/O
  • 2,5 mA Stromaufnahme
  • 0 bis 100 % Luftfeuchtigkeit-Messbereich, mit 2 bis 5 % Genauigkeit
  • -40 bis 80° Temperatur-Messbereich, mit +- 0,5°C Genauigkeit
  • maximal 0.5 Hz Sampling Rate (einmal jede zweite Sekunde)
  • Abmessungen: 15,1 mm x 25 mm x 7,7 mm (ohne Pins)
  • 4 pins mit 0.1'' Abstand (geeignet für Breadboards)
    • der dritte Pin  (zwischen DATA und GND)  ist nicht belegt
  • siehe auch https://cdn-shop.adafruit.com/datasheets/DHT22.pdf

Anschluss am Pi

Der Sensor darf am nur mit 3,3V Spannungsversorgung angeschlossen werden. Wichtig ist auch der 10 kilo-Ohm Widerstand, damit die Datenleitung nicht "gefloated" wird.


Als Alternative kann man auch den DHT22 mit integrierten Widerstand verwenden:


Sensor ansteuern mit pigpio

Mit der pigpio Bibliothek (C und Python) kann man beim Pi auf den GPIO Port zugreifen.
Damit dies funktioniert, muss pigpio als Daemon immer im Hintergrund laufen, damit ein Zugriff auf die Pins via Sockets und Pipes erfolgen kann.

Installtion erfolgt mit dem folgenden Befehl:
sudo apt-get install pigpio

Jetzt muss der pigpio daemon (pigpiod) als "root" gestartet werden:
sudo pigpiod

Am besten kann man dies auch gleich mit in der crontab vom "root" aufnehmen:
sudo crontab -e
@reboot pigpiod #start pigpio daemon

Über das folgenden Beispiel aus der pigpio Bibliothek, kann der Sensor angesprochen werden: https://github.com/joan2937/pigpio/raw/master/EXAMPLES/Python/DHT22_AM2302_SENSOR/DHT22.py (Download z.B. mit wget)

In der Datei "DHT22.py" muss jetzt noch der korrekte Daten-Pin eingestellt werden:
nano DHT22.py (Zeile 257)
...
s = DHT22.sensor(pi, 4, LED=16, power=8)
...


Je Zeile:
  • fortlaufende Nummer, Luftfeuchtigkeit, Temperatur, Staleness, Bad Checksum Counter, Short Message Counter, Missing Message Counter, Sensor Resets
Kommt es bei der Ausführung "python DHT22.py" zu der folgenden Fehlermeldung:
Traceback (most recent call last):
  File "DHT22.py", line 8, in <module>
    import pigpio
ImportError: No module named pigpio


Müssen noch die folgenden Module installiert werden:
sudo apt-get install python-pigpio python3-pigpio
Um die Daten jetzt auch im OLED I2C Display anzeigen zu können, habe ich folgende Methode hinzugefügt:

def GetTempDHT22():
    s.trigger()
    time.sleep(0.2)
    #print ("{:5.1f} °C {:.0f} %".format(s.temperature(), s.humidity()))
    value = "{:5.1f} °C {:.0f} %".format(s.temperature(), s.humidity())
    value = unicode(value, 'utf-8')
    return value


wget http://www.shemel.de/download/raspberry/OLEDdisplayTempDHT22pigpio.py


Sensor ansteuern mit Adafruit 

Der Open Source Treiber von Adafruit (C und Python) kann auch für die Ansteuerung verwendet werden.

Vor dem Download muss ggf. das System vorbereitet werden (Pakete build-essentail und python-dev):
sudo apt-get update
sudo apt-get install build-essential python-dev


Jetzt kann das GitHub Repository geklont werden:
git clone https://github.com/adafruit/Adafruit_Python_DHT.git

Anschließend muss der Quellcode noch konfiguriert werden:
cd Adafruit_Python_DHT/
sudo python setup.py install


Danach kann man die Library verwenden und das folgende Beispiel aufrufen:
cd examples
sudo ./AdafruitDHT.py 22 4

Temp=28.4*  Humidity=51.1%

Gibt es ein Problem oder wurde der falsche Pin verwendet, erscheint folgende Ausgabe:
Failed to get reading. Try again!

Um die Daten jetzt auch im OLED I2C Display anzeigen zu können, habe ich folgende Methode hinzugefügt:
...
import Adafruit_DHT
...
def GetTempDHT22():
    humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 4)
    if humidity is not None and temperature is not None:
        print('Temp={0:0.1f}*  Humidity={1:0.1f}%'.format(temperature, humidity))
        value = '{0:0.1f}* {1:0.1f}%'.format(temperature, humidity)
    else:
        print('Failed to get reading. Try again!')
        value = 'Failed'
    return value