【PR】この記事には広告が含まれています。

Raspberry PiとBlynkアプリを使って、どこからでもエアコンの運転操作が行えるシステムの構築方法について解説します。このシステムを使えば、外出先から家のエアコンを運転できるようになり、帰宅前に室温を快適に設定することが可能です。


本記事の内容を応用すれば、さまざまな家電製品を外出先から操作できるようになります。
Blynkを使ったエアコン操作システム

スマートフォン上のアプリからエアコンを遠隔操作できる装置の概要を見ていきましょう。
システムのイメージ

Blynkを利用して作ったアプリのボタンを押すことで、自宅に設置されたラズベリーパイにつながった赤外線LEDを通じてエアコンを操作するという仕組みです。
BlynkはIoTプロジェクトを容易にするためのプラットフォームで、アプリケーションとデバイスを簡単に接続できるように設計されています。このため、スマートフォンアプリを通じてさまざまなデバイスをコントロールできます。

Blynkを使えば、外出先からラズパイを操作するシステムを比較的簡単に組むことが可能です。
準備するもの
ラズパイの本体はRaspberry Pi 4を使用しました。他のモデルでもできますが、ソフトウェアが対応していないため、最新モデルのRaspberry Pi 5は使用できません。

さらに、OSについても最新版のBookwormではソフトウェアが動作しないため、以前のバージョンであるBullseyeを使用する必要があります。

OSをインストールする方法は以下の記事で詳しく解説しています。
≫【2024年最新版】OSインストールから初期設定まで|セットアップ手順のすべて
使用する電子パーツは以下の通りです。名称をクリックすると、秋月電子の販売ページに飛べます。

装置の初期設定段階で、この赤外線リモコン受信モジュールを使用してエアコンリモコンの各ボタンから発せられる赤外線信号を読み取り、それらの信号をラズパイが理解できる形式で保存します。

5mm赤外線LEDは、保存された赤外線信号をエアコンに送信する目的で使用されます。
この他には、ジャンパーワイヤーとブレッドボードが必要です。
ラズパイからエアコンを操作

まずは、ラズパイのプログラムでエアコンを操作する方法を確認していきます。以下の記事を参考にさせていただいております。
ラズパイを赤外線リモコン化してエアコンや扇風機を自動制御する
パーツの配線
Raspberry Piと電子パーツを以下のように配線します。配線するときはRaspberry Piの電源を切った状態で作業しましょう。

赤外線リモコン受信モジュールの接続
- Vcc(電源)ピンをRaspberry Piの3.3Vピンに接続します。
- GND(グラウンド)ピンをRaspberry PiのGNDピンに接続します。
- OUT(信号出力)ピンをRaspberry PiのGPIO21ピンに接続します。このピンは赤外線信号を読み取るために使います。
赤外線LEDの接続
赤外線LEDは信号の送信に使いますが、直接Raspberry Piに接続すると電流が多すぎてLEDを損傷する可能性があるため、100Ωの抵抗を使用して電流を制限します。

LEDのアノード(長い足)を3.3Vに接続し、カソード(短い足)を100Ωの抵抗を介してGPIO20ピンに接続します。
5mm赤外線LEDの仕様(秋月電子の販売ページより)
- 順電圧(Vf): 1.35V。LEDに電流を流すために必要な電圧です。
- 順電流(If): 最大100mA。LEDに安全に流せる最大電流です。
抵抗100Ωの根拠
Raspberry PiのGPIOピンは3.3Vで動作します。LEDを点灯させるには、この電圧からLEDの順電圧を差し引いた電圧が抵抗を通る必要があります。
抵抗を使用する主な目的は、LEDに適切な電流が流れるように制限することです。順電圧が1.35Vで、Raspberry Piから供給される電圧が3.3Vの場合、LEDを通過後の残りの電圧は
3.3V−1.35V=1.95V
この残りの電圧1.95Vが抵抗を通過するときに、LEDに適切な電流を流すための抵抗値を計算します。LEDの安全な動作電流を考慮して、20mA(0.02A)を使用電流とすると、オームの法則により抵抗値は
R=V/I=1.95V/0.02A=97.5Ω
と計算されます。市販されている抵抗の標準値には97.5Ωがないため、近似値として100Ωが選ばれます。これにより、LEDに適切な電流が流れ、過剰な電流による損傷を防ぐことができます。
リモコンの信号を学習

