54 lines
2 KiB
Python
Executable file
54 lines
2 KiB
Python
Executable file
#!/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 <bus_number> <address> [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)
|