intégrer capteur BMP280 en I2C

Forum pour tous les autres objets : sondes météo, capteurs, actionneurs ...
Vous avez un besoin mais vous ne savez pas quel matériel choisir ? C'est ici.
Capi
Messages : 11
Inscription : 29 oct. 2016, 00:34

intégrer capteur BMP280 en I2C

Message par Capi »

Bonjour,

J'ai branché un capteur BMP280 en I2C sur PI 2:
- j'ai un script Py qui me permet d'avoir l' info température et pression: OK
-si j'essaie d'intégrer ce capteur dans Domoticz (Local I2Csensors/ BMP085/180 Temp+Baro): pas reconnu (et je crois avoir que de toute façon, cela les valeurs rapportées n'étaient pas bonnes)

Ma question est donc: y -t-il un moyen d’intégrer manuellement ce capteur dans Domoticz pour avoir "température" et "pression"?

Si c'est possible, merci de me renvoyer vers les posts détaillés ou de m'indiquer les étapes dans l'ordre (car je ne suis pas du tout expert!).

Capi
jackslayter
Messages : 1040
Inscription : 30 sept. 2014, 14:40
Localisation : Isère (38)

Re: intégrer capteur BMP280 en I2C

Message par jackslayter »

moi j'ai une BMP180 et ça marche dans Local I2Csensors.

après en partant sur ce script en Python https://github.com/cudacode/Python-BMP2 ... /BMP280.py
en installant pycurl (sudo apt-get install python-pycurl)

tu ajoutes ces lignes à la fin du script

Code : Tout sélectionner

def main():
 
    c = pycurl.Curl()
    c.setopt(c.URL, 'http://TONADRESSEIP:PORT/json.htm?type=command&param=udevice&idx=IDXDETONDUMMYDEVICE&svalue='+ str(read_raw_pressure()))
    c.setopt(c.URL, 'http://TONADRESSEIP:PORT/json.htm?type=command&param=udevice&idx=IDXDETONDUMMYDEVICE&svalue='+ str(compensate_temperature()))
    c.perform()
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte
Capi
Messages : 11
Inscription : 29 oct. 2016, 00:34

Re: intégrer capteur BMP280 en I2C

Message par Capi »

Bonsoir,

Excusez-moi pour mes questions de néophyte:

- le BMP a une adresse X76: je remplace le X77 dans le scrypte?
- où dois placer mon fichier BMP280?
-faut que je crée un capteur "I2C local sensor/BMP085" ou un capteur virtuel?
-IDX du matériel à mettre dans scrypte? Pas l'IDX od ID des dispositifs?

NB: mon BMP280 n'est pas un adafruit.
Capi
jackslayter
Messages : 1040
Inscription : 30 sept. 2014, 14:40
Localisation : Isère (38)

Re: intégrer capteur BMP280 en I2C

Message par jackslayter »

Capi a écrit :Bonsoir,

Excusez-moi pour mes questions de néophyte:

- le BMP a une adresse X76: je remplace le X77 dans le scrypte?
- où dois placer mon fichier BMP280?
-faut que je crée un capteur "I2C local sensor/BMP085" ou un capteur virtuel?
-IDX du matériel à mettre dans scrypte? Pas l'IDX od ID des dispositifs?

NB: mon BMP280 n'est pas un adafruit.
Capi
tu peux essayer
ou tu veux, oublie pas de faire un "sudo chmod +x scriptbmp280.py"
tu as dit que cela ne marchait pas donc un capteur virtuel
c'est le 1ier nombre de la liste des dispositifs

ca marche quand même
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte
Capi
Messages : 11
Inscription : 29 oct. 2016, 00:34

Re: intégrer capteur BMP280 en I2C

Message par Capi »

Merci pour ces réponses.
Avant de faire ces essais, je me posais la question de savoir si je ne pouvais pas juste ajouter tes lignes de code à la fin de mon script existant (qui fonctionne) en adaptant le nom des deux variables et en remplissant les autres champs avec tes indications?
jackslayter
Messages : 1040
Inscription : 30 sept. 2014, 14:40
Localisation : Isère (38)

Re: intégrer capteur BMP280 en I2C

Message par jackslayter »

tant que ton langage peut envoyer une requête json avec cURL (php,python,shell,..) tu pourras mettre à jour tes capteurs domoticz
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte
Capi
Messages : 11
Inscription : 29 oct. 2016, 00:34

Re: intégrer capteur BMP280 en I2C

Message par Capi »

Bonjour,

Mon incompétence ne me permet pas de réussir à récupérer les infos de mon BMP280!

J'ai un script Python qui fonctionne et qui me permet d'afficher en console température et pression
je sais créer un capteur virtuel avec 2 dispositifs
J'ai collé le code à la fin de mon script

Mais cela ne fonctionne pas. Je dois oublier un truc de base!

Si quelqu'un peut me rappeler toutes les étapes pas à pas.

Idéalement, j'aimerais récupérer les valeurs toutes les 5 ou 10 minutes

Merci

Code : Tout sélectionner

#!/usr/bin/python
#Distributed with a free-will license.
# Use it any way you want, profit or free, provided it fits in the licenses of its associated works.
# BMP280
# This code is designed to work with the BMP280_I2CS I2C Mini Module available from ControlEverything.com.
# https://www.controleverything.com/content/Barometer?sku=BMP280_I2CSs#tabs-0-product_tabset-2


import smbus
import time

# Get I2C bus
bus = smbus.SMBus(1)

# BMP280 address, 0x76(118)
# Read data back from 0x88(136), 24 bytes
b1 = bus.read_i2c_block_data(0x76, 0x88, 24)

# Convert the data
# Temp coefficents
dig_T1 = b1[1] * 256 + b1[0]
dig_T2 = b1[3] * 256 + b1[2]
if dig_T2 > 32767 :
    dig_T2 -= 65536
dig_T3 = b1[5] * 256 + b1[4]
if dig_T3 > 32767 :
    dig_T3 -= 65536

# Pressure coefficents
dig_P1 = b1[7] * 256 + b1[6]
dig_P2 = b1[9] * 256 + b1[8]
if dig_P2 > 32767 :
    dig_P2 -= 65536
dig_P3 = b1[11] * 256 + b1[10]
if dig_P3 > 32767 :
    dig_P3 -= 65536
dig_P4 = b1[13] * 256 + b1[12]
if dig_P4 > 32767 :
    dig_P4 -= 65536if dig_P4 > 32767 :
    dig_P4 -= 65536
dig_P5 = b1[15] * 256 + b1[14]
if dig_P5 > 32767 :
    dig_P5 -= 65536
dig_P6 = b1[17] * 256 + b1[16]
if dig_P6 > 32767 :
    dig_P6 -= 65536
dig_P7 = b1[19] * 256 + b1[18]
if dig_P7 > 32767 :
    dig_P7 -= 65536
dig_P8 = b1[21] * 256 + b1[20]
if dig_P8 > 32767 :
    dig_P8 -= 65536
dig_P9 = b1[23] * 256 + b1[22]
if dig_P9 > 32767 :
    dig_P9 -= 65536

# BMP280 address, 0x76(118)
# Select Control measurement register, 0xF4(244)
#               0x27(39)        Pressure and Temperature Oversampling rate = 1
#                                       Normal mode
bus.write_byte_data(0x76, 0xF4, 0x27)
# BMP280 address, 0x76(118)
# Select Configuration register, 0xF5(245)
#               0xA0(00)        Stand_by time = 1000 ms
bus.write_byte_data(0x76, 0xF5, 0xA0)

time.sleep(0.5)

# BMP280 address, 0x76(118)
# Read data back from 0xF7(247), 8 bytes
# Pressure MSB, Pressure LSB, Pressure xLSB, Temperature MSB, Temperature LSB
# Temperature xLSB, Humidity MSB, Humidity LSB
data = bus.read_i2c_block_data(0x76, 0xF7, 8)

# Convert pressure and temperature data to 19-bits
adc_p = ((data[0] * 65536) + (data[1] * 256) + (data[2] & 0xF0)) / 16
adc_t = ((data[3] * 65536) + (data[4] * 256) + (data[5] & 0xF0)) / 16
adc_p = ((data[0] * 65536) + (data[1] * 256) + (data[2] & 0xF0)) / 16
adc_t = ((data[3] * 65536) + (data[4] * 256) + (data[5] & 0xF0)) / 16
adc_t = ((data[3] * 65536) + (data[4] * 256) + (data[5] & 0xF0)) / 16

# Temperature offset calculations
var1 = ((adc_t) / 16384.0 - (dig_T1) / 1024.0) * (dig_T2)
var2 = (((adc_t) / 131072.0 - (dig_T1) / 8192.0) * ((adc_t)/131072.0 - (dig_T1)/8192.0)) * (dig_T3)
t_fine = (var1 + var2)
cTemp = (var1 + var2) / 5120.0
fTemp = cTemp * 1.8 + 32

# Pressure offset calculations
var1 = (t_fine / 2.0) - 64000.0
var2 = var1 * var1 * (dig_P6) / 32768.0
var2 = var2 + var1 * (dig_P5) * 2.0
var2 = (var2 / 4.0) + ((dig_P4) * 65536.0)
var1 = ((dig_P3) * var1 * var1 / 524288.0 + ( dig_P2) * var1) / 524288.0
var1 = (1.0 + var1 / 32768.0) * (dig_P1)
p = 1048576.0 - adc_p
p = (p - (var2 / 4096.0)) * 6250.0 / var1
var1 = (dig_P9) * p * p / 2147483648.0
var2 = p * (dig_P8) / 32768.0
pressure = (p + (var1 + var2 + (dig_P7)) / 16.0) / 100

# Output data to screen
print "Temperature en Celsius : %.2f C" %cTemp
print "Pressure : %.2f hPa " %pressure

#def main():

#    c = pycurl.Curl()
#    c.setopt(c.URL, 'http://192.168.0.51:8080/json.htm?type=command&param=udevice&idx=45&svalue='+ str(pressure))
#    c.setopt(c.URL, 'http://192.168.0.51:8080/json.htm?type=command&param=udevice&idx=44&svalue='+ str(cTemp))
#    c.perform()

    
jackslayter
Messages : 1040
Inscription : 30 sept. 2014, 14:40
Localisation : Isère (38)

Re: intégrer capteur BMP280 en I2C

Message par jackslayter »

je crois qu'ils ont intégré à Dz la sonde bmp280, il faut être sur le canal Beta
https://github.com/domoticz/domoticz/bl ... istory.txt
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte
Capi
Messages : 11
Inscription : 29 oct. 2016, 00:34

Re: intégrer capteur BMP280 en I2C

Message par Capi »

À priori, il s'agit de la BME280 avec HR en plus de temps et pression par rapport à BMP280.
Je vais tester ...
jackslayter
Messages : 1040
Inscription : 30 sept. 2014, 14:40
Localisation : Isère (38)

Re: intégrer capteur BMP280 en I2C

Message par jackslayter »

sur ton script il faut enlever le '#' aux 4 dernière lignes
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte
Répondre