Команда SMBus write_i2c_block_data()
Итак, я начал проект по микроконтроллеру, который использует связь I2C месяц назад, не зная ничего, кроме python.
Я должен поговорить с перистальтическим насосом, который использует строки ASCII для связи. Таким образом, моя установка в настоящее время состоит из Raspberry Pi, шины I2C, Arduino и перистальтического насоса. Arduino используется только как источник питания. Я подумал, что хорошей отправной точкой будет просто включить и выключить светодиод насосов. Код для светодиода - "L,1", а для светодиода - "L,0". ("" Указывает на то, что внутри него находится абсолютный код). [ссылка] https://www.atlas-scientific.com/_files/_datasheets/_peristaltic/EZO_PMP_Datasheet.pdf
Используя smbus.SMBus в python, я отправлял данные через команду через write_i2c_block_data. Документация smbus дает следующее: write_i2c_block_data(int addr,char cmd,long vals[]), однако я не понимаю, что означает "char cmd". Я не смог вставить туда строковую команду, и она сработала только тогда, когда я добавил туда целое число.
Вот код:
import smbus
import time
bus = smbus.SMBus(1)
slave_address = 0x67
led_on = 'L,1'
led_off = 'L,0'
def string_to_charlist(a_string):
stringlist = list(a_string)
return stringlist
def string_to_intlist(a_string):
lst = string_to_charlist(a_string)
intlist = []
for i in range(len(lst)):
an_int = string_to_charlist(lst[i])
intlist.append(an_int)
return intlist
ledon_intlist = string_to_intlist(led_on)
ledoff_intlist = string_to_intlist(led_off)
# this will result in ledon_intlist = [76,44,49]
# this will result in ledon_int =list [76,44,48]
command1_on = ledon_intlist.pop(0)
command1_off = ledoff_intlist.pop(0)
for i in range(1):
time.sleep(0.5)
bus.write_i2c_block_data(slave_address, command1_on, ledon_intlist)
time.sleep(0.5)
bus.write_i2c_block_data(slave_address, command1_on, ledon_intlist)
После запуска этого кода через командную строку raspberry Pi светодиод насосов начал мигать в указанный период времени. К сожалению, он никогда не переставал мигать, а также не появлялся, когда я искал его с помощью команды i2ctools i2cdetect -y 1
Я предполагаю, что чип насоса находится в бесконечном цикле.
Мои вопросы: 1. Как использовать команду write_i2c_block_data() и какой аргумент она принимает. В настоящее время я понял, что 1-й аргумент - это адрес ведомого, 2-й - начальный байт потока, а 3-й аргумент - остальные целочисленные значения потока, которые должны быть отправлены. 2. Что, возможно, могло пойти не так, что насос застрял в бесконечной петле и как я могу это исправить