La température et l'humidité ont été mesurées avec des capteurs appelés Raspberry Pi3 et HDC1000, et envoyées au service de visualisation de données IoT "Ambient" pour visualisation (graphique). Le programme a été écrit en Python.
Le HDC1000 est une puce de capteur qui mesure la température et l'humidité. Il est accessible via une interface appelée I2C. Cette fois, j'ai utilisé le ["module capteur de température / humidité HDC1000"] d'Akizuki Denshi (http://akizukidenshi.com/catalog/g/gM-08775/) sur lequel ce HDC1000 est monté.
Connectez le Raspberry Pi 3 et le HDC1000 comme suit.
Raspberry Pi | HDC1000 |
---|---|
01(3.3v) | 1(+V) |
03(GPIO02) | 2(SDA) |
05(GPIO03) | 3(SCL) |
07(GPIO04) | 4(RDY) |
06(Ground) | 5(GND) |
Connectez Raspberry Pi 3 au WiFi en vous référant à Jusqu'à ce que vous achetiez Raspberry Pi 3 et que vous vous connectiez au WiFi et SSH avec Mac.
Ensuite, activez I2C en vous reportant à Comment activer I2C sur Raspberry Pi (version 2015). Je vais. HDC1000 a été détecté à l'adresse 0x40 comme suit:
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: -- -- -- -- -- -- -- --
J'ai décidé d'écrire le programme en Python, j'ai donc installé un module appelé WiringPi for Python qui accède à I2C avec Python.
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
Cela construira et installera Python. La version que j'ai construite était la 2.32.1.
J'ai écrit un module pour accéder au HDC1000. La méthode init ressemble à ceci.
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)
#Définir le MODE d'enregistrement de configuration=0 Lire la température et l'humidité individuellement
Lorsque le bit Mode du registre de configuration (0x02) est réglé sur 0, 16 bits de température et d'humidité sont lus individuellement, et lorsqu'il est réglé sur 1, la température et l'humidité sont lues en tant que données 32 bits à la fois. Cette fois, je l'ai lu individuellement. À propos, dans la bibliothèque I2C de Wiringpi, il semble que les octets supérieur et inférieur soient lus et écrits à l'envers. Le bit Mode de HDC1000 est le bit 12 lorsque le bit le moins significatif est 0, et lorsqu'il est mis à 1, il devient 0x1000 à 16 bits, mais lors de l'écriture avec la bibliothèque I2C, 0x0010 est écrit.
La méthode pour obtenir la température ressemble à ceci.
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
Le HDC1000 commencera à mesurer la température lorsque vous écrivez quelque chose dans le registre 0x00, la broche RDY sera HIGH (1) et lorsque la mesure sera terminée, elle sera LOW (0). En Python, writeReg8 () écrit 0x00 pour enregistrer 0x00 et attend que la broche RDY devienne 0 dans l'instruction while suivante. Lorsque la broche RDY devient 0, le registre 0x00 est lu, mais les données ne peuvent pas être lues par readReg8 () ou readReg16 () de la bibliothèque I2C de câblagepi. Au lieu de cela, les données sont lues en lisant 2 octets avec la fonction os.read (). A pu être lu.
L'utilisation est comme ça. Créez une instance en spécifiant l'adresse I2C (0x40) du HDC1000 et le numéro de broche (7) de la broche RDY, et lisez la température et l'humidité avec getTemp () et getHumid ().
import hdc1000
hdc1000 = hdc1000.Hdc1000(0x40, 7)
temp = hdc1000.getTemp()
humid = hdc1000.getHumid()
print 'temp: %.1f, humid: %.1f' % (temp, humid)
Ambient est un service cloud IoT qui reçoit, stocke et visualise (graphiques) les données envoyées à partir de micro-ordinateurs.
Il existe une bibliothèque C pour Arduino, une bibliothèque C pour mbed, une bibliothèque node.js, un nœud Node-RED comme SDK pour envoyer des données à Ambient, mais en plus de cela, j'ai créé une bibliothèque Python.
La bibliothèque Python d'Ambient a été publiée sur Github. Vous pouvez installer la bibliothèque depuis Github comme suit: L'exemple a été exécuté sur un Raspberry Pi 3, mais vous pouvez également l'installer et l'utiliser sur Python sur votre Mac.
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") #Remplacez par votre identifiant de chaîne, écrivez la clé
r = ambi.send({"d1": temp, "d2": humid})
Tout d'abord, importez la bibliothèque ambiante, créez une instance en spécifiant l'ID de canal et la clé d'écriture pour envoyer les données, puis envoyez les données avec la méthode send (). Les données sont transmises dans le format de dictionnaire ci-dessus. La clé spécifie l'un de "d1" à "d8".
Lorsque Ambient reçoit des données, il accumule les données avec un horodatage au moment de la réception et les trace en temps réel. Par exemple, si vous envoyez la température et l'humidité à des intervalles de 5 minutes, vous pouvez vérifier la transition de la température et de l'humidité au fil du temps dans un graphique comme indiqué ci-dessous.
Nous avons publié une bibliothèque Python pour envoyer des données à Ambient et un exemple de programme pour mesurer la température et l'humidité avec HDC1000 sur Github.
Recommended Posts