I<+>2<+>C, Teil 10: Bodenfeuchtigkeit, Helligkeit und Temperatur messen

Werte auslesen

Um die Feuchtigkeit auszulesen, verwenden Sie auf der Kommandozeile den Befehl aus der ersten Zeile von Listing 3. Er liest ein Wort (2 Bytes) aus dem Register 0 aus und zeigt es an. Um nun zu testen, ob der Sensor funktioniert, legen Sie die Hand auf den unteren Teil des Sensors. Dadurch verändern Sie die Kapazität der Umgebung um den Sensor herum. Der angezeigte Wert sollte sich ändern. Mit [Strg]+[C] beenden Sie das Kommando.

Der Befehl aus der zweiten Zeile von Listing 3 liest die Temperatur aus. Die Ausgaben lesen sich aktuell noch etwas kryptisch (0x1a01), da der Sensor die Bytes nicht in der von I2cget ausgegebenen Form liefert – hier greift später unser Programm. Um den Temperatursensor zu testen, erwärmen Sie den Sensor einfach mit den Fingern. Alternativ verwenden Sie etwas Kältespray. Wie gesagt: Der Temperaturgeber befindet sich an der Spitze des Bausteins.

Bleibt noch der Helligkeitssensor: Um ihn zu testen, decken Sie ihn einfach komplett ab. Beim Test geht es erst einmal nur darum, ob sich überhaupt etwas ändert (Listing 3, Zeile 4 und 5).

Die grundsätzlichen Funktionen des Sensors haben Sie nun (hoffentlich erfolgreich) getestet. Jetzt ist es an der Zeit für ein richtiges Programm.

Listing 3

 

$ watch 'i2cget -y 1 0x20 0 w'
$ i2cget -y 1 0x20 5 w
0x1a01
$ i2cset -y 1 0x20 3
$ i2cget -y 1 0x20 4 w
0x2210

Alles zusammen

Wie eingangs erwähnt, kommt für das Beispielprogramm die Sprache C zum Einsatz. Um mit C auf die I2C-Schnittstelle des RasPi zuzugreifen, benötigen Sie eine Bibliothek, die das ermöglicht. WiringPi heißt hier die Bibliothek der Wahl. Nebenbei erhalten Sie so zusätzlich eine komfortable Möglichkeit, um von der Kommandozeile aus auf die GPIO des Computers zuzugreifen.

Sie laden die Bibliothek via Git von der Projekt-Homepage [3] herunter (Listing 4, Zeile 2). Falls sich der RasPi dabei mit der Meldung -bash: git: command not found weigert, den Befehl auszuführen, installieren Sie auf dem System das notwendige Paket git nach (Listing 4, Zeile 1). Klappt der Git-Befehl dann immer noch nicht, haben Sie vermutlich ein Problem mit dem Netzwerk – prüfen Sie dann, ob Sie den Server git.drogon.net erreichen können.

Im nächsten Schritt bauen und installieren Sie die WiringPi-Bibliothek (Listing 4, Zeile 3 und 4). Listing 5 zeigt, wie Sie testen, ob die Installation funktioniert. Die Ausgabe variiert, je nachdem, welchen Typ RasPi Sie verwenden.

Listing 4

 

$ sudo apt-get install git
$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi
$ ./build
$ cd ..

Listing 5

 

$ gpio readall
+-----+-----+---------+------+---+-Model B2-+---+------+---------+-----+-----+
| BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
|     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
|   2 |   8 |   SDA.1 | ALT0 | 1 |  3 || 4  |   |      | 5V      |     |     |
|   3 |   9 |   SCL.1 | ALT0 | 1 |  5 || 6  |   |      | 0v      |     |     |
|   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT0 | TxD     | 15  | 14  |
|     |     |      0v |      |   |  9 || 10 | 1 | ALT0 | RxD     | 16  | 15  |
|  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
|  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
|  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
|     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
|  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
|   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
|  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
|     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
|  28 |  17 | GPIO.17 |   IN | 0 | 51 || 52 | 0 | IN   | GPIO.18 | 18  | 29  |
|  30 |  19 | GPIO.19 |   IN | 0 | 53 || 54 | 0 | IN   | GPIO.20 | 20  | 31  |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
+-----+-----+---------+------+---+-Model B2-+---+------+---------+-----+-----+

