| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- from smbus2 import SMBus, i2c_msg
- import struct
- import time
- # Beispiel: I2C-Adresse des Geräts
- DEVICE_ADDRESS = 0x48 # z.B. EEPROM oder Sensoradresse
- I2C_BUS = 1 # I2C-1 ist meist Standard beim Raspberry Pi
- slot = input("Slot id (default: 0): ")
- if slot == "": slot = 0
- else: slot = int(slot)
- def read_status(bus):
- data_to_write = [(0x06 | slot << 4)]
- write = i2c_msg.write(DEVICE_ADDRESS, data_to_write)
- bus.i2c_rdwr(write)
- # Lesen von 3 Bytes roher Binärdaten
- read = i2c_msg.read(DEVICE_ADDRESS, 8)
- bus.i2c_rdwr(read)
- data_read = bytes(read)
- print("data:", data_read.hex())
- data = struct.unpack("<HhHH", data_read)
- # data[0] is voltage in mV
- print(f"Spannung: {data[0]/1000:.2f}V, Strom: {data[1]}mA, Temperatur: {data[2]}°C, Error: 0x{data[3]:02X}")
- with SMBus(I2C_BUS) as bus:
- # Schreiben von Rohdaten
- while True:
-
- print("Mögliche Aktionen:")
- print(" r <n> n Zyklen lesen")
- print(" w <i> i mA Strom positiv: laden (DAC), negativ entladen: (PWM)")
- act = input("nächste Aktion: ")
- if act[0] == "r":
- n = int(act.split(" ")[1])
- for i in range(n):
- time.sleep(1)
- try:
- read_status(bus)
- except:
- print("Bus error.")
- elif act[0] == "w":
- i = int(act.split(" ")[1])
- # 5 is the command for setting the current
- byte_str = struct.pack("<Bh", (5 + (slot << 4)), int(i))
- print("Sending bytes", byte_str.hex())
- write = i2c_msg.write(DEVICE_ADDRESS, list(byte_str))
- bus.i2c_rdwr(write)
- else:
- "Ungültiges Kommando."
-
|