Merci pour le déplacement j'ai hesité je cherchais une catégorie du type i2c
Sinon j'ai réussi a interrogé une sonde avec le code du derniers lien github que j'ai du très légèrement modifier mais surtout j'ai viré tous les package et réinstaller (smbus) sur pip et pip3. cela a supprimer des dépendances surement obsolète ou en conflit
Code : Tout sélectionner
#!/usr/bin/env python3
#
# MIT License
#
#Copyright (c) 2023 Henrik Roslund
#
#Permission is hereby granted, free of charge, to any person obtaining a copy
#of this software and associated documentation files (the "Software"), to deal
#in the Software without restriction, including without limitation the rights
#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
#copies of the Software, and to permit persons to whom the Software is
#furnished to do so, subject to the following conditions:
#
#The above copyright notice and this permission notice shall be included in all
#copies or substantial portions of the Software.
#
#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
#SOFTWARE.
#
import board, busio, time
# I2C Address for the CHT8305/SEN0546
CHT8305_Address = 0x40
I2C_Delay_time = 0.01
# Registers
REG_TEMPERATURE = 0x00
REG_HUMIDITY = 0x01
REG_CONFIG = 0x02
REG_ALERT_SETUP = 0x03
REG_MANUFACTURE_ID = 0xFE
REG_VERSION_ID = 0xFF
i2c = busio.I2C(board.SCL, board.SDA)
print ("I2C Devices found: ", [hex(i) for i in i2c.scan()])
def get_CHT8305_CONFIG ():
i2c.writeto(CHT8305_Address, bytes([REG_CONFIG]), end = False)
time.sleep(I2C_Delay_time)
Config_setting = bytearray(2)
i2c.readfrom_into(CHT8305_Address, Config_setting)
print("Config setting hex: ", hex(Config_setting[0]), hex(Config_setting[1]))
print("Config setting bin: ", bin(Config_setting[0]), bin(Config_setting[1]))
def set_CHT8305_CONFIG_HEATER_ON ():
i2c.writeto(CHT8305_Address, bytes([REG_CONFIG]), end = False)
time.sleep(I2C_Delay_time)
Config_setting = bytearray(2)
Config_setting[0] = 0x30
Config_setting[1] = 0x00
print("Config setting Heater ON hex: ", hex(Config_setting[0]), hex(Config_setting[1]))
i2c.readfrom_into(CHT8305_Address, Config_setting)
time.sleep(I2C_Delay_time)
#i2c.writeto_then_readfrom(CHT8305_Address, Config_setting, Config_setting)
print("Config Heater ON hex: ", hex(Config_setting[0]), hex(Config_setting[1]))
print("Config Heater ON bin: ", bin(Config_setting[0]), bin(Config_setting[1]))
def set_CHT8305_CONFIG_HEATER_OFF ():
i2c.writeto(CHT8305_Address, bytes([REG_CONFIG]), end = False)
time.sleep(I2C_Delay_time)
Config_setting = bytearray(2)
Config_setting[0] = 0x10
Config_setting[1] = 0x00
i2c.readfrom_into(CHT8305_Address, Config_setting)
print("Config Heater OFF hex: ", hex(Config_setting[0]), hex(Config_setting[1]))
print("Config Heater OFF bin: ", bin(Config_setting[0]), bin(Config_setting[1]))
def get_CHT8305_MANUFACTURE_ID ():
i2c.writeto(CHT8305_Address, bytes([REG_MANUFACTURE_ID]), end = False)
time.sleep(I2C_Delay_time)
Manufacture_ID = bytearray(2)
i2c.readfrom_into(CHT8305_Address, Manufacture_ID)
print("Manufacture-ID hex: ", hex(Manufacture_ID[0]), hex(Manufacture_ID[1]))
def get_CHT8305_VERSION_ID ():
i2c.writeto(CHT8305_Address, bytes([REG_VERSION_ID]), end = False)
time.sleep(I2C_Delay_time)
Version_ID = bytearray(2)
i2c.readfrom_into(CHT8305_Address, Version_ID)
print("Version-ID hex: ", hex(Version_ID[0]), hex(Version_ID[1]))
def get_CHT8305_TEMPERATURE_HUMIDITY ():
i2c.writeto(CHT8305_Address, bytes([REG_TEMPERATURE]), end = False)
time.sleep(I2C_Delay_time)
Temperature_raw = bytearray(4)
Temperature_raw[0] = REG_TEMPERATURE
i2c.readfrom_into(CHT8305_Address, Temperature_raw)
#print("Temperature_raw hex: ", hex(Temperature_raw[0]), hex(Temperature_raw[1]), hex(Temperature_raw[2]), hex(Temperature_raw[3]))
Temperature_prep = Temperature_raw[0] << 8 | Temperature_raw[1]
Temperature = (Temperature_prep * 165 / 65535) - 40
print("Temperature: ", Temperature)
Humidity_prep = Temperature_raw[2] << 8 | Temperature_raw[3]
Humidity = (Humidity_prep / 65535) * 100
print("Humidity: ", Humidity)
def get_CHT8305_HUMIDITY ():
i2c.writeto(CHT8305_Address, bytes([REG_HUMIDITY]), end = False)
time.sleep(I2C_Delay_time)
Humidity_raw = bytearray(4)
Humidity_raw[0] = REG_HUMIDITY
i2c.readfrom_into(CHT8305_Address, Humidity_raw)
#print("Humidity_raw hex: ", hex(Humidity_raw[0]), hex(Humidity_raw[1]), hex(Humidity_raw[2]), hex(Humidity_raw[3]))
Humidity_prep = Humidity_raw[0] << 8 | Humidity_raw[1]
Humidity = (Humidity_prep / 65535) * 100
print("Humidity: ", Humidity)
if __name__ == "__main__":
#get_CHT8305_CONFIG()
#time.sleep(I2C_Delay_time)
#set_CHT8305_CONFIG_HEATER_ON()
#time.sleep(I2C_Delay_time)
#get_CHT8305_CONFIG()
#time.sleep(I2C_Delay_time)
#set_CHT8305_CONFIG_HEATER_OFF()
#time.sleep(I2C_Delay_time)
#get_CHT8305_CONFIG()
#time.sleep(I2C_Delay_time)
#get_CHT8305_MANUFACTURE_ID()
#get_CHT8305_VERSION_ID()
get_CHT8305_TEMPERATURE_HUMIDITY()
#get_CHT8305_HUMIDITY()
bon pour les parties avec # je me suis amuser a les supprimer et j'ai multitude d'erreurs donc ça reste comme ça pour l instant
concernant les modifs j'ai ajouter
et tous les
en
j'ai aussi découvert que les deux sondes on la même adresse et je sais pas comment la modifier autrement quand passant pas une carte de multiplexage ( voir le lien de la sonde 1er post)
après je comprend pas trop pourquoi mon module RTC m'affiche 2 adresse i2c (0x57 et 0x68)
j'ai donc mis une seul sonde et ajouter un module ads115 avec l'adresse 0x49
bizarrement la sonde m indique -40 et 100% d humi donc soit y a une broche qui fais faux contact ou il y a encore quelque choses qui m'échappe
Edit: bon j'ai bêtement rebrancher la 2 eme sonde ça change pas. Apres la flemme de descendre a chaque fois pour aller du pc au rasp pour interagir physiquement. J ai lancer des commande:
Code : Tout sélectionner
i2cget -y 1 0x40 0
i2cget -y 1 0x40 1
i2cget -y 1 0x40 2
i2cget -y 1 0x40 3
i2cget -y 1 0x40 4
et entre chaque je relance le script et les valeur change . j'ai Error: Read failed
pour 0 et 1 et pour 2 0x10 3 0xcd et 4 0x00. aillant lancer les i2cget de 0 a 4 pour voir le resultat puis recommancer de 4 a 0 avec un script lancer entre chaque. le 0 m indique une valeur correct
Code : Tout sélectionner
pi@raspberrypi:~ $ python3 test.py
I2C Devices found: ['0x40', '0x57', '0x68']
Temperature: 16.73975738155184
Humidity: 62.50095368886854
bon le truc c est que je sais pas quel sonde ou si c'est la moyenne des deux. je pense qu il en donne une au hasard.
concernant les adresses en mangeant la docs j'ai cru comprendre que si la broche A0 est non brancher 0x80 sur gnd 0x40 ( ce qui doit être le cas vu la doc et schéma) et d'autre si sur sda scl ou vcc. le truc c'est qu il y a un embout métal serti sur le câble donc je vais pas y toucher sans défoncer la sonde.
EDIT2: Si j arrive a avoir un résultat cohérent en supprimant une des deux sonde car si je branche uniquement la sonde sans module rtc et ads. elle n'est plus visible alors qu il y a une résistance pull up d intégré dans la sonde de 4k7 (a vérifier pour la valeur)
bref tous ça pour dire que si je prend un coupe tube de plombier et que je coupe la protection au dessus du sertissage je pourrai l'enlevé très facilement et peut être atteindre la broche A0 Pour la laisser libre voir avec une autre broche pour ensuite tous remettre et mettre un bout de gaine thermo et ça reste clean. j'y réfléchis encore un peu et je vais voir
Edit3: j'ai ouvert la sonde c est vrai minuscule et dicile d atteinde la broche A0 mais on verra bien
sinon le script est terminé j'ai ajouter une ligne pour actualiser la sonde car j avais tous le temps la même valeur j'ai aussi ajouter la partie envoi a domoticz et ajouter au crontab et la sonde est visible et dynamique sur domoticz dont il y aurai juste la deuxième a exploiter et cette partie serai terminé