Der Raspberry Pi besitzt nur digitale Ein- und Ausgänge, das heißt: Es können nur die Werte 1 oder 0 eingelesen werden. Mit Hilfe eines Analog-Digital-Wandlers können Analoge Signale von 0%-100% in feiner Abstufung erkannt werden. Ein AD-Wandler kommuniziert über den SPI Bus mit dem Raspberry Pi. Der AD-Wandler kann bis zu 8 analoge Geräte einlesen, diese können per Pythonscript ausgelesen, verarbeitet und angezeigt werden.
unterschiedliche Vorgehensweisen bei Raspberry Pi 2 und Raspberry Pi 3 beachten!!
(A) SPI Bus enabeln : (beim Pi3 nicht notwendig !, hier im raspi-config den SPI Bus enablen !!!)
sudo nano /etc/modprobe.d/raspi-blacklist.conf
bei der Zeile blacklist spi-bcm2708 ein # davorsetzen (#spi-bcm2708) (B) SPI-Modul automatisch laden beim booten:
sudo nano /etc/modules
einfach die Zeile spidev hinzufügen, speichern, beenden und rebooten: sudo reboot
(C) Checken, ob SPI-Geräte vorhanden sind: ls /dev/spidev* Antwort: /dev/spidev0.0 /dev/spidev0.1
(D) spidev Bibliothek installieren (wenn nicht schon geschehen…), beim Pi3 nicht notwendig !!!
(E) MCP3008 auslesen mit sudo nano spitest.py
import spidev import time spi = spidev.SpiDev() spi.open(0,0) # bus und client bekommen beide die Nummern 0 while True: channel=0 # Wir lesen Kanal 0 aus wert=spi.xfer2([1, 128+(channel<<4), 0]) # Wir lesen 3 Bytes an verschiedenen Stellen aus print wert # Array wird angezeigt time.sleep(2) print (wert[1] &3) * 256 + wert[2] # Wir verrechnen die Bytes im Array time.sleep(2)
#!/usr/bin/python import spidev #Bibliotheken importieren import time spi = spidev.SpiDev() #spi als Funktion definieren spi.open(0,1) while True: #eigentliche Programmschleife, die als Ausgabe Voltzahlen liefert antwort = spi.xfer([1,128,0]) if 0 < = antwort[1] <=3: wert = ((antwort[1] * 256) + antwort[2]) * 0.00322 print wert ," V" time.sleep(1)