Erreur : OSError: [Errno 110] ETIMEDOUT (Capteur SCD30)

Fermé
quattro46 Messages postés 6 Date d'inscription jeudi 24 mars 2022 Statut Membre Dernière intervention 12 mai 2022 - 12 mai 2022 à 10:43
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 - 12 mai 2022 à 13:51
Bonjour,


Je programme actuellement un capteur SCD30 qui fonctionne, j'utilise un ESP8266 comme microcontrôleur j'ai les valeurs de CO2, humidité et de température mais au bout d'un certain temps il s'arrête et m'affiche l'erreur : OSError: [Errno 110] ETIMEDOUT

L'erreur est indiquée à la ligne 18.

Voici le code ci-dessous en Python :

from machine import Pin, I2C
import time
import struct

adressSCD30 = 0x61
GET_DATA_READY = 0x0202


i2c = I2C(sda=Pin(4), scl=Pin(5), freq=100000)

i2c.writeto(0x61,b'\x03\x00')
time.sleep(2) #attendre un peu que le capteur soit prêt

boucle=0

while boucle==0 :
    i2c.writeto(0x61,b'\x02\x02')
    var= i2c.readfrom(0x61,3)
    dataready=list(var)
    print(dataready)
    ready = dataready[1]
    time.sleep(1)
    if ready == 1:
        i2c.writeto(0x61,b'\x03\x00')
        time.sleep(0.0001)
        var= i2c.readfrom(0x61,18)
        data=list(var)
        #print(data)
        for i in range (0,17) :
            data[i]=int(data[i])
        #print(data)
        var=struct.pack('>B',data[0])
        #print(var)
        ready = 0
	struct_co2=struct.pack('>BBBB',data[0],data[1],data[3],data[4])
	float_co2=struct.unpack('>f', struct_co2)

	struct_T=struct.pack('>BBBB', data[6], data[7], data[9], data[10])
	float_T=struct.unpack('>f', struct_T)

	struct_rH=struct.pack('>BBBB', data[12], data[13], data[15],  data[16])
	float_rH=struct.unpack('>f', struct_rH)

	print(float_co2[0], "ppm")
	print(float_T[0], "°C")
	print(float_rH[0], "%")
    time.sleep(2)
    
boucle=1
    



Je n'arrive pas à résoudre ce problème.

Je vous remercie par avance pour votre aide.



Configuration: Windows / Chrome 101.0.4951.64

1 réponse

mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 7 749
Modifié le 12 mai 2022 à 13:51
Bonjour,

Je vois deux explications possibles :
  • soit tu as mal initialisé l'objet
    I2C
    (paramètres du constructeur invalide, ligne 9)
  • soit le device avec lequel tu interagis est trop lent, et tu peux tenter d'augmenter le timeout. Ce qui est étonnant c'est que d'après cette documentation, l'objet
    I2C
    n'est pas supposé lever cette exception (et n'a donc pas de paramètre
    timeout
    ) contrairement à l'objet
    SoftI2C
    .


Bref, il y a quelque chose qui n'est pas clair... Il faudrait regarder à l'intérieur du code de ton package
machine
pour mieux comprendre ce qui se passe, car la documentation que j'ai donnée en lien n'est peut-êtr e pas à jour (et peut-être que du coup, l'objet
I2C
expose un paramètre
timeout
).

Bonne chance
0