2015-04-08 2 views
0

Я пытаюсь использовать MCP23017 вместе с моей beaglebone. Я еще не получил свои устройства, но я начал готовить свою программу ... Я программирую GPIO штырьки сейчас .. Здесь я пытался читать и писать контакты с помощью команд I2C следующим образом: для write--Адрес i2c находится за пределами допустимого диапазона

a=('i2cset', '-y', '0', '0x20', '0x14', '0x01') 
subprocess.call(a, shell=True) 

аналогично с использованием i2cget для чтения .. Однако, когда я пытаюсь запустить его, он дает мне уведомление на моем экране:

Usage: i2cset [-f] [-y I2CBUS CHIP-ADDRESS [DATA-ADDRESS [MODE]] 
I2CBUS is an integer or an I2C bus name 
ADDRESS is an integer (0x03- 0x77) 

Является ли я получать это уведомление только потому, что у меня еще нет моего устройства? Или это проблема из-за использования модуля подпроцесса?

Подсказка:

Namita.

ответ

0

Предполагая, что вы пробовали команду в своей оболочке, и это сработало. Если вы установили shell=True в subprocess.call(), в качестве первого аргумента рекомендуется использовать строку вместо последовательности (кортеж в вашем случае).

Если вы используете shell=True и передаете последовательность в качестве первого аргумента, аргументы от второго будут рассматриваться как параметры самой оболочки.

Пожалуйста, обратитесь к этому ответу для более подробной информации: https://stackoverflow.com/a/15109975/870658

Вы можете переписать, как показано ниже

cmd = 'i2cset -y 0 0x20 0x14 0x01' 
subprocess.call(cmd, shell=True) 
+0

спасибо за этот ответ .. я на самом деле пытался это тоже, но я все еще получаю такое же уведомление. Это из-за несвязанного устройства? – Goldengirl

+0

@NamitaRaju Что происходит, когда вы запускаете 'i2cset -y 0 0x20 0x14 0x01' в оболочке? Если это работает, проблема возникает в модуле subprocess, иначе это не проблема в Python. – fbessho

+0

И когда я пробую это так, как вы предложили, я получаю сообщение об ошибке i2cset-y00x200x0A0x40: не найден .. Не следует ли его записывать как cmd = 'i2cset', '- y', '0', '0x20', ' 0x14' , '0x01'); subprocess.call (cmd, shell = True)? – Goldengirl