ここからはRaspberry Piのターミナルを使って作業します。ターミナルとはコンピューターにテキスト形式で命令を入力し、実行するための画面のことです。

まず、「pigpio」をRaspberry Piが起動するたびに自動的に開始するように設定します。pigpioはGPIO(Raspberry Piの汎用入出力端子)を制御するパッケージです。
sudo systemctl enable pigpiod.service
次に、以下のコマンドで「pigpio」を開始します。
sudo systemctl start pigpiod.service
赤外線信号の読み取りや送信をするためのPythonスクリプトをダウンロードします。
wget http://abyz.me.uk/rpi/pigpio/code/irrp_py.zip
以下のコマンドで、「irrp_py.zip」という名前の圧縮ファイルを解凍し、中に含まれるファイルを取り出します。
unzip irrp_py.zip
私が使っているリモコンには、「暖房」と「冷房」のボタンが別々にあります。今回はこれら2つのボタンを学習します。

使用しているリモコンに合わせて、学習させるボタンの種類を調整してみてください。

「暖房」と「冷房」の赤外線信号を学習するコマンドは次のようになります。
python3 irrp.py -r -g21 -f air_conditioner heating cooling

- -r: このオプションは「読み取りモード」を意味します。赤外線リモコンの信号を読み取って、それをファイルに保存します。
- -g21: ここで指定されている21は、赤外線リモコン受信モジュールが接続されているGPIOピンの番号です。
- -f air_conditioner: -fオプションの後に続くair_conditionerは、読み取った赤外線信号を保存するファイルの名前です。
- heating cooling: これらは、保存する赤外線信号の「キー」です。つまり、エアコンの暖房モードと冷房モードの信号を読み取り、それぞれheatingとcoolingという名前で保存します。

コマンドを実行すると「Press key for ‘heating’」と画面に表示されるので、赤外線受信モジュールに向けてリモコンの暖房ボタンを押します。

次に、「Press key for ‘heating’ to confirm」と表示され、確認のために暖房ボタンを再度押すように求められます。
「No match」が出力された場合は、再度ボタンを押します。

その後、「Press key for ‘cooling’」と表示されたら、冷房ボタンを押してその信号も同じように学習させます。
この手順を全て終えると、irrp.pyのファイルがある同じフォルダ内に「air_conditioner」という名前のファイルが作成されます。後でこれらの信号を使ってプログラムからエアコンを制御することができます。

リモコンの信号を送信
以下のコマンドを実行すると、暖房運転開始の信号が赤外線LEDから送信され、エアコンを暖房モードで運転することができます。
python3 irrp.py -p -g20 -f air_conditioner heating
赤外線LEDの先端をリモコン受信部の方向に向けるのがポイントです。うまくいかない場合は送信する角度や位置を調整しましょう。

- -p: このオプションは「送信モード」を意味します。保存された赤外線信号をエアコンに送信する際に使用します。
- -g20: ここで指定されている
20
は、赤外線送信機が接続されているGPIOピンの番号です。 - -f air_conditioner: -fオプションに続くair_conditionerは、信号を保存したファイルの名前です。このファイルからエアコンの操作に必要な信号を読み込みます。
- heating: 送信する赤外線信号の「キー」です。この場合は、暖房モードを示します。
このコマンドを実行することで、air_conditionerファイルに保存された暖房モードの信号をエアコンに送信します。
冷房モードで運転するコマンドは以下のようになります。
python3 irrp.py -p -g20 -f air_conditioner cooling
Pythonスクリプトからリモコンの信号を送信
Blynkアプリとラズベリーパイを連携させ、エアコンなどの家電を遠隔操作するには、Pythonスクリプトでの記述が必要になります。
先ほどのコマンドをPythonスクリプトから実行してみましょう。スタートメニューのプログラミングから「Thonny」を開きます。
ThonnyはPythonの統合開発環境(IDE)で、コードの記述、実行、デバッグを行うことができます。

