Ich wollte Sensordaten von Raspberry Pi von Node.js sowie von Arduino Firmata erhalten, aber es scheint schwierig zu sein, also entschied ich mich, zu Python zurückzukehren. Da GPIO von Raspberry Pi nur digital eingeben kann, TMP36 und LM35DZ AD-Konverter wie MCP3008 und PCF8591 bei Verwendung analoger Sensoren wird notwendig. Schreiben wir ein Python-Programm, das die Temperatur mit TMP36 misst.
[SPI (Serial Peripheral Interface)](http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E3%83% BB% E3% 83% 9A% E3% 83% AA% E3% 83% 95% E3% 82% A7% E3% 83% A9% E3% 83% AB% E3% 83% BB% E3% 82% A4% E3% 83% B3% E3% 82% BF% E3% 83% 95% E3% 82% A7% E3% 83% BC% E3% 82% B9) ist einer der seriellen Kommunikationsstandards. Es scheint, dass sich die Methode zum Aktivieren von SPI auf Raspberry Pi von 3.18 des Kernels geändert hat. Raspi-Konfiguration in Aktivieren der SPI-Schnittstelle auf dem Raspberry Pi Es wird beschrieben, wie Sie es verwenden und manuell aktivieren. Dieses Mal machen wir es manuell.
Wenn der Kernel nicht 3.18.x ist, aktualisieren Sie die Firmware. Das Paket wurde ebenfalls aktualisiert.
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo rpi-update
Überprüfen Sie die Kernel-Version.
$ cat /proc/version
Linux version 3.18.11+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) ) #777 PREEMPT Sat Apr 11 17:24:23 BST 2015
Bearbeiten Sie / boot / config.txt
.
$ sudo vi /boot/config.txt
dtparam=spi=on
Neustart.
$ sudo reboot
SPI ist jetzt aktiviert.
$ lsmod | grep spi
spi_bcm2708 6018 0
Verdrahten Sie den MCP3008, Raspberry Pi und FT232RL mit einem Steckbrett.
Draht mit MCP3008 und Raspberry Pi.
Verdrahten Sie den TMP36.
Installieren Sie die Python-Entwicklungsumgebung für Raspberry Pi.
$ sudo apt-get update
$ sudo apt-get install python-dev
$ python -V
Python 2.7.3
Installieren Sie ez_setup und pip.
$ curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python
$ curl https://bootstrap.pypa.io/get-pip.py -o - | sudo python
$ pip -V
pip 6.1.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)
py-spidev
Installieren Sie py-spidev, um SPI-Geräte von Python aus zu betreiben.
$ cd
$ git clone git://github.com/doceme/py-spidev
$ cd py-spidev
$ sudo python setup.py install
...
Writing /usr/local/lib/python2.7/dist-packages/spidev-3.0.egg-info
Erstellen Sie ein Projekt.
$ mkdir -p ~/python_apps/spidev-spike
$ cd !$
Schreiben Sie ein Python-Beispielprogramm, indem Sie auf die folgende Site verweisen.
~/python_apps/spidev-spike/spi_tmp36.py
#!/usr/bin/env python
import time
import sys
import spidev
spi = spidev.SpiDev()
spi.open(0,0)
def readAdc(channel):
adc = spi.xfer2([1,(8+channel)<<4,0])
data = ((adc[1]&3) << 8) + adc[2]
return data
def convertVolts(data):
volts = (data * 3.3) / float(1023)
volts = round(volts,4)
return volts
def convertTemp(volts):
temp = (100 * volts) - 50.0
temp = round(temp,4)
return temp
if __name__ == '__main__':
try:
while True:
data = readAdc(0)
print("adc : {:8} ".format(data))
volts = convertVolts(data)
temp = convertTemp(volts)
print("volts: {:8.2f}".format(volts))
print("temp : {:8.2f}".format(temp))
time.sleep(5)
except KeyboardInterrupt:
spi.close()
sys.exit(0)
Führen Sie ein Python-Programm aus. Die Temperatur wird in 5-Sekunden-Intervallen in Grad Celsius angezeigt.
$ python spi_tmp36.py
adc : 232
volts: 0.75
temp : 24.84
adc : 233
volts: 0.75
temp : 25.16
adc : 233
volts: 0.75
temp : 25.16
Recommended Posts