Nouveau : le pare-feu IA surveille toute la plateforme et explique chaque incident en termes simples. Découvrez comment ça marche

Le SCD30 sur Pi renvoie une erreur Remote I/O, dois-je écrire l'I2C en Python en bit-bang ?

Le SCD30 sur Pi renvoie une erreur Remote I/O, dois-je écrire l'I2C en Python en bit-bang ?

Résolu 5 3

Traduit de Türkçe par IA ·

Nous mesurons le CO2 dans les salles de réunion, avec un Pi 3B+ et un Sensirion SCD30. Le Pi lit toutes les 30 secondes et envoie co2, temp, rh à Hermetry. Certaines lectures échouent avec cette erreur :

OSError: [Errno 121] Remote I/O error
  File "scd30.py", line 58, in read_measurement
    data = bus.read_i2c_block_data(0x61, 0x03, 18)

Environ 20 à 30 fois par heure. Il y a des trous dans le graphique. D’après ce que j’ai lu, le SCD30 utilise le clock stretching et l’I2C matériel du Pi ne le gère pas correctement. Je pense écrire le maître I2C en Python en bit-bang avec RPi.GPIO. Est-ce logique, quelqu’un l’a-t-il déjà fait ? Je ne suis pas sûr que la temporisation tienne en Python.

Ağ geçidi yine bağlanıyor…
♥ 2

Traduit de Türkçe par IA ·

Avez-vous essayé de réduire la vitesse ? Avec i2c_arm_baudrate dans config.txt.

♥ 0

Traduit de Türkçe par IA ·

Je l’ai baissé à 10000, l’erreur est tombée à 5-6 par heure mais ne s’est pas arrêtée.

Ağ geçidi yine bağlanıyor…
♥ 0

Traduit de Türkçe par IA ·

Ne l’écris pas toi-même en Python, le noyau dispose déjà d’un I2C logiciel prêt à l’emploi qui fait le bit-banging et surveille correctement le clock stretching. C’est justement pour cette raison que j’ai migré le SCD30 vers lui. /boot/config.txt (sur Bookworm /boot/firmware/config.txt) :

dtoverlay=i2c-gpio,bus=3,i2c_gpio_sda=23,i2c_gpio_scl=24,i2c_gpio_delay_us=2

Redémarre, puis vérifie avec i2cdetect -y 3 que 0x61 apparaît. Dans le code, utilise SMBus(3) au lieu de SMBus(1). Déplace le capteur sur GPIO 23/24 et place une résistance de tirage (pull-up) de 4,7k vers 3,3V (les pull-ups internes des broches I2C matérielles ne sont pas présentes ici). Si tu as d’autres capteurs, ils peuvent rester sur le bus 1.
Fais aussi la lecture selon la commande « data ready » du capteur (0x0202) : si tu lis alors que la mesure n’est pas prête, tu obtiens également n’importe quoi. Si une erreur survient encore de temps en temps, réessaie une fois et saute cette lecture ; pour une lecture sautée, n’envoie rien, la dernière valeur reste dans Hermetry.

Solution acceptée♥ 2

Traduit de Türkçe par IA ·

Je l’ai passé sur le bus 3 avec un overlay, et depuis 2 jours, pas un seul Errno 121. J’avais oublié les pull-ups : au premier démarrage, i2cdetect était vide, et une fois les 4.7k ajoutées, il est apparu. Heureusement que je ne me suis pas lancé dans l’écriture en bit-bang.

Ağ geçidi yine bağlanıyor…
♥ 0

Traduit de Türkçe par IA ·

Pourquoi réduire la vitesse n’a-t-il pas tout résolu, alors ? Je me pose la question.

♥ 1
6 sujets de 1 à 6 (sur un total de 6)
  • Vous devez être connecté pour répondre à ce sujet.

Rejoignez la discussion

Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

Partager