본문 바로가기
Hardware/Home Assistant(라즈베리파이)

IR 리모컨 Bridge LQ-Y08, ESPHome 펌웨어로 Home Assistant와 연동

by lovey25 2021. 5. 27.
반응형

Home Assistant(HA)에 집안에 모든 가전제품을 다 연동하면 욕심이 없어질까요? 이번엔 선풍기, 사운드바, 리모컨 형광등 등등 적외선 리모컨으로 동작하는 기기들도 모두 HA에 엮어보려 합니다.

그러려면 적외선 LED나 수신 모듈 그리고 기타 몇 가지 부품만 있으면 간단하게 IR Bridge 만들 수 있는데요. 요즘 알리에서 저렴하고 디자인도 이쁜 것들이 많아서 굳이 부품 모아서 만드는 게 무슨 의미인가 싶더라고요. 잘 안되면 화만 나고 말이죠.

그래서 여기저기 자료 좀 찾아보다가 커스텀 펌웨어 올리기 괜찮다는 모델 중에서 가격도 착한 걸로 하나 골랐습니다. 제품 이름이 뭔지 확실하지 않습니다. 나중에 제품을 받고 나서 알게 된 건데 모델명은 LQ-Y08이었습니다.

역시나 주문하고 잊을만하니 도착했습니다.

개봉기

박스는 살짝 찌그러졌지만 물건에는 이상 없습니다.

구성품은 본체와 USB 케이블 그리고 설명서입니다. 제품 본체는 윗면은 하얀색 반짝이는 플라스틱으로 되어있는데 속이 보이지는 않지만 왠지 보일 것 같은 느낌의 투명도가 약간 있는 그런 재질입니다. 아마 IR 신호가 통과를 할 수 있도록 되어 있는 것 같습니다.

제품 바닥면에는 리셋 버튼과 USB 5핀 단자가 위치하고 있는데 USB 단자가 제품 가장자리가 아니라 안쪽을 향해 있어서 케이블을 연결했을 때 선이 아주 깔끔해 보이도록 디자인되어 있습니다.

설명서

설명서에 친절하게 사용법이 잘 나와있는데 이런 제품들은 컨트롤할 앱만 설치하면 앱에서 자세히 안내를 해주기 때문에 큰 의미는 없죠.

제품 동작 확인

일단 제품에 이상이 없는지 테스트를 위해서 Tuya hub앱을 깔고 연동하고 몇 가지 제품들 추가해서 사용해 봤는데요. 제품엔 아무런 이상이 없네요.

일단 집에 있는 형광등, 선풍기, 사운드바의 리모컨 신호를 인식시켜 봤습니다. 좀 대중적인 제품들 같은 경우에는 전원 버튼만 매칭 시키면 알아서 버튼들도 등록이 되는데 그렇지 않은 제품은 몇 개의 버튼을 매칭 시키거나 그것도 안되면 일일이 버튼 하나하나를 등록시켜주어야 합니다. 

이렇게 Tuya 앱을 이용해서 사용할 수도 있지만 우리 HA인들은 이런 거 못 참죠. 무조건 HA에서 연동이 되어야 하지 않겠습니까? 사실 HA에서 Tuya를 지원하기 때문에 등록된 리모컨들 모두 HA에서 Tuya플랫폼 통해서 연동이 되면 커스텀 펌웨어 올리지 않고 그냥 사용하려고 했었습니다. 커스텀 펌웨어에서는 리모컨 신호 하나하나 등록하는 게 귀찮은 일이 될 수도 있으니까요. 그런데 아쉽게도 Tuya 플랫폼에서는 수동으로 등록한 리모컨들은 인식하지 못했습니다.

위에 사진에서 보시다시피 이미 Tuya 앱에는 3개의 장치가 연동되어 있는 상태이지만 HA에서 불러온 Tuya 구성요소에서는 Bose 사운드바 1개만 인식이 된 상태였습니다. 그리고 인식된 사운드바 마저도 전원 버튼 1개만 사용할 수 있네요.

자 이제 뒤도 돌아볼 필요 없이 바로 커스터마이징 들어갑니다.

UART 포트 연결

