Sonde CHT8305

Forum dédié aux bricolages d'objets connectés IOT et leurs communications avec DomoticZ :
- Remplacement de firmware des prises, modules relais ...
- Fabrication à base d'ESP8266, de NodeMCU, de Weemos et consorts ...
kpom
Messages : 14
Inscription : 04 janv. 2023, 14:34

Sonde CHT8305

Message par kpom »

Bonjour

pour résumer très rapidement j'avais un rpi1. j'ai miss click sur vérifier maj sur domoticz. aucun message pour confirmer la maj est partie. incompatibilité Arm6 pas de backup. achat d'un rpi4. j'ai sauver mon Install sauf que les dht22 marche pas. étant donné qu'il ne m ont jamais satisfait. je suis partie sur ça;
https://www.dfrobot.com/product-2600.html
j'avais pas vraiment trouver le nom de la sonde mais je me suis dit en i2c ça va aller tous seul. et étant dans une atmosphère assez humide je voulais éviter le sonde pcb a nue et vu que j'ai pas d'imprimante 3d pour faire un boitier ...

je branche les 2 sondes elle sont reconnue

et après bah je trouve pas de librairie autre que arduino.

a force de chercher j'ai compris que les dht faut une autre libraire pour les rp4 mais j'ai rien pigé.

étant juste bon a copier coller des lignes de commandes. je constate que pas mal de tutos sont obsolètes.
donc a part acheter un Arduino et éventuellement le connecter au rasp...

j'avoue que je pète un câble. j essai pourtant d anticiper et manger un max de tuto avant d acheter quelque chose mais au final ça ce passe jamais comme sur le tuto.

Apres je peut aussi acheter les même sonde que tous le monde, en plus chère soit moche et demande une protection ( contre la lumière direct ou humidité ) ça me gonfle de payé plus et devoir en plus faire des bricole en carton

Si quelqu'un peut m aider a confirmer l'incompatibilité ou m'aiguiller j'en serai reconnaissant.

en attendant dans je vais demander a chat gpt d arrêter avec

sudo pip3 install adafruit-circuitpython-cht8305 ça existe pas message d erreur et

wget https://www.cirque.com/sites/default/fi ... yPi.tar.gz et ça non plus

toute façon je lâcherai pas l 'affaire mem si a chaque pas en avant je recule de 10

EDIT 1 :J'ai essayé un script en utilisant import smbus. casse la tete avec des caractere non reconnu malgré l
a ligne

Code : Tout sélectionner

 # -*- coding: utf-8 -*-
j'ai viré tous les caractère spéciaux c'est immonde et error remote i/o

Code : Tout sélectionner

#!/usr/bin/python

# -*- coding: utf-8 -*-
import smbus

address = 0x40
bus = smbus.SMBus(1)
temp = bus.read_word_data(address, 0x00)
temp = ((temp << 8) & 0xFF00) + (temp >> 8)
temp = round((temp / 65535) * 165 - 40, 2)
humidity = bus.read_word_data(address, 0x01)
humidity = ((humidity << 8) & 0xFF00) + (humidity >> 8)
humidity = round((humidity / 65535) * 100, 2)
print("T : {}".format(temp))
print("H : {}%".format(humidity))
bref j'ai trouvé ça https://github.com/Loztal/CHT8305_SEN0546

par contre j'ai pas trop compris micro et circuit python et encore moins les environnement virtuel
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Modération

Message par Keros »

Sujet déplacé dans la section dédiée au DIY.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
kpom
Messages : 14
Inscription : 04 janv. 2023, 14:34

Re: Sonde CHT8305

Message par kpom »

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

Code : Tout sélectionner

!/usr/bin/env python3
et tous les

Code : Tout sélectionner

stop = False
en

Code : Tout sélectionner

end = False
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é
Répondre