Управление реле по i2c OrangePi PC через PCF8574

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
immortal
Сообщения: 1112
Зарегистрирован: Вт янв 29, 2013 9:16 am
Откуда: Белозерск
Благодарил (а): 15 раз
Поблагодарили: 384 раза
Контактная информация:

Управление реле по i2c OrangePi PC через PCF8574

Сообщение immortal » Вс апр 09, 2017 6:25 pm

Создаем bash скрипт rele.sh например в директории сайта /var/www/ следующего содержания

Код: Выделить всё

#!/bin/bash
# передача параметров
# 1 параметр - адрес i2c pcf8574
# 2 параметр - номера регистров (1,2,4,8,16,32,64,128), 255 - все регистры
# 3 параметр - состояние регистра (0 или 1) 2 - изменение состояния регистра

a=`i2cget -y 0 $1`;
b=$(($a | $2))
c=$((255 - $2))
d=$(($a & $c))
if [ $3 = 1 ]
then
`i2cset -y 0 $1 $b`
fi
if [ $3 = 0 ]
then
`i2cset -y 0 $1 $d`
fi
скрипт принимает 3 параметра: адрес PCF8574, номер регистра в десятичной системе (1,2,4,8,16,32,64,128) и значение регистра. Если у Вас будут использоваться ещё и вторая шина i2c то можно добавить 4-й параметр - номер шины i2c, тогда вместо нуля в командах i2cset и i2cget надо установить переменную $4.
Но для запуска данного скрипта из MajorDoMo необходимо пользователя www-data добавить в группу i2c командой

Код: Выделить всё

usermod -a -G i2c www-data
Нам осталось только вызвать скрипт из MajorDoMo и передать ему параметры, вставляем вызов скрипта в нужное место системы MajorDoMo

Код: Выделить всё

 exec ("/var/www/rele.sh 0x20 8 0"); 
в данном случае логический 0 будет на 4-м регистре, если вы хотите установить для всех регистров значения 0 или 1 то номер регистра должен быть 255.
Lubuntu на cubieboard2 + ds9490R
DietPi на Orange Pi PC + 1wire на esp8266 с прошивкой Homes-smart.ru
Ответить