Автор Тема: GPIO pcf8574  (Прочитано 1606 раз)

Оффлайн zevs3344

GPIO pcf8574
« : Апрель 10, 2016, 02:38:07 pm »
Эксперимент закончен и решил опубликовать еще одну мою наработку.

pcf8574 микросхема очень полезна тем, что может управлять 5 вольтами, а не 3.3в как gpio у апельсина/малины.
Зачем 5 в? к примеру для реле.

Моя домашняя система умный дом состоит из датчиков температуры и реле.
Датчики температура lm75 и dht22 и bmp180 (о них я писал тут уже)
Реле управляют охлаждением апельсина, охлаждением gc3355 и g-blade, подсветкой комнат и подсветкой коридора.
В коридоре стоит ардуино нано, датчик движения и лента диодов.
с 18 часов вечера и до 7 утра, реле включает ардуинку и, она ориентируясь по датчику движения, включает подсветку.
Все примитивно, не спорю.

У меня стоит образ дебиан и Wiring  PI. на сайте сказано, что заявлена поддержка pcf8574 при добавлении в бинарик строки
#include <pcf8574.h>

Подключение:
1) берем pcf8574 (покупал на алиэкспресс за 150 руб. готовая с резисторами и прочим. распайка на 4 балла из 5. все нужное есть. даже джамперы для изменения адреса.)
2) SDA и SCL подключаем к GPIO. не забываем что SDA/SCL шина параллельная т.е. можно вешать на нее кучу всего.
К примеру у меня параллельно подключены lm75 штук 5 и две pcf8574. В будущем, подключу еще bmp180.
Адреса, ах да, pcf8574 как и lm75 занимают свою нишу адресов и максимум на шине можно подключить до 8 однотипных устройств.
lm75 висят на 4Х (40, 41, 42....4f)
pcf8574 висят на 2Х (20, 21, 22....2f)
Слышал, что есть pcf8574а которые могут занимать еще одну нишу.
Считаем... pcf8574 по 8 пинов можно подключить 8 штучек = 64 пина...
если есть pcf8574а то еще плюс 64 пина. в сумме 128  ;D
Для супер извращенцев еще существует Pcf8575 с 16 портами/пинами.

3) SDA и SCL подключены. Подключаем и питание (5в - VCC, GND)
4) Команда для обнарушения устройства:
i2cdetect -y 0
в таблице должно появится устройство в диапазоне (20....2f).
У меня появилось 0х24 т.к. я выставил джампер для такого адреса.
5) у меня есть отдельная папка src где я храню свои мусор говнокод исходники .
6)
nano test.c
создаем файл и пишем.
#include <wiringPi.h> //добавление библиотеки
#include <pcf8574.h> //добавление библиотеки для работы с пцф
#include <string.h> //библиотека для работы функции сравнения strcmp
int main (int argc,char* argv[]) //обычный main в котором argc- кол-во аргументов, argv - массив аргументов
{
wiringPiSetup(); //запуск либы wiringPiSetup
int i;
pcf8574Setup(100, 0x24); //адрес pcf где 0x24 выставить ваш адрес.
//i2cdetect -y 0 показал что pcf у меня на "24" адресе
for(i=0;i<8;i++){ //цикл. у pcf 8 выходов.
pinMode(100+i,OUTPUT); //выставляет эти выходы на вывод а не вход.
if(strcmp(argv[1+i],"1")){ // сравнение.
digitalWrite(100+i,HIGH); //подать высокий уровень на выход.
}else{
digitalWrite(100+i,LOW);//подать низкий уровень на выход.
}
}
delay(100); //пауза. зачем? а прост

}


компилировать код командой
gcc -Wall -o test test.c -lwiringPi
где test - выходной бинарик.
test.c - наш текстовый файл.

Запускать бинарик таким образом:
./test 1 1 1 1 1 1 1 1
test - наш бинарик, а единицы - аргументы.
К примеру: не умею я объяснять
./test 1 0 0 0 0 0 0 0
подаст высокий уровень на первый вывод pcf, а на остальные подаст низкий уровень
./test 1 1 1 1 1 1 1 1
подаст высокий уровень на все выводы pcf.
./test 0 0 0 0 0 0 0 1
подаст высокий уровень на последний вывод pcf, а на остальные подаст низкий уровень
Зачем это все? управлять реле. подключены на pcf два 4-х канальных реле т.е. я управляю 8 каналами реле.

Что далее?
можно написать php код который будет хранить значения реле в базе и выводить специальные кнопки вкл/выкл реле на своем сайте.
Минусы: программа не опрашивает значения pcf, а лишь посылает сигнал.
Идей как опрашивать pcf у меня нет.
« Последнее редактирование: Апрель 10, 2016, 02:39:38 pm от zevs3344 »

Оффлайн Vital864

  • Посвященный
  • ***
  • Сообщений: 247
  • Лайков: 36
  • Карма: +4/-0
  • Orange Pi Plus
    • Просмотр профиля
Re: GPIO pcf8574
« Ответ #1 : Апрель 10, 2016, 07:36:33 pm »
zevs3344, ты имеешь ввиду опрос состояний реле? Если да, то можно половину пинов использовать как входа, и опрашивать реле, т.е. организовать обратную связь. Или в этой плате нет входов? Судя по описанию на Али, пишут что I/O.
Orange Pi Plus

Оффлайн zevs3344

Re: GPIO pcf8574
« Ответ #2 : Апрель 10, 2016, 08:22:19 pm »
zevs3344, ты имеешь ввиду опрос состояний реле? Если да, то можно половину пинов использовать как входа, и опрашивать реле, т.е. организовать обратную связь. Или в этой плате нет входов? Судя по описанию на Али, пишут что I/O.
Можно и так=) но по-моему у него можно одновременне выводить только одно состояние: или входы, или выходы.
И оч затратно, получается... но.. идея норм.

Решение оказалось простым:
gpio -x pcf8574:100:0x24 read 104
где 104 - пин который хотим опросить
« Последнее редактирование: Апрель 10, 2016, 09:22:22 pm от zevs3344 »

Оффлайн Vital864

  • Посвященный
  • ***
  • Сообщений: 247
  • Лайков: 36
  • Карма: +4/-0
  • Orange Pi Plus
    • Просмотр профиля
Re: GPIO pcf8574
« Ответ #3 : Апрель 10, 2016, 09:53:33 pm »
Закажу тоже такую. Тоже предвидится использование входов/выходов по i2c, но мне необходимы, в основном аналоговые. Бюджет вроде пустячный, попробую.....
Orange Pi Plus

Оффлайн Vital864

  • Посвященный
  • ***
  • Сообщений: 247
  • Лайков: 36
  • Карма: +4/-0
  • Orange Pi Plus
    • Просмотр профиля
Re: GPIO pcf8574
« Ответ #4 : Июль 19, 2016, 08:34:56 am »
Чё-та я не вкуриваю, при чём здесь форекс?  :o
Orange Pi Plus

Оффлайн warik

  • Administrator
  • Старейшина
  • *****
  • Сообщений: 547
  • Лайков: 151
  • Карма: +10/-0
    • Просмотр профиля
    • OrangePi.pp.ua
Re: GPIO pcf8574
« Ответ #5 : Июль 19, 2016, 01:38:51 pm »
Vital864 cпам был.
Orange Pi PC, Orange Pi One, Orange Pi Zero