エアコンの制御をしようと思いたち、調べてみるとRaspberryPiを学習リモコンとして使う場合、「LIRC」というアプリを使うのが一般的で使っている人も多いようだが、どういうわけか僕の環境ではどうもうまく動作しなかった。
LIRCは64ビットコードまでしか動かないそうなので元々エアコン操作には不向きなようだ。
そこで、pythonでリモコンコードをそのまま点灯、消灯の間隔を読み取ってPWMでキャリア信号38kHz作って点灯消灯の間隔を保存したタイミングでそのまま送信してしまえ!と思いたち自分で作ってみることにした。・・・が
あえなく撃沈・・・
どうやらpythonではアプリ実行速度的にμ秒単位の正確な読み取りが出来ないようだ。
なんとか読み取ったデータを送信する時にもpythonからではどうやら38kHzのキャリア信号を作る為のPWM送信が出来ないようだ。LEDは光るがどうもオカシイと思い、実際にオシロスコープで確認するとやはりPWMで38kHzが出ていない。
半ば諦めかけた時にこちらのサイトを発見した。
なるほど、Cで書けば十分な速度が出るようだ。
考えてみればクロック数10MHz程度のマイコンで学習リモコンが作れるんだから500MHzもあるRaspberryPiで制御出来ない訳が無い。
せっかくコードまで公開していただいているのでこのままコードを利用させてもらうことにした。
準備としてWiringPiをGitからインストールする必要がある。
clone
git clone git://git.drogon.net/wiringPi
WiringPiに移動
cd wiringPi
ビルド
./build
インストールされたかバージョンの確認
gpio -v
WiringPiのピン配置の確認
gpio readall
PhysicalがGPIOの配列、BCMがRaspberryPiのGPIOのピン番号、wPiがWiringPiのピン番号(RaspberryPi B+)、Modeが現在のin/out状況?NameとVはわからない。
その後、上記URL先のCコードをそのまま頂戴して利用させていただいた。
回路も詳しく書いてあるので割愛するが、僕は手元に5Vの赤外線受光モジュールしか無かったので以前に書いたように接続した。
送信プログラムをpythonからシェルコマンドを介して呼出し利用している。
(Apache→Bottle(Python)→シェルコマンド→C→GPIO)という流れ
受光モジュールってこんんなの↓
動作電圧2.7V~5.5Vなので3.3Vでそのまま使えるっぽい。
赤外線送信用LED。