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

quattro46 Messages postés 6 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    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