Der Code aus Listing 6 liest alle Werte aus dem Sensor aus und bereitet sie lesbar auf. Die Methode switchBytes() tauscht dazu High- und Low-Byte, die der Sensor in umgekehrter Reihenfolge abliefert – deswegen las sich die Ausgabe von i2cget in Listing 3 so speziell. Die restlichen Zeilen des Programms fallen fast selbsterklärend aus: Die Methode wiringPiI2CSetup() stellt die Verbindung mit dem Sensor auf der Adresse 0x20h her. Die folgenden Befehle lesen die Daten aus dem Sensor aus und zeigen sie an. Bevor sich die Helligkeit auslesen lässt, muss man allerdings noch den Wert 0x03h in die Basisadresse des Sensors schreiben.

Achten Sie beim Kompilieren darauf, WiringPi mit einzubinden, sonst kommt es zu Fehlern. Geben Sie keinen anderen Namen an, heißt das resultierende Binary a.out – Sie können es lokal aufrufen (Listing 7).

Listing 6

 

#include <wiringPiI2C.h>
#include <stdio.h>
int switchBytes(int i) {
  char l=i & 0x00FF ;
  char h=(i & 0xFF00) >> 8;
  i=l << 8 | h;
  return i;
}
int main(void) {
  int handle = wiringPiI2CSetup (0x20) ;
  printf("Feuchtigkeit: %i \n",switchBytes(wiringPiI2CReadReg16 (handle,0)));
  printf("Temperatur:   %2.1f \n",((double)switchBytes(wiringPiI2CReadReg16 (handle,5))));
  wiringPiI2CWrite (handle, 0x03);
  printf("Helligkeit:   %i \n",switchBytes(wiringPiI2CReadReg16 (handle,4)));
}

Listing 7

 

$ cc i2c_test.c -lwiringPi
$ ./a.out

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

12/2019
RasPi-Alternativen

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Grußbotschaften

    Mit Sonic Pi zaubern Sie komplexe Sounds, die Sie bei Bedarf sogar noch während des Abspielens modifizieren.

  • Das Runde und das Eckige

    Mit dem MCP4725 ergänzen Sie einen RasPi um einem D/A-Wandler, der bei Bedarf noch weitere Funktionen erfüllt.

  • Alles unter Kontrolle

    Schon ein einfaches Mikrocontrollerboard wie das CY8CKIT-049-42xx bietet erstaunlich viele Möglichkeiten beim Ansteuern von Hardware.

  • Viele Kerne

    Das Spresense Development Board von Sony lässt sich mit der Arduino IDE programmieren und bringt auch ein eigenes Entwickler-SDK mit.

  • Exotische Früchte

    Der aus China stammende Orange Pi positioniert sich mit einem guten Preis und interessanten Features gegen die RasPi-Truppe. Kann er sich auch behaupten?

  • Flexibler Surfer

    Mit dem neuen RasPi 4 setzen Sie einen öffentlichen Webkiosk schnell und kostengünstig auf.

  • Auskunftsfreudig

    Viele Devices, so auch der E.ON-Aura-Controller, verwenden eine Schnittstelle namens REST, um Zustandsdaten zu übermitteln. Mit ein wenig Bastelei lesen Sie diese auch über Ihr Smartphone aus.

  • Doppelt gemessen

    Mit wenig Aufwand und einem Pi Zero realisieren Sie einen mobilen Zweikanal-Spannungsprüfer.

  • Elegant zusammengeführt

    Tizonia streamt Musik von Online-Quellen und lokalen Sammlungen. Die schlanke Architektur macht den Player zur guten Wahl für den Einsatz auf dem RasPi.

  • Kommunikativ

    Nicht jeder traut sich zu, sein eigenes Smartphone zu bauen. Allerdings kann jeder Linux-Nutzer den Raspberry Pi im Handumdrehen zu einem VoIP-Telefon aufrüsten.