'IOError: [Errno 5] Erreur d'entrée / sortie' lors de l'utilisation de SMBus pour la lecture analogique via RPi
J'ai été à la recherche de la réponse de l'erreur mentionnée dans le titre, mais pour la première fois je haavent eu encore de réponse. Nous ll im essayant de faire de mon Raspberry pi lire des données analogiques, mais lorsque j'exécute le code dans la fenêtre du terminal, il me donne 'IOError: [Errno 5] erreur d'Entrée/sortie'.
Le code im utilisez pour lire des données analogiques est indiqué ci-dessous. Im en utilisant PCF8591 convertisseur ADC.
from smbus import SMBus
bus = SMBus(0)
print "read a/d press ctrl + c to stop"
bus.write_byte(0x48, 0)
lastval = -1
while True:
reada = bus.read_byte(0x48)
if(abs(lastval-reada) > 2):
print(reada)
lastval=reada
Je comprends bien, il pourrait être à cause de la version modifiée de la raspberry pi et je dois changer SMBus(0) SMBus(1). Pour cela, j'ai vérifié mon RPi version qui n'est pas le plan révisé. Mais encore j'ai essayé d'exécuter le programme en changeant le SMBus nombre, toujours pas de chance avec elle.
L'erreur que j'obtiens est indiqué ci-dessous:
Traceback (most recent call last):
File "analogread.py", line 7, in <module>
bus.write_byte(0x48, 0)
IOError: [Errno 5] Input/output error
Toute aide est appréciée. C'est le bloc de base dans mon projet plus vaste qui im essayant de s'exécuter. Ainsi, le fas thinster je obtenir la chose de travail du mieux que je peux construire ma demande.
Merci
source d'informationauteur Sudhanshu Dixit
Vous devez vous connecter pour publier un commentaire.
La cause pourrait être que vous travaillez à distance (SSH).
Après la déconnexion de la session à distance, votre programme est toujours en marche et pourrait tenter d'imprimer ou d'interagir à la console, qui n'est plus disponible. C'est ce qui m'est arrivé.
Ces erreurs pourraient être au-delà du programmeur de contrôle, causée par un hasard, mais d'habitude, l'événement.
Une approche possible serait d'essayer une couple de fois avant de suivre avec l'erreur:
Bien que cette discussion est vieille, je veux partager mes resuly en espérant que quelqu'un d'autre pourrait être aidé comme pour tous les postes, je suis tombé sur de ne pas mentionner cette solution potentielle.
Je rencontre un problème similaire, mais avec un matériel différent (MCP23017 et d'un écran LCD).
Après avoir poursuivi le problème pendant un certain temps, j'ai trouvé le problème n'est pas logiciel, mais plutôt du matériel. Plus précisément le tirer vers le haut des résistances sur les lignes SCL et SDA.
Le RPI (3 dans mon cas) est de 1,8 k résistances et mon écran LCD eu quelques tirez des résistances installées (~2.2 k). L'exécution de l'écran LCD n'a jamais eu un problème, mais le MCP23017 serait aléatoire de disparaître de bus et de réapparaître lors d'une analyse par l'émission d'une commande "i2cdetect -y 1".
Enlevant le surplus des résistances de pull up sur l'écran LCD corrigé le problème et tout fonctionne parfaitement maintenant.
La cause pourrait être que vous êtes à repousser la
read/write
les appels plus rapidement que votre matériel peut les accepter. Donc, ajouter des petits retards entre les opérations de lecture/écriture:Une autre possibilité est que l'appareil n'est pas réellement présent dans cette adresse. Donc, si les délais ne permettent pas de, essayer i2c-tools (qui devrait être disponible via la gestion des paquets, sauf si vous êtes en utilisant une mesure de la distribution de logiciels) pour vérifier si l'appareil est effectivement disponible (parfois, il pourrait être un problème de câblage comme oublié GND):
Pourquoi i2c? Parce que SMBus est essentiellement une modification de bus i2c avec plus strictement défini les niveaux de tension et de timing.
J'ai rencontré ce problème lors de la conduite d'un 7-segment de l'affichage en série sur I2C avec un modèle b+ rpi. J'ai corrigé le problème en réglant le débit en bauds pour correspondre à la configuration de périphérique (9600). Je crois que la valeur par défaut est 100 000.
Pour modifier le débit en bauds, j'ai ajouté la ligne suivante à /etc/modprobe.d/i2c.conf:
Après le redémarrage, j'ai vérifié le paramètre a pris effet avec:
Depuis, je n'ai eu aucun problème avec les intermittents erreurs d'e/S.
J'ai eu le même problème dans un RasPi -> ATMEGA de la communication et je le résoudre sur l'esclave. Cette message d'erreur se produit si votre esclave ne répond pas.
J'ai essayé le code suivant sur le RasPi, avec un I2C esclave connecté sur le bus I2C et configuré avec la 0x8 adresse :
de smbus importation SMBus
I2C_Bus = SMBus(1)
SLAVE_ADD = 0x8
I2C_Bus.write_byte(SLAVE_ADD, 0xAA)
Fournissant l'I2C esclave est bien configuré pour reconnaître, il devrait fonctionner!
Je sais que ce sujet est assez ancien, mais la même erreur s'est produite avec I2C et PCA9685 quand j'ai mis les valeurs qui n'étaient pas dans la gamme. La façon dont j'ai pensé qu'il était tout simplement l'activation et la désactivation I2C:
sudo raspi-config
sudo reboot now
sudo raspi-config
sudo reboot now
Après,
sudo i2cdetect -y 1
détecte mon I2C PWM module de retour.