ESP8266 칩셋을 사용한 제품이기 때문에 일단 보드에서 UART 단자만 찾는다면 일사천리죠. 이미 다른 고수분들께서 인터넷이 공유해주신 사진들을 보고 일단 열어보면 길이 보인다는 믿음을 얻었기 때문에 망설임 없이 뚜껑을 깠습니다. 

이 제품은 특이하게 상하판이 걸쇠나 볼트로 고정되어 있지 않고 본드로 붙어있습니다. 그래서 모르고 봤을 때 뚜껑을 어떻게 열어야 할지 막막한데요. 깊이 고민할 필요 없습니다. 그냥 막 쑤셔줍니다. 단, 저처럼 무식한 접근방법에는 대가가 따릅니다. 뚜껑이 조금 깨져버렸습니다. 어차피 한번 열고나면 본드를 다시 붙이거나 테이프를 붙여야 해서 큰 의미는 없지만 되도록이면 원형을 그대로 살리고 싶으시다면 최대한 본드가 붙어있는 부분을 칼로 잘 잘라서 조심스럽게 열어주시면 되겠습니다.

뚜껑을 열고나니 기대했던 대로 UART단자가 보이네요. 라벨도 이쁘게 붙어있습니다. 여기에 USB-UART 변환 모듈을 연결해야 하니 점프선 납땜을 해줘야 하는데요. 늘 그랬듯 핀헤더를 붙여주겠습니다.

PCB에 홀이 나있지 않아서 핀헤더를 꽂을 수는 없지만 뭐 어쩔 수 없죠. 그냥 위에다가 올려만 놓고 땜질하겠습니다. 바로 뒷면에 ESP8266 모듈이 붙어있는 형태라서 구멍을 낼 수는 없었나 봅니다.

다른 분들의 후기를 보면 여기서 납땜을 할 때 납이 잘 붙지 않아서 부담을 호소하시는 분들이 계시던데요. 기판 위에 납을 싫어하는 성질의 코팅이 있어서 그런데요. 솔더링 플럭스를 발라서 인두로 지져주면서 닦아내면 납을 좀 더 잘 붙게 만들 수 있습니다. 

저는 일단 위 사진처럼 첫 번째 단자에 납을 한 덩어리 올려준 상태에서 핀헤더를 올려서 먼저 납땜해주고 핀헤더가 고정된 상태에서 나머지 다리들을 땜질해 주었습니다.

나름 조심스럽게 했지만 납이 이쁘게 붙지는 않네요... ㅡㅡ;

일단 UART 포트를 연결할 준비는 끝났습니다. 피이 잘 붙었나 테스트해 보겠습니다.

저는 펌웨어 작업을 하는데 "esptool.py"을 사용했습니다. esptool.py에 대한 내용이 필요하시면 https://kwonkyo.tistory.com/440를 참고해 주세요.

위에서 작업한 핀헤더를 통해서 UART-USB 브리지 모듈(FT232RL FTDI USB to TTL Serial Converter)과 연결해 줍니다. 연결방법은 3V3 단자는 3.3V 단자를 GND는 GND끼리 연결합니다. 그리고 Tx와 Rx는 서로 교차되도록 (Tx-Rx, Rx-Tx) 연결해줍니다.

ESP8266 칩셋은 펌웨어 작업을 하기 위해서는 프로그램 모드로 진입을 해야 되는데요. 프로그램 모드로 진입하는 방법은 ESP8266 칩셋을 부팅할 때 GPIO0이 LOW 상태여야 합니다. 그래서 "IO0"라고 표시된 단자를 GND단자와 쇼트시킨 상태에서 UART-USB 브릿지를 컴퓨터에 연결해줍니다.

이제 LQ-Y08이 프로그램 모드로 진입했습니다. 이제 파웨쉘 혹은 커맨드창을 열어서 다음 명령어로 칩셋 정보를 확인해 줍니다.

esptool.py -p COM7 flash_id

위 사진처럼 정보가 주르륵 나오면 연결이 잘 되었다는 겁니다. 여기서 제가 필요한 정보는 밑에서 2번째 줄에 있는 flash size입니다. 2MB네요.

기존 펌웨어 백업

이제 새로운 펌웨어를 올리기 전에 제조사에서 넣어둔 원래 펌웨어를 백업하고 플래시를 초기화해주겠습니다. 기존 펌웨어는 쓸 일이 딱히 없지만 혹시나 해서 보관하는 겁니다.

