Bücher online kostenlos Kostenlos Online Lesen
Raspberry Pi - Einstieg, Optimierung, Projekte

Raspberry Pi - Einstieg, Optimierung, Projekte

Titel: Raspberry Pi - Einstieg, Optimierung, Projekte
Autoren: Maik Schmidt
Vom Netzwerk:
Einbuchtung. Stecken Sie ihn vorsichtig ins Steckbrett. Sie müssen zwar etwas fester drücken, aber vorher sollten Sie sicherstellen, dass alle Beinchen in die Anschlüsse passen. Wenn Sie den Chip entfernen wollen, verwenden Sie einen kleinen Schraubenzieher als Hebel.

    Abb. 10–6 Der TMP36-Schaltkreis
    Seien Sie auch vorsichtig, wenn Sie den MCP3008 mit dem Pi verbinden. Tabelle 1 zeigt detailliert, wie Sie die GPIO-Pins des Pi an den MCP3008 anschließen.
Raspberry Pi Pin
MCP3008
1 (3.3V)
16 (VDD)
1 (3.3V)
15 (VREF)
6 (GND)
14 (AGND)
6 (GND)
9 (DGND)
23 (SCLK)
13 (CLK)
21 (MISO)
12 (DOUT)
19 (MOSI)
11 (DIN)
24 (CE0)
10 (CS)
    Tab. 1 Pinbelegung für den Anschluss des Pi an den MCP3008
    Das Anschließen des TMP36-Sensors ist einfach, denn er hat nur drei Pins. Stecken Sie den Sensor ins Steckbrett und achten Sie darauf, dass die Polung stimmt. Schließen Sie die Versorgungsspannung an den 3,3V-Pin des Pi an und Masse an die Masse des Pi. Schließen Sie dann den Signalpin des TMP36 an Pin 1 (CH0) des MCP3008 an.
    Damit ist die Verdrahtung abgeschlossen. Jetzt müssen wir ein Programm schreiben, um letztendlich die Temperatur zu ermitteln.
Den MCP3008 steuern
    Der MCP3008 ist ein SPI-Gerät, weshalb wir einen Weg finden müssen, mit ihm über die SPI-Hardware des Pi zu kommunizieren. Dies haben erfreulicherweise bereits mehrere Personen für uns erledigt, und py-spidev 9 ist eine kleine Bibliothek, die uns alles Notwendige bietet. Sie installieren sie wie folgt:
    pi@raspberry:~$
 
git clone git://github.com/doceme/py-spidev
pi@raspberry:~$
 
cd py-spidev
pi@raspberry:~$
 
sudo python setup.py install
    Wir müssen nur Folgendes tun, um eine
MCP3008
-Klasse mittels Python zu implementieren:
    Sensors/mcp3008.py
    Zeile 1   import  spidev
      -
      -   class  MCP3008:
      -      def  __init__(self, bus = 0, client = 0):
      5         self.spi = spidev.SpiDev()
      -         self.spi.open(bus, client)
      -
      -      def  analog_read(self, channel):
      -          if  (channel < 0  or  channel > 7):
     10             return  -1
      -         result = self.spi.xfer2([1, (8 + channel) << 4, 0])
      -          return  ((result[1] & 3) << 8) + result[2]
    Es ist nur eine kleine Klasse, die aber ein paar Erklärungen benötigt. In der ersten Zeile importieren wir die spidev-Bibliothek, die wir zuvor installiert haben. Dann definieren wir eine neue Klasse namens
MCP3008
. Wie vorher bei der
PassiveInfraredSensor
-Klasse definieren wir eine Methode namens
__init__
, die immer dann aufgerufen wird, wenn wir ein neues
MCP3008
-Objekt erzeugen.
___init___
erwartet drei Parameter: die gerade erzeugte Instanz (
self
), die auf dem SPI-Bus zu belegende Nummer (
bus
) und die Nummer des Nebengeräts (
slave
), mit dem wir sprechen möchten (
client
). In Zeile 5 erzeugen wir ein neues
SpiDev
-Objekt und öffnen in der folgenden Zeile eine Verbindung mit dem Gerät.
    Bis jetzt haben wir nur einen Kommunikationskanal mit einem SPI-Gerät eingerichtet, was bedeutet, dass der Aufruf unter
___init___
nicht spezifisch für den MCP3008 ist. Er wäre für jedes andere SPI-Gerät identisch. Die spezifischen Dinge passieren in
analog_read
. Diese Methode nimmt eine Portnummer und gibt den aktuellen Wert des Analogsensors zurück, der am Port anliegt. Wir prüfen, ob die Portnummer zwischen 0 und 7 liegt, und wenn das nicht der Fall ist, geben wir -1 zurück.
    In Zeile 11 senden wir eine Meldung mit der Methode
xfer2
des
SpiDev
-Objekts an den MCP3008.
xfer2
erwartet ein Byte-Array und sendet es über das SPI-Protokoll. In unserem Fall senden wir drei Bytes und Sie fragen sich vielleicht, was diese bedeuten. Sie finden die Antwort in den Kapiteln 5 und 6 des Datenblatts des MCP3008 10 . Das Datenblatt beschreibt detailliert, welche Daten der MCP3008 erwartet und welche Daten er zurücksendet. Die Struktur der Eingabenachricht sieht folgendermaßen aus:

    Die meisten Bits dieser drei Bytes haben einen konstanten Wert. Nur die drei Bits namens D0, D1 und D2 variieren und enthalten die Nummer desauszulesenden Kanals. Das erste Byte ist immer 1, das letzte immer 0 und das zweite Byte enthält eine leicht veränderte Fassung der Kanalnummer. Wir setzen alle mit x markierten Bits auf 0.
    Die Antwort des MCP3008 besteht ebenfalls aus drei Bytes. Sie
Vom Netzwerk:

Weitere Kostenlose Bücher