なんで君のことを忘れていたのか。エアコン入れて」を実現することにしました。具体的には、以下のようなフローでエアコンをONにします。こちらの記事では、以下の流れで作成していきます。完成かなり道のりは長く、長文になってしまいましたが、この記事がどなたかのお力になれれば幸いです。Piの初期設定、nginx、phpの設定は以下に記載してあります。Control)とは赤外線リモコンのキーが押されたときにプログラムに合わせて特定のコマンドに変換することができるデーモン。このLIRCプログラムを使用して、赤外線リモコンから発せられるIR信号の解析を行います。解析したIR信号を、赤外線LEDから家電(ここではエアコン)に送信します。僕の部屋のエアコンはFUJITSUのAS-ASSW-Wという、結構古めのエアコンです。機能もそんなに多くはありません。高度な処理をしているようなので、機種によってはこの方法ではうまくいかない場合があります。以下のコマンドでLIRCをインストール。lircあとは設定をやっていきます。/boot/config.txtの修正/boot/config.txtは普通のPCであればBIOSで行われるようなシステム設定のパラメータが記載されています。公式ドキュメントを日本語訳ここでLIRCの有効化、IN/OUTを設定します。/boot/config.txt50行目あたりにある以下のコメントを外し、gpioのINとOUTを割り当てます。後にINは赤外線受光器へ接続、OUTは赤外線LEDへ接続します。Pi(?)設定後は再起動します。reboot※SSH接続している場合は、一旦接続が切れます。たってから、再接続してください。通販でも手に入ると思います。1その他、ジャンパワイヤ等の配線材、ブレッドボードが必要になります。必要な個数は上記の通りですが、パーツの個体差が結構あるらしいので、各パーツを予備としてプラス2,3個購入しておくといいかもしれません。赤外線受光器の作成まずは赤外線受光モジュールを作成します。赤外線リモコンからIRデータを受信し、その受信データを元に赤外線LEDで出力するデータを作成します。こちらはそう難しくありません。使用した赤外線受光モジュールはこちらです。PL-IRM1261接続方法はデータシートの通り、以下のようにしました。パーツの画像が代替画像を使用しているのでPL-IRM1261とは異なりますが。左から順に以下のように接続しています。実際にエアコンに電波を飛ばす部分なので結構重要ですが、回路は難しくありません。ちなみに電子工作はド素人なので、以下の回路は参考程度にしておいてください。構成は以下のようにトランジスタを使用したスイッチング回路にしました。使用するトランジスタはよく使われている、2SC1815-Yを使用することとしました。赤外線LED赤外線の光は通常は可視光ではないので光ってもわかりにくいですが、デバッグのし易さも考慮して、発光時に少し光るものを選択しました。(のちにもう少し出力が高い赤外線LEDに変更します)まずはLEDが光るかどうかが調べたかったので。OSI3CA5111A-秋月電子データシートを確認してみます。1.6Vで50mAが当該LEDの最適値なので、それに合わせて抵抗値を決めていきます。赤外線LEDに直列につなぐ抵抗の値を決めます。赤外線LEDに1.6V、50mAなので、以下の式で求めることができます。34ΩR2の抵抗値コレクタ・エミッタ間で50mA流すために、ベース・エミッタ間にどれだけ電流を流せばいいのかを求めます。トランジスタのhfe(直流電流増幅率)を調べます。以下、2SC1815Yデータシート2SC1815Yなので、直流電流増幅率は120~240倍。個体差を考慮して、120~240の間をとって180倍として考えます。ちなみに今回回路に使用した2SC1815YのhFEをテスタで測定したところ、hFEは200程度でした。赤外線LEDに流す電流(コレクタ電流)が50mA、直流電流増幅率が180なので、以下の公式でベースに流す電流が求められます。10kΩR3の抵抗値R3はプルダウン抵抗なので、決め打ちで10kΩとします。以下サイトを参考に、2SC1815YをLTSpiceに追加しました。回路図に値を設定してシュミレートしてみる算出した抵抗の値を元に、LTSpiceに抵抗値を設定していきます。インプット(GPIO27)は、3.3Vのパルスを設定しています。5m)この条件でのシュミレート結果は以下のようになりました。赤外線LEDに流れる電流は30mAという結果でした。異常なまでの過電流にはならないので、とりあえず実際に回路を組んでみることにしました。ブレッドボードで回路を作成こんな形で組んでみました。ちなみにR3の34Ωは、10Ωと22Ωを直列に繋いで、32Ωの抵抗に変更しました。ここまで作成したら、次はいよいよリモコンデータを読み込み、エアコンを操作してみます。IRデータの読み込みIRはInfrared(赤外線)の略(?)。手動でIRデータの読み込みを行うため、一旦lircdを止める。lircd以下、コマンドを実行。~/irdata.txt実行すると、以下が表示され、入力待ち状態になります。/dev/lirc0この状態で、赤外線受光モジュールに向けてリモコンのボタンを押し、以下のようなデータが出力されれば成功です。注意点として、赤外線受光器によっては、ノイズを拾ってしまい、正しいデータを受信できていない場合があります。pulse、spaceが交互に出力されていない場合は怪しいです。赤外線受光器を交換してみることをオススメします。作成されたファイルに出力された文字列を編集して、赤外線データを作成します。先人の方々がネット上にたくさん情報を残してくれていて、プログラムで編集する方法もあるようなので、そちらを参考にして編集してもよいかと思います。以下のように、space、pulseを消して、数値の羅列にしていきます。471編集する際の注意点としては。/dev/lirc0は削除。~の部分も削除1行は80文字(スペース含む)程度にして、改行しておく。(改行コードは\n)この作成した文字列を使用して、以下を実施していきます。スイッチON、スイッチOFF、両方必要な場合は作成しておきましょう。スイッチONだけでいい場合はそれでも問題ないです。configファイルの作成/etc/lirc/lircd.conf.d/配下にconfigファイルを作成します。ファイル拡張子が.confであれば、ファイル名は任意のもので問題ないです。ここでは、myroomaircon.confとしてファイルを作成します。ファイル内容は以下になります。remote{ONのときの文字列}部分には、リモコンボタンをONした際に取得し、編集した文字列を、{OFFのときの文字列}部分には、リモコンボタンをOFFした際に取得し、編集した文字列をそれぞれ設定します。~で、複数のボタンが登録できます。ファイルの作成が完了したら、lircdを再起動してファイルを読み込みます。lircd.confファイルが正しく読み込めて、lircdが正常に動作しているか確認します。lircdここで何かしらエラーが発生している場合は、修正してlircdを再起動してください。赤外線出力可能なデータ一覧を取得します。''ここで、先程作成した.confファイル名が出力されれば、次のコマンドも実行してみます。僕の場合はmyroomairconが出力されたので、実行するコマンドは以下になります。''以下のように出力されれば、出力準備完了です。offでは、実際にLEDデータを送信してみましょう。onLEDは発光しましたか?エアコンがここで動作してくれれば、これで回路は一旦作成完了です。僕の場合はLEDは発光しましたが、エアコンは動作してくれませんでした。このとき、回路からエアコンまでの直線距離は2mくらいですかね。ここでエアコンが動作しないということで、とりあえず原因は以下のどちらかと思いました。赤外線LEDの出力が弱く、赤外線がエアコンまで届いてない。.confファイルの作成方法が間違ってるということで。5cmという近距離まで近づけると、エアコンがONになりました!わーい(使い物にならない)赤外線出力が弱いので、赤外線パーツを交換し、回路も変更して出力を上げることにしました。赤外線LEDは以下に交換しました。秋月電子また、回路図は以下に修正して、赤外線LEDに流れる電流量も増やしてます。R2を1kΩに変更しています。赤外線LEDに流れる電流量は70mAというシュミレーション結果です。回路を組み直して再度実施してみたところ、2m近くは離れていてもエアコンがONになることが確認できました。Piを連携するための準備を進めます。Piで連携するので、webhooksで赤外線送信コマンドを実行できるように、webサーバを構築します。piにweb環境を構築します。web環境がすでにあれば問題ないですが、ない場合は以下を参考にして環境構築します。<内部リンク>環境が整えば、あとは以下のファイルを作成します。ここでは/var/www/html/aircon.phpを作成しますが、ファイル名、パス等は任意のもので問題ないです。on");あとはブラウザで外部ネットワークからhttps://[アドレス]/aircon.phpでエアコンがONになるか確認しておきましょう。IFTTTの登録と設定iPhoneのIFTTTアプリから設定していきます。webからも同様の手順で登録できるかと思いますので、お好みの方で設定してください。Storeからインストールします。任意のアカウントを作成してください。ちなみに僕はGoogleアカウントでアカウント作成しました。Appletsをタップし、右上の+ボタンをタップ。thisをタップ検索窓にwebhooksを入力して、webhooksが表示されたら、タップ。requestをタップ。Connectをタップwebhooks初回作成時は以下のようにブラウザが一度立ち上がりますが、そのまま“開く”をタップする。すると再度同じ画面が表示されるので、再度“Connect”をタップ。Nameに任意の名前を入力します。ここではmyroom_aircon_onとしました。triggerをタップ。検索窓にwebhooksを入力して、webhooksが表示されたら、タップ。requestをタップ。「URL」に/var/www/html/aircon.phpのURLを入力。Type」は一応text/plainは指定してます。「Body」は空で問題ないです。Connectionをタップ。webhooksが実行された際にiPhoneへの通知がほしい場合は、赤枠を有効にしてください。デバッグ時はあったほうが無難かもしれません。必要なければ無効のままでいいです。完了したら「Finish」をタップで完了です。「こんなのもどうですか?」的な画面に飛ばされた場合は、とりあえず戻る。AppletsからServiceタブを選択し、Webhooksをタップします。右上の歯車マークをタップ。Infoにある、URLをタップ。下記赤枠部分のURLをコピーします。一部{event}となっていますが、とりあえずこのままコピーします。Storeからインストールしてください。ショートカットアプリを開き、ショートカットを作成をタップ。矢印部分を上にスライドします。先程コピーした、webhooksへのURLを貼り付けます。Nameで設定したものに書き換えてください。同じ要領で、変数を選択。次に、URLの内容を取得を選択。見つからない場合は、検索窓に”URL”と入力すると表示されると思います。URLの内容を取得は特に変更は必要ありません。即時実行してくれない場合があります。お願いしたら即やってもらいたいので、以下も設定しておきました。設定するには、iOS標準のメールアプリが必要になります。作成シートを表示をOFF。送信元はIFTTTに登録してあるメールアドレス。※僕はGoogleアカウントとIFTTTが紐付いているので、自動でGmailアドレスが設定されていました。protected]を指定。ここまでできたら、赤枠のボタンをタップして、実行してみます。実行が完了して、連携が成功してwebhooksが実行されれば通知がきます。エアコンがONになれば成功です。あとはSiriに話しかけて実行できるように設定していきます。右上のマークをタップ。名前、アイコンを任意のものに変更します。Siriに追加をタップ。録音ボタンを押して、このショートカットを実行したいときのセリフを登録します。僕は、「エアコンつけて」にしました。問題なければ、完了をタップ。12のショートカットをIFTTTと連携させる方法。