위에서 칩셋 정보를 확인했던 것과 마찬가지로 프로그램 모드로 부팅된 상태에서 아래 명령어로 펌웨어 복사합니다. 위에서 플래시 사이즈가 2MB란 걸 확인했기 때문에 0x00000 ~ 0x20000까지를 복사합니다.

esptool.py -p COM7 read_flash 0x00000 0x200000 LQ_Y08.bin

백업된 파일은 잘 보관해두고 이제 플래시 메모리를 초기화합니다.

esptool.py --p COM7 erase_flash

ESPHome 펌웨어 준비

IR 브릿지로 Tasmota 펌웨어를 많이들 사용하시던데요. 저는 ESPHome 만들어 놓은 노드들이 다수 있어서 좀 더 익숙한 ESPHome 펌웨어를 올리기로 했습니다.  

일단 LQ-Y08의 핀 맵 정보가 있어야 하는데 다행히 Tasmota 홈페이지에 이런 정보가 있었습니다.

 

AI Universal Remote IR Controller (LQ-08) Template for Tasmota

Configure your smart ir controller to work with Tasmota open source firmware.

templates.blakadder.com

모델명이 제가 구입한 것과 일치하지는 않지만 유사했고 생긴 것도 비슷해서 일단 이 정보를 활용해 봤습니다.

IR 수신부는 GPIO5번 그리고 IR 발신부는 GPIO14번이라고 되어 있네요. 요걸로 ESPHome에서 yaml 스크립트 만들어줍니다.

esphome:
  name: irhub-1
  platform: ESP8266
  board: esp01_1m

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "irhub-1 Fallback Hotspot"
    password: !secret wifi_password

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: !secret ota_password

ota:
  password: !secret ota_password
  
remote_receiver:
  pin: 
    number: GPIO5
    inverted: true
    mode: INPUT_PULLUP
  dump: all
  idle: 25ms
  
remote_transmitter:
  pin: GPIO14
  # Infrared remotes use a 50% carrier signal
  carrier_duty_percent: 50%
  
switch:
  - platform: template
    name: Panasonic Power Button
    turn_on_action:
      - remote_transmitter.transmit_panasonic:
          address: 0x4004
          command: 0x8140DFA2

  - platform: template
    name: Raw Code Power Button
    turn_on_action:
      - remote_transmitter.transmit_raw:
          carrier_frequency: 38kHz
          code: [4088, -1542, 1019, -510, 513, -1019, 510, -509, 511, -510, 1020,
                 -1020, 1022, -1019, 510, -509, 511, -510, 511, -509, 511, -510,
                 1020, -1019, 510, -511, 1020, -510, 512, -508, 510, -1020, 1022]

위와 같이 ESPHome 예제를 짜깁기해서 스크립트 만들고 컴파일해서 바이너리 파일 다운로드하였습니다.

다운로드한 바이너리 파일이 있는 위치에서 다음과 같이 펌웨어 업로드해 줍니다. 이때 당연히 LQ-Y08은 프로그램 모드로 부팅된 상태여야겠죠.

esptool.py --p COM7 write_flash -fs 2MB -fm dout 0x0 irhub01.bin

업로드가 완료되었습니다. ^^

잠시 기다렸다가 HA의 구성요소를 보시면 새로운 ESPHome 노드가 인식된 것을 볼 수 있습니다.

ESPHome 대시보드 화면에서 해당 노드의 로그 창을 열어놓고 리모컨을 쏴주면 이렇게 코드가 들어오는 것을 볼 수 있습니다.

반대로 스크립트로 미리 등록한 스위치를 켜고 카메라로 찍어보면 IR LED가 반짝이는 걸 볼 수 있습니다.

이제 등록하고 싶은 리모컨 신호들을 로그로 읽어서 ESPHome 펌웨어에 스위치로 하나하나 추가만 해주면 되겠습니다. 

과정이 약간 복잡하고 귀찮긴 하지만 이렇게 또 하나의 노드가 HA에 추가될 수 있어서 재미있네요. 그리고 LQ-Y08 제품 커스텀하기 좋네요. 잘 됩니다. HA에 사용할 IR Bridge 찾고 계신다면 이거 써보셔도 좋을 것 같습니다.

 

끝!

반응형

댓글