本記事で紹介するプログラムは以下の GitHub リポジトリで公開しています
はじめに
前回の記事では、MQTT を利用して HDMI スイッチャーをインターネット経由で遠隔操作する方法を紹介しました。
ただ、弊社の主なお客様は工場や製造業などが多く、MQTT のようにサーバーを介した機器や新技術は嫌がられる事もあり、アナログ制御などの枯れた技術を好まれる事が多いです。
そこでシリアル通信信号をインターネット伝送し HDMI スイッチャーを切り替える機能も同時に開発致しました。
というのも、弊社の映像エンコーダー、デコーダーは映像だけでなく RS-232C や RS-485 といったシリアル信号の伝送も可能で、この機能を使う事で簡単に実装が可能だからです。
映像エンコーダー、デコーダーに興味のある方はこちら

本記事では、シングルボードコンピューター(Raspberry Pi) で信号を生成し、映像エンコーダー、デコーダーを介して遠隔から HDMI スイッチャーを制御する方法を紹介します。
- 【第1回】 Raspberry Pi を使って HDMI スイッチャーをシリアル通信で制御
- 【第2回】 MQTT を使って HDMI スイッチャーをシリアル通信で制御
- 【第3回】 映像エンコーダー、デコーダーを使ってRS-232CでHDMI スイッチャーを遠隔制御
シリアル通信のセットアップ
プログラムを実装する前に、RS-232C 信号のセットアップ手順を確認します。
送信側のセットアップ
- Raspberry Pi に接続: まず、Raspberry Pi の USB ポートに USB-RS232 変換アダプタを接続します。
- ジャンパーピンの接続: USB-RS232 変換アダプタにジャンパーピンを接続し、そのピンを映像エンコーダーの RS-232C ポートに接続します。
- 準備完了: これで送信側の Raspberry Pi から RS-232C 信号を送信する準備が整いました。

受信側のセットアップ
- Raspberry Pi に接続: 受信側の Raspberry Pi でも、USB-RS232 変換アダプタを USB ポートに接続します。
- ジャンパーピンの接続: 同様に、USB-RS232 変換アダプタにジャンパーピンを接続し、映像デコーダーの RS-232C ポートに接続します。
- 受信準備完了: これで受信側の Raspberry Pi から HDMI スイッチャーへの制御信号を受け取る準備が完了しました。

RS-232C 信号のプログラム
送信側のプログラム
送信側では、ユーザーが「1, 2, 3, 4」のキーを押したときにその数字を送信します。
# rs232c-tx-switch.pyimport serial# シリアルポートの設定(ttyUSB0を使用)ser = serial.Serial('/dev/ttyUSB0', 57600, timeout=1)def send_number(number): # 数字だけを送信 ser.write(number.encode()) print(f"Sent: {number}")# キーボード入力を標準入力で待ち受けるtry: while True: key = input("Press 1, 2, 3, or 4 to send the channel number: ") if key in ['1', '2', '3', '4']: send_number(key) else: print("Invalid key. Please press 1, 2, 3, or 4.")except KeyboardInterrupt: ser.close() # プログラム終了時にシリアルポートを閉じる print("Serial connection closed")
受信側のプログラム
受信側では、送信された数字を受け取り、それに応じた HDMI スイッチャーの制御コマンドを生成して送信します。
注意
RS-232C 受信用ポートを先に Raspberry Pi に挿して、USB0 として認識されるようにしてください。
# rs232c-rx-switch.pyimport serialimport time# シリアルポートの設定ser_rx = serial.Serial('/dev/ttyUSB0', 57600, timeout=1) # 受信用ポートser_hdmi = serial.Serial('/dev/ttyUSB1', 57600, timeout=1) # HDMIスイッチャーへの送信用ポートdef send_command_to_hdmi(output, input_): # HDMI スイッチャーへのコマンドを生成して送信 command = f'EZS OUT{output} VS IN{input_}\r\n' ser_hdmi.write(command.encode()) # コマンドをエンコードして送信 print(f"Sent to HDMI switcher: {command}")def receive_and_process(): while True: if ser_rx.in_waiting > 0: # 受信用ポートからデータを読み込む received_data = ser_rx.read(ser_rx.in_waiting).decode().strip() print(f"Received: {received_data}") # 受信したデータに基づいてHDMIスイッチャーを制御 if received_data in ['1', '2', '3', '4']: send_command_to_hdmi(1, received_data) else: print(f"Invalid data received: {received_data}") time.sleep(0.1)try: print("Waiting for data...") receive_and_process()except KeyboardInterrupt: ser_rx.close() # プログラム終了時に受信用シリアルポートを閉じる ser_hdmi.close() # プログラム終了時に送信用シリアルポートを閉じる print("Serial connections closed")
まとめ
今回の記事では、Raspberry Pi を用いた RS-232C 通信による HDMI スイッチャーの遠隔制御について解説しました。
送信側ではシンプルに数字だけを送信し、受信側でそのデータに基づいて HDMI スイッチャーのチャンネル切替コマンドを生成する仕組みを構築しました。
この方法により、信頼性の高い RS-232C 通信を使用したリモート制御が実現できます。