Hair is dead. But today is wonderful.

薄毛のおっさんが気になるもの・ことについて書きます。

スマホとRaspberry Piを使ってスマートスピーカーもどきを作ってみた(テレビの赤外線リモコン編)

以前、古いスマホを使って音声認識する話を書きました。

 

toomath.hatenablog.com

 

今回はスマホAndroidアプリからRaspberry Pi(ラズベリーパイ、ラズパイ)のPythonアプリに、認識した言葉を送信し、Raspberry Piからテレビに赤外線リモコン信号を送出する方法について書きます。

これで「めざましじゃんけん」システムが完成します!

流れは以下となります。

AndroidアプリからRaspberry Piに言葉データを送信する

スマホAndroidアプリとRaspberry PiPythonアプリ間はソケット(TCP/IP)通信を行います。

ソケット通信するプログラムはC言語で何度も書いたことがあったので楽勝だと思っていましたが、少し苦戦しました。

Androidアプリでソケット通信をするには、音声認識するスレッドとは別のスレッドを起動する必要があり、音声認識用スレッドとソケット通信用スレッド間のやり取りまで作り込まないといけないためです。

でも、それさえできれば特に難しくはなく、Androidアプリ部分の実装はできました。

 

Raspberry PiPythonアプリで言葉データを受信して解析する

次はRaspberry PiPythonアプリです。

PythonアプリはAndroidアプリからの言葉データを常に待ち受け、言葉データを受けたら、どのような言葉が含まれているかを解析します。

解析した結果、「じゃんけん」が含まれており、「じゃんけん」に続くのが「グー」であればリモコンの「青」、「チョキ」であればリモコンの「赤」、「パー」であればリモコンの「緑」に相当する信号を送出するコマンドを実行します。

Pythonは楽ですね。このPythonアプリの作成で躓くところはありませんでした。

ソケット通信にはsocketモジュールのメソッドを、コマンドの実行にはsubprocessモジュールのcallメソッドを使いました。

 

Raspberry Piでリモコン信号を送信するコマンドを実行する

最後にリモコン信号を送出するコマンドです。

Raspberry Piで赤外線リモコン信号を扱うために、下記の「赤外線リモコン送受信キット」を使いました。(このキットに含まれている赤外線LEDが優秀で、5m以上離れたところからでも信号が届きます。)

 

victory7.com

このキットがあれば、Raspberry Piテレビの赤外線リモコンの信号を記憶させ、それを送出することができます。

まずテレビの「青」ボタン、「赤」ボタン、「緑」ボタンの信号を、irrecordというコマンドを使って記憶します。

そして、irsendというコマンドで記憶した赤外線信号を送出します。Pythonアプリからはこのirsendコマンドを実行します。

このあたりの話は下記の本に記載がありますので、省略します。

 

Raspberry Piで遊ぼう! 改訂第4版 〜【2】から, モデルB+, Bまで全てに対応

Raspberry Piで遊ぼう! 改訂第4版 〜【2】から, モデルB+, Bまで全てに対応

 

 

どうでしょう。かなり簡単にできることがお分かりいただけたかと思います。

Pythonアプリを改造して機能を追加していけば、市販のスマートスピーカーのように赤外線リモコンを使う様々な機器が制御できます。

実際、私はこの仕組みを使ってテレビのON/OFFやチャンネルの切り替えを音声で行えるようにしています。

以下がRaspberry Piの様子です。見た目不格好ですが、ちゃんと働いてくれます。

テレビドアホンの上に乗っかっているのが、Raspberry Piで、そこから左上ににょきっと出ているのが赤外線LEDです。テレビの方を向いています。

 

赤外線リモコン信号を飛ばすRaspberry Pi

 

次回はスマートスピーカーの得意分野である音楽の再生をやってみます。