Temperatur und Luftfeuchtigkeit wurden mit Sensoren namens Raspberry Pi3 und HDC1000 gemessen und zur Visualisierung (grafische Darstellung) an IoT-Datenvisualisierungsdienst "Ambient" gesendet. Das Programm wurde in Python geschrieben.
HDC1000 ist ein Sensorchip, der Temperatur und Luftfeuchtigkeit misst. Der Zugriff erfolgt über eine Schnittstelle namens I2C. Dieses Mal habe ich das "HDC1000 Temperatur- / Feuchtigkeitssensormodul" von Akizuki Denshi verwendet, auf dem dieser HDC1000 montiert ist.
Schließen Sie den Raspberry Pi 3 und den HDC1000 wie folgt an.
Raspberry Pi | HDC1000 |
---|---|
01(3.3v) | 1(+V) |
03(GPIO02) | 2(SDA) |
05(GPIO03) | 3(SCL) |
07(GPIO04) | 4(RDY) |
06(Ground) | 5(GND) |
Verbinden Sie Raspberry Pi 3 mit WiFi unter Bis Sie Raspberry Pi 3 kaufen und mit Mac eine Verbindung zu WiFi und SSH herstellen.
Aktivieren Sie als Nächstes I2C unter Aktivieren von I2C auf Raspberry Pi (Version 2015). Ich werde. HDC1000 wurde an der Adresse 0x40 wie folgt erkannt:
pi$ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Ich habe beschlossen, das Programm in Python zu schreiben, und deshalb ein Modul namens WiringPi for Python installiert, das mit Python auf I2C zugreift.
pi$ sudo apt-get install python-dev python-setuptools swig
pi$ git clone --recursive https://github.com/WiringPi/WiringPi-Python.git
pi$ cd WiringPi-Python
pi$ ./build.sh
pi$ pip freeze | grep wir
wiringpi==2.32.1
Dadurch wird Python erstellt und installiert. Die Version, die ich gebaut habe, war 2.32.1.
Ich habe ein Modul für den Zugriff auf die HDC1000 geschrieben. Die init -Methode sieht folgendermaßen aus.
import wiringpi
import os
import struct
class Hdc1000:
def __init__(self, addr, rdyPin):
wiringpi.wiringPiSetup() #setup wiringpi
self.i2c = wiringpi.I2C() #get I2C
self.dev = self.i2c.setup(addr) #setup I2C device
self.rdy = rdyPin
wiringpi.pinMode(self.rdy, 0) # set ready pin to INPUT
self.i2c.writeReg16(self.dev, 0x02, 0x0000)
#Stellen Sie Config reg MODE ein=0 Temperatur und Luftfeuchtigkeit einzeln ablesen
Wenn das Modusbit des Konfigurationsregisters (0x02) auf 0 gesetzt ist, werden 16 Bit Temperatur und Luftfeuchtigkeit einzeln gelesen, und wenn es auf 1 gesetzt ist, werden Temperatur und Luftfeuchtigkeit gleichzeitig als 32-Bit-Daten gelesen. Diesmal habe ich es einzeln gelesen. Übrigens scheinen in der I2C-Bibliothek von wiringpi die oberen und unteren Bytes verkehrt herum gelesen und geschrieben zu werden. Das Modusbit von HDC1000 ist Bit 12, wenn das niedrigstwertige Bit 0 ist, und wenn dies auf 1 gesetzt ist, wird es bei 16 Bit zu 0x1000, aber beim Schreiben mit der I2C-Bibliothek wird 0x0010 geschrieben.
Die Methode zum Ermitteln der Temperatur sieht folgendermaßen aus.
def getTemp(self):
self.i2c.writeReg8(self.dev, 0x00, 0x00)
while wiringpi.digitalRead(self.rdy) == 1:
pass
data = struct.unpack('BB', os.read(self.dev, 2))
temp = (data[0] << 8) | data[1]
temp = temp * 165.0 / 65536.0 - 40.0
return temp
Der HDC1000 beginnt mit der Temperaturmessung, wenn Sie etwas in Register 0x00 schreiben, der RDY-Pin ist HIGH (1) und wenn die Messung abgeschlossen ist, ist er LOW (0). In Python schreibt writeReg8 () 0x00, um 0x00 zu registrieren, und wartet, bis der RDY-Pin in der nächsten while-Anweisung 0 wird. Wenn der RDY-Pin 0 wird, wird das Register 0x00 gelesen, aber die Daten können nicht von readReg8 () oder readReg16 () der I2C-Bibliothek von wiringpi gelesen werden. Stattdessen werden die Daten durch Lesen von 2 Bytes mit der Funktion os.read () gelesen. Konnte gelesen werden.
Die Verwendung ist wie folgt. Erstellen Sie eine Instanz, indem Sie die I2C-Adresse (0x40) des HDC1000 und die Pin-Nummer (7) des RDY-Pins angeben und Temperatur und Luftfeuchtigkeit mit getTemp () und getHumid () ablesen.
import hdc1000
hdc1000 = hdc1000.Hdc1000(0x40, 7)
temp = hdc1000.getTemp()
humid = hdc1000.getHumid()
print 'temp: %.1f, humid: %.1f' % (temp, humid)
Ambient ist ein IoT-Cloud-Dienst, der von Mikrocomputern gesendete Daten empfängt, speichert und visualisiert (Grafiken).
Es gibt eine C-Bibliothek für Arduino, eine C-Bibliothek für mbed, eine node.js-Bibliothek und einen Node-RED-Knoten als SDK zum Senden von Daten an Ambient. Außerdem habe ich eine Python-Bibliothek erstellt.
Die Python-Bibliothek von Ambient wurde auf Github veröffentlicht. Sie können die Bibliothek von Github wie folgt installieren: Das Beispiel wurde auf einem Raspberry Pi 3 ausgeführt, aber Sie können es auch auf Python auf Ihrem Mac installieren und verwenden.
pi$ sudo pip install git+https://github.com/AmbientDataInc/ambient-python-lib.git
pi$ pip freeze | grep ambient
ambient==0.1.0
import ambient
ambi = ambient.Ambient(100, "your_writeKey") #Ersetzen Sie durch Ihre Kanal-ID, schreiben Sie den Schlüssel
r = ambi.send({"d1": temp, "d2": humid})
Importieren Sie zunächst die Umgebungsbibliothek, erstellen Sie eine Instanz, indem Sie die Kanal-ID und den Schreibschlüssel zum Senden der Daten angeben, und senden Sie die Daten mit der Methode send (). Die Daten werden im obigen Wörterbuchformat übergeben. Der Schlüssel gibt einen von "d1" bis "d8" an.
Wenn Ambient Daten empfängt, werden die Daten zum Zeitpunkt des Empfangs mit einem Zeitstempel akkumuliert und in Echtzeit grafisch dargestellt. Wenn Sie beispielsweise Temperatur und Luftfeuchtigkeit in Intervallen von 5 Minuten senden, können Sie den zeitlichen Übergang von Temperatur und Luftfeuchtigkeit in einem Diagramm wie unten gezeigt überprüfen.
Wir haben eine Python-Bibliothek zum Senden von Daten an Ambient und ein Beispielprogramm zum Messen von Temperatur und Luftfeuchtigkeit mit HDC1000 auf Github veröffentlicht.
Recommended Posts