sudo apt-get install python-smbus
sudo apt-get install i2c-tools
Falls sich in der Raspberry Installation die Datei "/etc/modprobe.d/raspi-blacklist.conf" befindet, muss man dort außerdem zwei Zeilen deaktivieren bzw. entfernen:sudo apt-get install i2c-tools
#blacklist spi-bcm2708
#blacklist i2c-bcm2708
Dann das Früchtchen neu starten und mit dem Befehl "sudo i2cdetect -y 1" gucken, ob das grundsätzlich erstmal funktioniert. Da erscheint dann eine Art Adresstabelle mit einer Menge Striche. Soweit gut.#blacklist i2c-bcm2708
Jetzt müssen wir den CMPS10 an die Beere
knoten. Im Datenblatt findet sich u.a. nebenstehende Grafik: Ground, 3.3V, SDA (Daten) und SCL (Signal) finden sich auch am Raspberry - also ran damit. Die Adresstabelle sieht jetzt plötzlich anders aus:
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: 60 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Hurra, da erscheint der Sensor mit der Adresse 0x60. Läuft. Es ist mir fast schon unheimlich, wie einfach das ganze zu bewerkstelligen ist. Aber weiter im Text: Abfrage des Sensors mit Python.
Im Netz finde ich bei Daniel eine kleine Anleitung, wie man einen Drucksensor per I²C abfragt und ein weiteres Code-Beispiel (allerdings in C) für die Abfrage des CMPS10. Ich schaue nochmal ins Datenblatt, werfe alles zusammen und voilà! folgendes Script spuckt die gewünschten Werte aus:
import smbus import time bus = smbus.SMBus(1) device = 0x60 while True: try: b1 = bus.read_byte_data(device, 0x02) b2 = bus.read_byte_data(device, 0x03) pitch = bus.read_byte_data(device, 0x04) roll = bus.read_byte_data(device, 0x05) pitch = pitch-256 if pitch > 127 else pitch roll = roll-256 if roll > 127 else roll print int(((b1 << 8) + b2) / 10), pitch, roll time.sleep(0.1) except: print "abbruch" break
Danke!
AntwortenLöschenDer Kompass läuft super.
Erklärung ohne Schnickschnack.