Команда 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. Что, возможно, могло пойти не так, что насос застрял в бесконечной петле и как я могу это исправить

0 ответов

Другие вопросы по тегам