Hallo, ich möchte gerne Werte auslesen die von einem Controller via I2C zur Verfügung gestellt werden. Über die Konsole funktioniert es, sprich über Terminal:
i2cdetect -y 1 > kompletten ersten I2C Bus durchsuchen
i2cdump -y 0x14 i > auslesen als i2c block
hat jemand von euch sowas schon einmal umgesetzt. Danke, ein ähnlicher Beitrag hier im Forum half mir nicht wirklich weiter.
I2C ATtiny und Python auf Raspberry
@MAP: Du musst halt mit einer passenden Bibliothek auf den I²C-Bus zugreifen. Beim Raspi beziehungsweise Debian bietet sich das `smbus`-Modul an. Welche Kommandos der Chip erwartet, sollte in der Dokumentation zum Chip nachzulesen sein.
Hallo, danke für den ersten Tip, nun habe ich mein erstes Script fertig. Die Kommunikation mit dem Controller funktioniert. Ich habe jetzt noch zwei Probleme.
1.) Der übertragene Wert wird Dezimal angezeigt, ich benötige diesen aber in Hex. Ich habe dieses mit .encode probiert, hat leider nicht funktioniert. Dann habe ich es noch mit hex(Zeichen) probiert auch ohne Erfolg.
2.) Wie schreibe ich den empfangenen Wert in eine Datei, with open..... hat bei meiner RS232 verbindung super funktioniert, wieso hier nicht.
3.) ich möchte eigentlich 4 Bytes auslesen, muss ich jetzt zweimal ein WORD auslesen oder halt vier bytes hintereinander?
Vielleicht kann mir noch einer einen Tip geben, vielen Dank
1.) Der übertragene Wert wird Dezimal angezeigt, ich benötige diesen aber in Hex. Ich habe dieses mit .encode probiert, hat leider nicht funktioniert. Dann habe ich es noch mit hex(Zeichen) probiert auch ohne Erfolg.
2.) Wie schreibe ich den empfangenen Wert in eine Datei, with open..... hat bei meiner RS232 verbindung super funktioniert, wieso hier nicht.
3.) ich möchte eigentlich 4 Bytes auslesen, muss ich jetzt zweimal ein WORD auslesen oder halt vier bytes hintereinander?
Code: Alles auswählen
#!/usr/bin/python2.7
import smbus
bus = smbus.SMBus(1)
addr = 0x14
zeichen = bus.read_byte_data(addr,0x00)
print zeichen
with open("akkueins.txt","ab") as fobj_out:
fobj_out.write(Zeichen.encode("hex"))
fobj_out.close()
@MAP: Schau Dir mal genau an was Du von dem Leseaufruf zurück bekommst. Insbesondere den Datentyp solltest Du Dir mal ausgeben lassen. Die `type()`-Funktion hilft dabei.