📺

赤外線リモコンでドンキ4Kチューナーレスの音量を制御する

2022/10/07に公開

はじめに

最近,ドンキの4Kチューナーレステレビを購入しました.
J:COMのセットトップボックス(以下XA402)を接続して,メインのテレビとして使用しています.
HDMIの機器連動により,XA402のBluetoothリモコンでテレビのON/OFFは可能なのですが,なぜか音量ボタンが反応しません.

調べてみると,音量ボタンは赤外線によりテレビに送信しているようです.
https://cs.myjcom.jp/knowledgeDetail?an=003065209

すべてのテレビメーカーの設定を試してみましたが,ドンキ4Kチューナーレステレビは反応しませんでした.

赤外線からBluetoothへ変換する

ということで,赤外線で音量Up/Down/Muteを検出したらBluetoothでテレビにコマンドを送る装置を作ります.

ハードウェア

ESP32-Devkitに,赤外線受信モジュールを接続したものを使用します.

プログラム

Arduino IDEにてプログラムを書きます.
ESP32をゲームパッドとしてテレビに認識させ,音量を制御します.
ESP32-BLE-Gamepadライブラリを使用しました.
https://github.com/lemmingDev/ESP32-BLE-Gamepad

#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>
#include <BleGamepad.h>

const uint16_t kRecvPin = 14;

BleGamepad bleGamepad("IRtoBLE");

IRrecv irrecv(kRecvPin);

decode_results results;

void setup()
{
  BleGamepadConfiguration bleGamepadConfig;
  bleGamepadConfig.setWhichSpecialButtons(true, true, true, true, true, true, true, true);
  irrecv.enableIRIn();
  bleGamepad.begin(&bleGamepadConfig);
}

void loop()
{
  if (bleGamepad.isConnected()){
    if (irrecv.decode(&results)){
      switch (results.value) {
        case 50157735:   //volume up
          bleGamepad.pressVolumeInc();
          delay(100);
          bleGamepad.releaseVolumeInc();
          delay(100);
          break;

        case 50165895:   //volume down
          bleGamepad.pressVolumeDec();
          delay(100);
          bleGamepad.releaseVolumeDec();
          delay(100);
          break;

        case 50137335:   //mute
          bleGamepad.pressVolumeMute();
          delay(100);
          bleGamepad.releaseVolumeMute();
          delay(100);
          break;
      }
      irrecv.resume();
      delay(100);
    }
  }
}

まとめ

XA402のリモコンだけで音量操作も可能になり,便利になりました.
ただ,プログラムに繰り返しコードの処理を入れてなかったり,取りこぼしが結構多かったりするので改善の余地はまだまだありです.

Discussion