Если вы исчерпали для подключения внешних устройств (датчиков, модулей, светодиодов и др.) все выводы Arduino (для Arduino UNO это 6 аналоговых и 14 цифровых), то модуль расширителя портов (рис. M4.1) поможет вам добавить дополнительно 8 контактов (P0 … P7). Эти контакты можно использовать как в качестве входов (например, для чтения сигнала с датчика), так и для выходов (например, для включения светодиодов). Модули расширителя портов работают на шине I2C, и, если подключить в проекте последовательно 8 таких устройств, вы соответственно получите дополнительно 8 × 8 = 64 контакта для ввода и вывода.
Внешний вид, назначение контактов
Рис. M4.1. 8-разрядный расширитель портов PCF8574
Основные характеристики
Наименование | Значение |
Рабочий режим питания, В | от 2,5 до 6 В |
Низкий ток покоя, мА | максимум 10 мА |
Адресация | на 3 вывода аппаратных адресов для использования до 8 устройств (до 16 устройств при использовании PCF8574A) |
Схема подключения
Рис. M4.2. Схема подключения кнопки и светодиода
Программный код
- Скачайте по ссылке https://github.com/skywodd/pcf8574_arduino_library библиотеку PCF8574/PCF8575 Arduino library для работы Arduino с расширителем PCF8574.
- Скачав библиотеку, выберите ее и установить с помощью команды Скетч | Подключить библиотеку | Добавить ZIP библиотеку…
- Загрузите скетч из листинга M4.1.
Листинг M4.1. Подключение расширителя портов PCF8574
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include <Wire.h> #include "PCF8574.h" //Библиотека для расширителя портов. PCF8574 expander; //создадим объект класса PCF8574 с расширителем #define pinLed 0 //Номер пина светодиода на расширителе (P0) #define pinButton 1 //Номер пина кнопки на расширителе (P1) void setup(){ expander.begin(0x20); / Инициализация расширителя по адресу 0x20 expander.pinMode(pinLed,OUTPUT); //Настройка пина светодиода //(на расширителе) на выход expander.pinMode(pinButton,INPUT_PULLUP); // Настройка пина кнопки //(на расширителе) на вход } void loop(){ if (expander.digitalRead(pinButton)==HIGH) expander.digitalWrite(pinLed, HIGH); else expander.digitalWrite(pinLed,LOW); } |
Примечание
Если вы используете для управления проектом со смартфона платформу RemoteXY, закомментируйте в файле PCF8574.h библиотеки PCF8574 строку:
1 | #define PCF8574_INTERRUPT_SUPPORT |
Это строка номер 36. Тем самым вы отключите у расширителя поддержку прерываний, но зато предотвратите конфликт приложения RemoteXY и расширителя PCF8574, которые используют одинаковый вектор прерываний.