#!/usr/bin/env python import sys import time from smbus2 import SMBus, i2c_msg def listen_i2c(bus_number, address, register=0x00): """ Listens for incoming data on the specified I2C address and prints received bytes. :param bus_number: I2C bus number (e.g. 1 for /dev/i2c-1) :param address: I2C address to listen to (in integer, e.g. 0x48) :param register: Register to read from (default 0x00) """ bus = SMBus(bus_number) print(f"Listening on I2C bus {bus_number}, address {hex(address)}, register {hex(register)}") try: # color = True while True: try: msg = i2c_msg.read(address, 8) # Read 8 bytes! bus.i2c_rdwr(msg) data = bytes(msg) int_list = list(data) print(f"Received: {int_list}") # Try reading 1 byte from the register # data = bus.read_block_data(address, register) # print(f"Received: ({data})") # if color: # msg = i2c_msg.write(address, create_led_color_packet(255, 0, 0)) # else: # msg = i2c_msg.write(address, create_led_color_packet(255, 255, 0)) # # bus.i2c_rdwr(msg) # color = not(color) # bus.write_i2c_block_data(address, register, create_led_color_packet(255, 0, 0)) # print("Write") except Exception as e: print(f"Write error: {e}") time.sleep(0.5) except KeyboardInterrupt: print("Stopped listening.") finally: bus.close() print("closed bus") if __name__ == "__main__": if len(sys.argv) < 3: print("Usage: python i2c_listener.py
[register]") print("Example: python i2c_listener.py 1 0x48") sys.exit(1) bus_number = int(sys.argv[1]) address = int(sys.argv[2], 0) register = int(sys.argv[3], 0) if len(sys.argv) > 3 else 0x00 listen_i2c(bus_number, address, register)