Шина Raspberrypi Python.read_byte

Есть ли функция Python, которая будет реагировать как функция Wire.available в arduino, чтобы получить все данные по проводу, а не указывать, сколько байтов нужно захватить?

Это то, что у меня есть сейчас, и оно отлично работает, но я должен знать, сколько данных передается по сети, иначе это даст неожиданные результаты.

for i in range(0, 13):
 data += chr(bus.read_byte(address));

Спасибо!


person Butters    schedule 20.04.2013    source источник


Ответы (2)


Не идеальное решение, но я нашел способ точно знать, сколько байтов находится в пути.

На Arduino я указал максимальный размер буфера (128), добавил свои данные, затем обнулил остальные, а затем отправил все это. На Pi я получаю весь буфер, а затем первым делом фильтрую \x00 символов. Это не идеально, но пока работает.

for i in range(0, 128):
    data += chr(bus.read_byte(address))

print repr(data) 
    #prints the whole string as it is received

data = filter(lambda a: a != '\x00')

print repr(data)
    #prints the string without any '\x00' characters.
person Butters    schedule 22.04.2013

Я использую библиотеку PIGPIO для команд i2c на raspberrypi, у нее функции гораздо ближе к проводам.

http://abyz.co.uk/rpi/pigpio/python.html#i2c_read_device

Я думаю, что это функция, которую вы ищете.

person Grey Daleks    schedule 31.03.2015