В набор включен инфракрасный пульт дистанционного управления с платой инфракрасного приёмника (рис. 6.8)
Рис. 6.8. Пульт ДУ с ИК приёмником в комплекте.
Это позволяет нам организовать управление исполнительными устройствами, подключенными к Relay Shield с помощью ИК пульта. Схема подключения ИК приемника к модулю NodeMCU приведена на рис. 6.9.
Рис. 6.9. Схема подключения ИК-приёмника к модулю Node MCU
После подключения ИК-приёмника необходимо узнать коды клавиш пульта, которые мы будем использовать для управления исполнительными устройствами. Скачаем и установим в Arduino IDE библиотеку IRremoteESP8266 и загрузим на модуль NodeMCU пример из данной библиотеки IRrecvDemo. Нажимая кнопки пульта узнаем коды клавиш, которые будем использовать (например цифровые "1", "2", "3").
Рис. 6.10. Получение кодов ИК-пульта (клавиши "1", "2", "3").
Теперь мы будем использовать эти коды в скетче управления "умным домом". Вносим изменения в скетч. Подключаем библиотеку
#include
Пин подключения ИК приемника D6 (GPIO12).
int RECV_PIN = 12;
Создаем необходимые переменные
IRrecv irrecv(RECV_PIN);
decode_results results;
В процедуре setup() запускаем ИК-приемник
irrecv.enableIRIn();
Добавляем в цикл loop() код для обработки команд с ИК пульта (см. листинг 6.5).
Листинг 6.4
void loop() {
…………
// обработка кодов с пульта
if (irrecv.decode(&results)) {
switch(results.value, HEX){
case 0xFD00FF: // "1ʺ
datarelays[0]=1- datarelays[0];
set_status_relays();
break;
case 0xFD807F: // "2ʺ
datarelays[1]=1- datarelays[1];
set_status_relays();
break;
case 0xFD40BF: // "3ʺ
datarelays[2]=1- datarelays[2];
set_status_relays();
break;
default:
break;
}
irrecv.resume();
}
……..
}
Функция set_status_relays() осуществляет включение/выключение реле, установкой необходимых уровней на выходах порта B микросхемы MCP23017.
// управление реле
void set_status_leds() {
int relays=0;
for(int i=0;i<7;i++)
relays=relays +( statusrelays[i]<<i);
// записать данные в PORT B
Wire.beginTransmission(0x20);
Wire.write(0x13); // address PORT B
Wire.write(leds); // PORT B
Wire.endTransmission();
delay(100); // пауза
}
Скачать полный скетч можно на сайте www.arduino-kit.ru по ссылке.