'IOError: [Errno 5] Input/output error" während der Verwendung SMBus für analog-Lesen durch RPi
Bin ich auf der Suche nach der Antwort für den Fehler im Titel genannten, aber für das erste mal, dass ich haavent eine Antwort bekommen noch. Wir ll im Versuch, um meine Raspberry pi Lesen Sie analoge Daten, aber wenn ich den code in terminal-Fenster, es gibt mich 'IOError: [Errno 5] Input/output error".
Den code im mit zu Lesen, analog-Daten ist unten gezeigt. Im mit PCF8591 ADC-Wandler.
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
Ich es verstehen könnte, weil die version geändert in raspberry pi und ich das ändern sollte SMBus(0) SMBus(1). Für diese überprüfte ich mein RPi version, die ist nicht überarbeitet. Aber trotzdem habe ich versucht, das Programm auszuführen, durch ändern der SMBus-Reihe, immer noch kein Glück mit ihm.
Den Fehler den ich bekomme, ist unten gezeigt:
Traceback (most recent call last):
File "analogread.py", line 7, in <module>
bus.write_byte(0x48, 0)
IOError: [Errno 5] Input/output error
Jede Hilfe ist willkommen. Dies ist der grundlegende Baustein, in meinem größeren Projekt, das ich versuche, um Sie auszuführen. So, die fas thinster bekomme ich Sache arbeiten, desto besser kann ich bauen meine Anwendung.
Danke
InformationsquelleAutor Sudhanshu Dixit | 2015-05-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Ursache HIERFÜR können sein, dass Sie von einem Remotestandort aus (SSH).
Nach dem trennen der remote-Sitzung sein, Ihr Programm ist noch in Arbeit und könnten versuchen, zu drucken oder zu interagieren Konsole, die nicht mehr lieferbar ist. Dies ist, was mir passiert ist.
Was ich gemacht habe ist die Verwendung von 'sudo username' um den Vorgang zu starten, dann kannst du dich Abmelden ohne Unterbrechung des Prozesses. Hoffe, dies hilft Ihnen.
nohup ist ein weiterer Weg, diese situation zu überwinden...
Vielen Dank so viel für diese! Ich verbrachte Stunden damit, herauszufinden, was falsch war und deine Antwort erklärt das aktuelle problem in Sekunden! Ich hatte ein logging-Modul und ich überwand die Fehler durch hinzufügen von try/except-block, um die log-Anweisungen, die an die Konsole ausgegeben wurde, weil es keine Verwendung von drucken, wenn niemand es suchen.
InformationsquelleAutor adimitrov
Diese Fehler könnten über Programmierer die Kontrolle, verursacht durch eine zufällige, noch üblich, event.
Ein Ansatz wäre, zu versuchen ein paar mal, bevor Sie mit dem folgenden Fehler:
InformationsquelleAutor viservolf
Während dieser thread ist alt, ich möchte zu teilen meine resuly in der Hoffnung, jemand anderes könnte geholfen werden, da alle Beiträge die ich stieß, nicht zu erwähnen, dieses Potenzial zu beheben.
War ich der Begegnung mit einem ähnlichen Problem, aber mit unterschiedlicher hardware (MCP23017 und ein LCD).
Nach zu jagen das problem für einige Zeit, ich fand das problem nicht die software, sondern hardware. Speziell die pull-up-widerstände auf der SCL und SDA Leitung.
Den RPI (3 in meinem Fall) hat 1.8 k widerstände und mein LCD hatte einige pull-up-widerstände installiert (~2.2 k). Ausführen des LCD-hatte nie ein problem, aber der MCP23017 wäre zufällig verschwinden aus dem bus und wieder beim laufen ein scan durch die Ausgabe von Befehl "i2cdetect -y 1".
Entfernen der zusätzlichen pull-up-widerstände auf dem LCD das problem behoben und alles funktioniert nun perfekt.
InformationsquelleAutor Daniel Loranger
Die Ursache HIERFÜR können sein, dass Sie austreiben der
read/write
Anrufe schneller als Ihre hardware können Sie akzeptieren. So fügen Sie kleine Verzögerungen zwischen dem lese/schreib-Operationen:Andere Möglichkeit ist, dass Gerät ist eigentlich nicht in dieser Adresse. Also, wenn die timeouts nicht helfen, versuchen Sie aus i2c-tools (sollte über die Paketverwaltung, es sei denn, Sie verwenden eine benutzerdefinierte software-distribution), um zu überprüfen, ob das Gerät tatsächlich verfügbar ist (manchmal könnte es sein eine Verdrahtung Problem wie vergessen, GND):
Warum i2c? Da SMBus ist im Grunde eine Modifikation des i2c-bus mit mehr streng definierte Spannung und timings.
InformationsquelleAutor plaes
Habe ich das problem beim fahren ein 7-segment serial display über I2C mit einem Modell b+ rpi. Korrigiert habe ich das problem durch einstellen der Baudrate entsprechend der Einstellung "Gerät" (9600). Ich glaube, der Standardwert ist 100.000.
Ändern Sie die baud-rate habe ich noch folgende Zeile in /etc/modprobe.d/i2c.conf:
Nach dem Neustart habe ich überprüft, die die Einstellung übernommen hatte, Effekt mit:
Seit dann, ich habe keine Probleme mit sporadisch auftretenden I/O-Fehler.
InformationsquelleAutor Micah Larson
Ich hatte das gleiche problem in einem RasPi -> ATMEGA Kommunikations-und ich löse es auf den slave. Diese Fehlermeldung tritt auf, wenn slave nicht antwortet.
Habe ich versucht den folgenden code auf dem RasPi, mit einem I2C-slave auf dem I2C-bus und konfiguriert mit der Adresse 0x8 :
vom smbus import SMBus
I2C_Bus = SMBus(1)
SLAVE_ADD = 0x8
I2C_Bus.write_byte(SLAVE_ADD, 0xAA)
Bietet der I2C slave ist auch konfiguriert, um zu bestätigen, sollte es funktionieren!
InformationsquelleAutor Alek6
Ich weiß, das Thema ist ziemlich alt aber der gleiche Fehler aufgetreten mit I2C und PCA9685, wenn ich Werte, waren nicht in Reichweite. Die Art, wie ich dachte, es war einfach nur deaktivieren und aktivieren von I2C:
sudo raspi-config
sudo reboot now
sudo raspi-config
sudo reboot now
Danach
sudo i2cdetect -y 1
erkennt mein I2C-PWM-Modul wieder zurück.InformationsquelleAutor Matt G.