2016.9 初版作成
2018.7 回路微修正
2022.8 python3 化
2024.7 http サーバの変更
私の自宅は居間と寝室が別の階にあります。 夜、寝る前にエアコンをつけたいのですが、階段を上がるのが 面倒です。自宅内は Wifi で通信できるので、 スマホでエアコンを on/off できる装置を作りました。 とても便利です。
外出先から操作することも可能です。
本電子工作では Raspberry Pi と Arduino を使っています。 Arduino は 電子回路とやりとりする部分を担当し、 Raspberry Pi はネットワーク通信部分を担当します。 Raspberry Pi と Arduino はシリアル通信でやりとりします。
ネットを見ると Raspberry Pi のみで、 赤外線リモコンを実現しているサイトが多数あります。 私も Raspberry Pi 3 と wiringPi を利用する C の プログラムで赤外線の送受信を行ってみました。 プログラムはうしこlogさんが ここ で公開されている C のプログラムを少し改造して使わせてもらいました (うしこlogさんのサイトのプログラムにはバグがあります。それを 修正改良したプログラムを三木克彦さんが ここ で公開されています)。 日立の扇風機のリモコンを学習させたところ、 高い確率で送信に失敗します。 X Window System を起動しているときは、成功率は 1/5 以下 であり、X Window System を起動していないときは 1/2 程度でした。
赤外線は 38 kHz(周期 26.3 us)で変調します。 Raspberry Pi が作り出す信号をデジタルオシロで観察すると、 時によって周期が 25 us 〜 28 us (40 kHz 〜 35.7 kHz) の範囲で ばらつきます。これが送信失敗の原因と思われます。 Raspbian はマルチタスクの OS であり、 1 つのプロセスが CPU を独占することは出来ないので、 us オーダーの時間制御は難しいようです。 確実な動作を期待するには、赤外線 LED の変調 部分は Arduino のようなマイコン(1 つのプログラムが CPU を 独占する)に任せた方が 良いと思われます。
2022.6 2023.7 追記
このサイトによると、 WiringPi は時間管理の精度が甘いそうです。 このサイトによると、 Wiring Pi は 2019 年に開発が停止しており、使用は推奨されないそうです。
このサイトによると、pigpio というライブラリを 使うと、安定した赤外線通信が可能となるようです。
2024.8 追記
2016 年に作成した本電子工作は温度と照度の測定をアナログ回路で行って います。Arduino を AD コンバータとして利用しています。 2024 年現在、温度・照度ともにラズパイとデジタル接続できる素子が 販売されています(たとえば温度と湿度のセンサは DHT20, 光センサは BH1750)。そちらを使った方が校正の必要がないので よいでしょう。
リモコン信号の記録と送信については、依然として Arduino を 使う方がよいでしょう。