6.5. Управление блоком реле по ИК-каналу. Пример с модулем NodeMCU
В набор включен инфракрасный пульт дистанционного управления с платой инфракрасного приёмника (рис. 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 по ссылке.




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 

 

Вверх