以下のプログラムをThonnyにペーストしてください。これにより、「python3 irrp.py -p -g20 -f air_conditioner heating」というコマンドをPythonスクリプトから実行できるようになります。
import subprocess
# 暖房運転スタートのスクリプトを実行
subprocess.call(['python3', 'irrp.py', '-p', '-g20', '-f', 'air_conditioner', 'heating'])
ペーストしたら「Run」ボタンでプログラムを実行します。すると、暖房運転開始の信号が送信されます。

このプログラムではPythonの標準ライブラリの一部であるsubprocess
モジュールを使用します。
subprocess.call
関数は、指定されたコマンドを実行し、そのコマンドが終了するのを待ちます。この関数の引数には、実行するコマンドの名前と、そのコマンドに渡す引数をリスト形式で指定します。
このコードを実行すると、Pythonスクリプトirrp.py
が起動され、指定された引数(-p -g20 -f air_conditioner heating
)を使ってエアコンを暖房モードで運転する信号が送信されます。
Blynkアプリからエアコンを操作
Blynkアプリを使ってエアコンを遠隔操作する方法について紹介します。この手順を通じて、どこからでもスマートフォンを使って自宅のエアコンを操作できるようになります。
Blynkのアカウントを作成
Blynkは基本無料で使えますが、追加の機能を使いたい場合は有料のプランを選択することもできます。
パソコンからBlynkのサイトを開き、「START FREE」をクリックしてアカウントを作成します。

メールアドレスの認証をして、パスワードと名前を設定すると以下の画面が開きます。「Skip」をクリックします。

「Cancel」をクリックします。

テンプレートの作成
「Deveropper Zone」をクリックします。

「New Template」をクリックします。Template(テンプレート)は、デバイス(Raspberry Pi)を操作するための設定をまとめたものです。

以下のように入力して「Done」をクリックします。

Blynkの認証トークンを取得
「Add first Device」をクリックします。

「DEVICE NAME」に「Raspberry Pi」を入力して、「Create」をクリックします。

画面右側にBlynkの認証トークンが表示されます。Raspberry Piでプログラムを作成するときに、このトークンが必要になります。トークンをコピーして保管しておきましょう。

仮想ピン(Virtual Pin)の作成
「Datastreams」のタブを開きます。

Datastream(データストリーム)は、ラズパイとBlynkのサーバー間でデータを送受信するための通信チャンネルを設定する仕組みです。仮想ピン(Virtual Pin)のデータタイプ、およびデータの最小値と最大値を設定することで、ラズパイからのデータをどのように扱うかを定義できます。今回はデータタイプをInteger(整数)に設定します。
「+ New Datastream」をクリックして、「Virtual Pin」を選択します。

設定を確認して「Create」をクリックします。

今回は暖房用と冷房用の2種類のピンを作成します。「+ New Datastream」をクリックして、V1のピンをV0と同様の方法で作成します。

V0とV1のピンが作成できたら「Save And Apply」をクリックします。

これでパソコン側の設定は完了です。
スマートフォンのアプリ画面を作成
Blynkのアプリをスマートフォンにインストールします。このアプリはiOSとAndroidの両方で利用可能です。

「Log In」をタップします。

ログインするとパソコンで作成したテンプレートが表示されます。タップしてボタンを設定していきます。

画面右上のスパナのアイコンをクリックします。

中央のエリアをタップして、「Widget Box」を開きます。ここではラズパイを制御するためのスイッチや計器を選ぶことができます。「Button」をタップするとテンプレート画面にボタンが配置されます。

ボタンの位置や大きさは変更可能です。オブジェクトを長押しすると、移動や大きさの変更ができます。

作成したボタンをタップして設定画面を開きます。さらに、「DATASTREAM」の設定画面を開きます。

「Integer V0(v0)」を選択します。

同様の方法でボタンを1つ追加で作成します。このボタンのDatastreamは、V1のピンに設定します。

暖房ボタンと冷房ボタンを判別できるように、デザインを変更します。「Integer V0 (v0)」を選択します。ボタンの設定画面の「Design」をタップします。

LabelsのOFF (0)を「暖房」に変更します。

同様の方法でV1のボタンのOFF表示を「冷房」に変更します。
左上の✕ボタンを押して、表示が反映されたことを確認してみましょう。

「暖房ボタン」と「冷房ボタン」ができました。

余裕がある方はボタンのデザインをアレンジしてみましょう。

これで、Blynkアプリの設定は完了です。
Blynkライブラリをインストール
次はRaspberry Pi側のソフトウェアを設定します。
BlynkライブラリはBlynkのAPIとのやり取りを行うための関数やクラスを提供します。
まず、GitHub上にあるBlynkのPythonライブラリのリポジトリを、現在のディレクトリに複製(クローン)します。これにより、BlynkのPythonライブラリのコードがラズパイにダウンロードされます。
git clone https://github.com/vshymanskyy/blynk-library-python.git
ダウンロードしたライブラリのディレクトリに移動します。
cd blynk-library-python
setup.py
スクリプトを実行して、BlynkのPythonライブラリをシステムにインストールします。この手順により、PythonスクリプトからBlynkライブラリを利用できるようになります。
sudo python3 setup.py install
エアコンを遠隔操作するスクリプト
以下のコードBlynkアプリと連携して、スマートフォンからエアコンを制御するためのものです。
import BlynkLib
import subprocess
BLYNK_AUTH = 'Your_Blynk_Auth_Token' # Blynkの認証トークンに置き換えてください
# Blynkインスタンスを初期化
blynk = BlynkLib.Blynk(BLYNK_AUTH)
# 仮想ピンV0に対するコールバック関数を定義(暖房モードで運転)
@blynk.on("V0")
def v0_write_handler(value):
# ボタンが押されたら暖房モード運転のスクリプトを実行
if int(value[0]) == 1:
print("暖房ボタンが押されました。")
subprocess.call(['python3', 'irrp.py', '-p', '-g20', '-f', 'air_conditioner', 'heating'])
# 仮想ピンV1に対するコールバック関数を定義(冷房モードで運転)
@blynk.on("V1")
def v1_write_handler(value):
# ボタンが押されたら冷房モードのスクリプトを実行
if int(value[0]) == 1:
print("冷房ボタンが押されました。")
subprocess.call(['python3', 'irrp.py', '-p', '-g20', '-f', 'air_conditioner', 'cooling'])
# メインループ
while True:
blynk.run()
まず、BlynkLib
モジュールをインポートすることから始めます。このモジュールはBlynkライブラリをPythonで使用できるようにするもので、BlynkのAPIとのやり取りを行うための関数やクラスを提供します。
BLYNK_AUTH
変数には、Blynkアプリから取得した認証トークンを入力します。このトークンは、BlynkサーバーがRaspberry Piを識別するために使用されます。

@blynk.on("V0")
と@blynk.on("V1")
デコレータは、Blynkアプリ上の仮想ピンV1とV2に対するコールバック関数を定義しています。これらの関数は対応するピンの状態が変化した(スマートフォン上のボタンが押された)時に呼び出されるように設定されます。
各コールバック関数内では、subprocess.call
を使用して外部スクリプトirrp.py
を実行しています。このスクリプトは赤外線リモコン信号を送信するためのもので、第二引数以降で指定されたオプションにより、エアコンを暖房モードまたは冷房モードで運転するように指示しています。
最後に、無限ループ内でblynk.run()
を呼び出すことにより、Blynkライブラリがイベントを監視し続けるようにしています。これにより、アプリからの入力をリアルタイムで受け取り、設定したコールバック関数を実行することができます。
コードを実行すると、コンソールに以下の表示が出ます。

スマートフォンのアプリ画面の「暖房」ボタンを押すと、以下の表示が出てリモコン信号が送信されます。

