ブラウザの JavaScript がオフ(ブロックまたは許可しない)に設定されているため、このページは正常に機能しません。
disklessfun’s Wiki*
[
ホーム
]
一覧
最終更新
バックアップ
ヘルプ
Top
>
internet-ir-aircon-raspberry-pi
>
複製
?
ms
internet-ir-aircon-raspberry-pi をテンプレートにして作成
これらのキーワードがハイライトされています:
開始行:
TITLE:携帯からインターネット経由で赤外線命令を発行して既設エアコンを操作(Raspberry Pi活用編)
RIGHT:初出 2014-10-23
RIGHT:最終更新 2016-2-15
LEFT:
Raspberry Piが何でもできるのはわかりきっているので、ここ2年ばかり避けていて、代わりに[[%%%こんなの%%%>add_usb-port_to_dd-wrt]]を使っていたのですが、それも十分飽きたのでいよいよRaspberry Piを買ってみることにしました。用途が決まっていたのでタ
#br
#contents
#br
項目毎にダウンロードリンクを設けていますが数が多いのでここにもまとめておきます。
''ダウンロード'' &ref(ir-transmitter.c,nolink); [[赤外線トランミッターのファームウェアソース PIC18F2550用>#ebed808f]]
''ダウンロード'' &ref(ctrl-hitachiAC.sh,nolink); [[赤外線トランスミッターを操作するスクリプト>#ebed808f]]
''ダウンロード'' &ref(onoff.php,nolink); [[php画面のソース>#z396ab31]]
''ダウンロード'' &ref(rpi-check_and_warning_sendmail.pl,nolink); [[室温が高い場合に冷房を自動的に付けるPerlスクリプト>#wbdb5604]]
''ダウンロード'' &ref(setup-ttyama0.sh,nolink); [[/dev/ttyMA0設定スクリプト>#wbdb5604]]
ダウンロード &ref(I2C_temp_sensor.c,nolink); [[PIC18F14K50,18F13K22等用 I2C温度センサのファームウェア(自作はお薦めしません)>#x5d734d3]]
ダウンロード &ref(get_temp.c,nolink); [[温度取得コマンドのソース(市販センサを使うなら付属のものを使って下さい)>#x5d734d3]]
#br
** システム全景 [#i7139229]
[[&ref(internet-ir-aircon-raspberry-pi_1_s.jpg);:http://wikiwiki.jp/disklessfun/?plugin=attach&pcmd=open&file=internet-ir-aircon-raspberry-pi_1_b.jpg&refer=internet-ir-aircon-raspberry-pi]]
&size(7){クリックすると大きな画像で表示されます};
[[%%%このページ%%%>internet-ir-aircon]]のシステムをRaspberry Piでリニューアルしたものです。多少不満も上がっていたので今度はON・OFFセンサを取り付けました。
#br
** Raspberry Piとその周辺デバイス [#x5d734d3]
[[&ref(internet-ir-aircon-raspberry-pi_2_s.jpg);:http://wikiwiki.jp/disklessfun/?plugin=attach&pcmd=open&file=internet-ir-aircon-raspberry-pi_2_b.jpg&refer=internet-ir-aircon-raspberry-pi]]
&size(7){クリックすると大きな画像で表示されます};
日頃触れている電子工作とは桁違いの消費電力なので、ファンレスだとこれくらいは通気口を確保するべきだと思いました。ステンレス網は100円ショップのストレーナーから採ったものです。枠は3x10mmの桧棒を8本合わせたものでフィルム貼り&マジック仕上げです
上に乗っているやや小さめのケースはシリアル接続の赤外線リモコン・トランスミッターです。
#br
下にぶら下がっているのはI2C接続温度センサです。Raspberry PiのPin 1,3,5,9と接続しています。自作する人は殆どいないと思います。皆さんは素直に市販品を使って下さい。
一応自作する人の為に情報を書いておきます。8ピンながらMSSPモジュールを持つPIC12F1822を持っていなかったのでPIC18F14K50を使用しました。ファームウェアはAN734に雛形があるのでそれを使えば簡単です。温度センサはMCP9700です。FVRを使い、校正をきちん
あとRaspberry Pi側のソースも載せておきます。一時フルにエラー処理してたんですが全部削除しました。これで十分だと思います。&ref(get_temp.c,nolink); (2014-12-18更新)
#br
** Raspberry Pi基板 [#r67b5392]
[[&ref(internet-ir-aircon-raspberry-pi_3_s.jpg);:http://wikiwiki.jp/disklessfun/?plugin=attach&pcmd=open&file=internet-ir-aircon-raspberry-pi_3_b.jpg&refer=internet-ir-aircon-raspberry-pi]]
&size(7){クリックすると大きな画像で表示されます};
ケースはテイシン電機のTB-54です。ほぼピッタリです。
一度、RG2(3.3V出力LDO)を[[%%%このページ%%%>dc-to-dc-converter-from-usb-cigarplug]]の[[%%%スイッチングレギュレータ%%%:http://wikiwiki.jp/disklessfun/?plugin=attach&pcmd=open&file=internet-ir-aircon-raspberry-pi_8_b.jpg&refer=internet-ir-airc
#br
(2015-10-30追記)
今年の夏にヒートシンク(大と小)を付けました。でも通気性が悪いことも影響したからか、5度くらいしか下がりませんでした。同じヒートシンクをもう少し通気性が良い環境のラズパイ2の方に付けると10度くらい下がりました。なのでこちらの方はケースの下側にド
** エアコンのON・OFFセンサ [#f903599b]
&ref(internet-ir-aircon-raspberry-pi_4_s.jpg,nolink);
Raspberry PiのPin 4(5V),6(GND),12(GPIO1)と接続しています。本来のパワーステータスを覆い隠してしまってるので、代替のパワーステータスLEDが付いています。
#br
''回路図''
[[&ref(internet-ir-aircon-raspberry-pi_power-sensor_circt_s.png);:http://wikiwiki.jp/disklessfun/?plugin=attach&pcmd=open&file=internet-ir-aircon-raspberry-pi_power-sensor_circt_b.png&refer=internet-ir-aircon-raspberry-pi]]
&size(7){クリックすると大きな画像で表示されます};
#br
&ref(internet-ir-aircon-raspberry-pi_5_s.jpg,nolink);
製作中の写真です。スカスカです。
マイコンの下には5Vから3.3Vを作るレギュレータ基板があります。ジャンク箱から引っ張りだしたものです。なぜ5V入力なのかと言うと、当初Raspberry Piから引き出す際の簡潔さに拘っていて、電源ピンとGNDとGPIOの3ピンが詰まって並んでいるのはPin4,6,8しかな
#br
ところで、このページからは多くのファイルがダウンロードできるようにしてるんですが、ON・OFFセンサに使用しているマイコンのファームウェアのソースは公開してません。理由は想像つくと思うんですが、そもそもマイコンの必然性はない場面であって、普通は
#br
** シリアル接続赤外線リモコン・トランスミッター [#ebed808f]
&color(Blue){(2015-12-6追記)確かにこのページのシステムではシリアル接続赤外線リモコン・トランスミッターを使っているのですが、現在は皆さんにお勧めしません。};
#br
&color(Blue){私がお勧めするのは代わりに[[&color(Blue){%%%キットもしくは完成品のUSB接続赤外線リモコン%%%};:http://www.amazon.co.jp/Bit-Trade-One-AD00020-%E8%B5%A4%E5%A4%96%E7%B7%9A%E3%83%AA%E3%83%A2%E3%82%B3%E3%83%B3/dp/B00AXVH1P8/]]を使う方
#br
&color(Blue){何故これをお勧めするかというと、安いだけじゃなく、学習機能も持っているからです。};
&color(Blue){しかもWindowsだけでなく、x64 Linux、x86Linux、ラズベリーパイLinux、Mac OS Xでも学習も送信もおこなえます。多くのエアコンにも対応しています。};
#br
&color(Blue){現時点までのAmazonのレビューはほぼ発売時の状態に対する内容で、[[&color(Blue){%%%AssemblyDesk%%%};:http://a-desk.jp/modules/mydownloads/]]や[[&color(Blue){%%%これ%%%};:https://github.com/kjmkznr/bto_ir_cmd]]でファームウェア等が
#br
&color(Blue){シリアル接続赤外線リモコントランスミッターの代わりにUSB接続赤外線リモコンを採用した場合、操作する方法を↓下記から少しだけ変更する必要があります。でもコマンドラインで操作できることには違いはないので問題にはならないでしょう。};
#br
#br
#br
#br
#br
(2015-11-14追記)↓下記のリモコン・トランスミッターではPIC18F2550とC18を用いていますが、このほど、[[%%%PIC16F886とXC8を用いた、(意外なことに)機能的に上位の、新しいリモコン・トランスミッター%%%>network-io_on_universal_circuit_board#i64e1ba7]
#br
[[&ref(internet-ir-aircon-raspberry-pi_6_s.jpg);:http://wikiwiki.jp/disklessfun/?plugin=attach&pcmd=open&file=internet-ir-aircon-raspberry-pi_6_b.jpg&refer=internet-ir-aircon-raspberry-pi]]
&size(7){クリックすると大きな画像で表示されます};。
接続端子がピンソケット2列(本)になっているのは接続ケーブルを流用する為です。Raspberry PiのPin8(TXD),10(RXD),14(GND),17(3.3V)と接続しています。当初はGPIOのない普通のPCで使い回しが可能なものを作ろうと思いUSB接続を試みたんですが、どうやらRaspbe
&color(Blue){(2015-10-30追記)上記の内容に説明を加えます。上述におけるCDCドライバとはUSB・CDCクラスのドライバで/dev/ttyACM?を作るものです。これがARMアーキテクチャのLinux上では簡略化されているように見え、本物のモデムしか正しく動作しないような
#br
''回路図''
[[&ref(internet-ir-aircon-raspberry-pi_ir-transmitter_circt_s.png);:http://wikiwiki.jp/disklessfun/?plugin=attach&pcmd=open&file=internet-ir-aircon-raspberry-pi_ir-transmitter_circt_b.png&refer=internet-ir-aircon-raspberry-pi]]
&size(7){クリックすると大きな画像で表示されます};
#br
''Raspberry Piからの操作法''
シリアル接続なので、シリアルポートに赤外線命令のデータ(16進文字列)を書き込むだけです。
echo 0A50504FB020DF900980000C154DB020DF900980000C15 > /dev/ttyMA0
こんな感じです。16進文字列の書式は[[%%%ビット・トレード・ワン社のUSB接続 赤外線リモコン%%%:http://a-desk.jp/modules/forum_hobby/index.php?cat_id=8]]と同じです。
ごくありふれた書式でして
|1バイト目|2バイト目|3バイト目|4バイト目以降|h
|フォーマットID|前半の命令長|後半の命令長|データ部|
データ部は赤外線命令の1と0をそのまま格納したものです。
上記のechoコマンドによる操作はスクリプト化しています。そのスクリプトをphpやPerlから呼び出しています。
赤外線トランスミッターを操作するスクリプトです。
''ダウンロード'' &ref(ctrl-hitachiAC.sh,nolink);
#br
''ファームウェア''
MPLAB C18用のソースです。
''ダウンロード'' &ref(ir-transmitter.c,nolink); PIC18F2550用
ソースは[[%%%この中%%%:http://a-desk.jp/modules/mydownloads/singlefile.php?cid=3&lid=81]]の「シリアルインターフェース版」から大半を流用しています。Raspberry Pi側からトランスミッターに引き渡す赤外線リモコンのデータとなる16進文字列は、同じく[
#br
赤外線リモコンデータの計測環境としてはlircの他にArduinoを用いる方法も簡単でお薦めです。これは[[%%%この中%%%:http://a-desk.jp/modules/mydownloads/singlefile.php?cid=3&lid=52]]に詳しい説明画像やスケッチがあります。(2014-12-12追記)mbedも[[%%%
あと(もちろん)16進文字列はソース流用元のUSB接続 赤外線リモコンでも一発で算出できます。
&color(Blue){(2015-10-30追記)本項と直接関係ありませんが、今年に入ってソース流用元のUSB接続 赤外線リモコンに、上述のmbedでおこなえるような未知の赤外線リモコンフォーマットの生データを取得する機能が追加されました。};
#br
あと、USBを使ってないのにUSB内蔵PICであるPIC18F2550を使っている理由ですが、USB経由のファームウェア書き換えができない不良品PIC18F2550を消費したかったからです。普通はこの用途だったらPIC18F25K22あたりを選択するんじゃないかと思います。ソースの
#br
** web画面 [#z396ab31]
画面をPCのブラウザに表示したところです。
&ref(internet-ir-aircon-raspberry-pi_7_s.png,nolink);
この画面のphpソースです。
''ダウンロード'' &ref(onoff.php,nolink); 2016-2-15更新(スマホに本格対応する為、フォントサイズ変更機能を追加しました)
#br
php画面から呼び出されてエアコンを操作するスクリプトです。
''ダウンロード'' &ref(ctrl-hitachiAC.sh,nolink);
''他にgpioコマンドの導入が必要です。''
#br
phpの中からsudoして呼び出すコマンドは当然/etc/sudoers.d内にこのように設定してパスワードなしで済むようにしています。
owner,www-data ALL=(ALL) NOPASSWD: /usr/local/bin/get_temp
#br
ところで、Raspberry Pi本体にあるのシリアル端子(TXD,RXD)は/dev/ttyMA0として認識されるんですが、
デフォルトでシリアルコンソール用として設定されています。このデフォルトの設定を基本的に変えないまま、
“ちょっと拝借します”みたいな感じでこのweb画面から使用可能とする設定がこのスクリプトです。
''ダウンロード'' &ref(setup-ttyama0.sh,nolink);
私の場合/etc/rc.localから(sleepを使っているので&付きで)呼んでいます。
#br
OSは最も一般的なRaspbianを使用しています。
webサーバはApache2です。(a2enmod,a2ensiteコマンドを使って)お手軽にSSL+BASIC認証にしています。
** 設定室温に達すると冷房をつけた上で携帯電話にメールを送信するPerlスクリプトのカスタマイズ(第3)版 [#wbdb5604]
[[%%%こちら%%%>internet-ir-aircon#check_and_warning_sendmail]]と[[%%%こちら%%%>add_usb-port_to_dd-wrt#zb02e440]]に続く第3版です。今回WebサーバとネットワークIOが同一サーバ上になったので簡素化しました。cronで30分毎に起動するように設定していま
''ダウンロード'' &ref(rpi-check_and_warning_sendmail.pl,nolink);
''ダウンロード'' &ref(ctrl-hitachiAC.sh,nolink); これはPerlスクリプトから呼び出されてエアコンを操作するスクリプトです。
Perlスクリプトの中身
#!/usr/bin/perl
# このスクリプトはEUC-JPで保存されている必要があります。
# Debian, Ubuntu系の場合の追加インストールが必要なパッケージ
# libnet-smtpauth-perl libjcode-pm-perl libwww-perl libmath-round-perl
use Net::SMTP_auth;
use Jcode;
use Encode;
#use LWP::Simple;
use LWP::Simple qw($ua get);
use Math::Round;
$ua->timeout(10);
$smtpserver = 'smtp.hoge.ne.jp:587'; # SMTP認証でアクセスするサーバ
$smtpacount = 'fugafuga@hoge.ne.jp'; # SMTP認証用のアカウント
$smtppasswd = 'SECRET'; # SMTP認証用のパスワード
$myrealmailaddress = 'fugafuga@hoge.ne.jp'; # 自分の本当のメールアドレス
$tomailaddress1 = 'foobar@docomo.ne.jp'; # 宛先アドレス
$tomailaddress2 = 'foobar@hoge.ne.jp'; # 宛先アドレス
$bccmailaddress = $smtpacount;
$fromaddress = $smtpacount;
#$fromaddress = 'remotecontroleradmin@dummy.com'; # 宛先側で個別の受信設定をおこな
# えば実在しないアドレスも可
$limittemp = 35; # メールを送信し始める室温(摂氏)
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$nowdate = sprintf("%d年%d月%d日 %d時%d分%d秒", $year + 1900, $mon +1, $mday,
$hour, $min, $sec);
# 室温
$Celcius = `sudo get_temp`;
chomp($Celcius);
$Celcius = nearest(0.1, $Celcius);
if ( $Celcius >= $limittemp ) {
system('/usr/local/bin/ctrl-hitachiAC.sh cool_on');
# $Subject="室温が$Celcius度です。冷房をつけました。";
$Subject="室温が$Celcius度です。冷房ON";
$Body="$nowdate\n室温は現在$Celcius度です。\nたった今、冷房をつけました。";
mailsend();
exit;
}
sub mailsend {
$smtp = Net::SMTP->new("$smtpserver");
$smtp->auth("$smtpacount", "$smtppasswd");
$smtp->mail("$myrealmailaddress");
$smtp->to("$tomailaddress1","$tomailaddress2");
$smtp->bcc("$bccmailaddress");
&Jcode::convert($Subject, 'jis', 'euc');
&Jcode::convert($Body, 'jis', 'euc');
$smtp->data();
$smtp->datasend("From:$fromaddress\n");
$smtp->datasend("To:$tomailaddress1\n");
$smtp->datasend("To:$tomailaddress2\n");
$smtp->datasend("Subject:".encode('MIME-Header-ISO_2022_JP', $Subject)."\n");
$smtp->datasend($Body);
$smtp->dataend();
$smtp->quit;
return;
}
#br
* ご要望、ご意見、質問を下のフォームにどうぞ&br;(でもここより、[[掲示板>board]]や[[書き込みフォーム>form]]のページに書いて頂いた方が気づき易いと思います。) [#v375dfa9]
#areaedit(nofreeze,noauth,btn:[修正(書き間違った場合にご利用下さい)])
#comment
#areaedit(end)
終了行:
TITLE:携帯からインターネット経由で赤外線命令を発行して既設エアコンを操作(Raspberry Pi活用編)
RIGHT:初出 2014-10-23
RIGHT:最終更新 2016-2-15
LEFT:
Raspberry Piが何でもできるのはわかりきっているので、ここ2年ばかり避けていて、代わりに[[%%%こんなの%%%>add_usb-port_to_dd-wrt]]を使っていたのですが、それも十分飽きたのでいよいよRaspberry Piを買ってみることにしました。用途が決まっていたのでタ
#br
#contents
#br
項目毎にダウンロードリンクを設けていますが数が多いのでここにもまとめておきます。
''ダウンロード'' &ref(ir-transmitter.c,nolink); [[赤外線トランミッターのファームウェアソース PIC18F2550用>#ebed808f]]
''ダウンロード'' &ref(ctrl-hitachiAC.sh,nolink); [[赤外線トランスミッターを操作するスクリプト>#ebed808f]]
''ダウンロード'' &ref(onoff.php,nolink); [[php画面のソース>#z396ab31]]
''ダウンロード'' &ref(rpi-check_and_warning_sendmail.pl,nolink); [[室温が高い場合に冷房を自動的に付けるPerlスクリプト>#wbdb5604]]
''ダウンロード'' &ref(setup-ttyama0.sh,nolink); [[/dev/ttyMA0設定スクリプト>#wbdb5604]]
ダウンロード &ref(I2C_temp_sensor.c,nolink); [[PIC18F14K50,18F13K22等用 I2C温度センサのファームウェア(自作はお薦めしません)>#x5d734d3]]
ダウンロード &ref(get_temp.c,nolink); [[温度取得コマンドのソース(市販センサを使うなら付属のものを使って下さい)>#x5d734d3]]
#br
** システム全景 [#i7139229]
[[&ref(internet-ir-aircon-raspberry-pi_1_s.jpg);:http://wikiwiki.jp/disklessfun/?plugin=attach&pcmd=open&file=internet-ir-aircon-raspberry-pi_1_b.jpg&refer=internet-ir-aircon-raspberry-pi]]
&size(7){クリックすると大きな画像で表示されます};
[[%%%このページ%%%>internet-ir-aircon]]のシステムをRaspberry Piでリニューアルしたものです。多少不満も上がっていたので今度はON・OFFセンサを取り付けました。
#br
** Raspberry Piとその周辺デバイス [#x5d734d3]
[[&ref(internet-ir-aircon-raspberry-pi_2_s.jpg);:http://wikiwiki.jp/disklessfun/?plugin=attach&pcmd=open&file=internet-ir-aircon-raspberry-pi_2_b.jpg&refer=internet-ir-aircon-raspberry-pi]]
&size(7){クリックすると大きな画像で表示されます};
日頃触れている電子工作とは桁違いの消費電力なので、ファンレスだとこれくらいは通気口を確保するべきだと思いました。ステンレス網は100円ショップのストレーナーから採ったものです。枠は3x10mmの桧棒を8本合わせたものでフィルム貼り&マジック仕上げです
上に乗っているやや小さめのケースはシリアル接続の赤外線リモコン・トランスミッターです。
#br
下にぶら下がっているのはI2C接続温度センサです。Raspberry PiのPin 1,3,5,9と接続しています。自作する人は殆どいないと思います。皆さんは素直に市販品を使って下さい。
一応自作する人の為に情報を書いておきます。8ピンながらMSSPモジュールを持つPIC12F1822を持っていなかったのでPIC18F14K50を使用しました。ファームウェアはAN734に雛形があるのでそれを使えば簡単です。温度センサはMCP9700です。FVRを使い、校正をきちん
あとRaspberry Pi側のソースも載せておきます。一時フルにエラー処理してたんですが全部削除しました。これで十分だと思います。&ref(get_temp.c,nolink); (2014-12-18更新)
#br
** Raspberry Pi基板 [#r67b5392]
[[&ref(internet-ir-aircon-raspberry-pi_3_s.jpg);:http://wikiwiki.jp/disklessfun/?plugin=attach&pcmd=open&file=internet-ir-aircon-raspberry-pi_3_b.jpg&refer=internet-ir-aircon-raspberry-pi]]
&size(7){クリックすると大きな画像で表示されます};
ケースはテイシン電機のTB-54です。ほぼピッタリです。
一度、RG2(3.3V出力LDO)を[[%%%このページ%%%>dc-to-dc-converter-from-usb-cigarplug]]の[[%%%スイッチングレギュレータ%%%:http://wikiwiki.jp/disklessfun/?plugin=attach&pcmd=open&file=internet-ir-aircon-raspberry-pi_8_b.jpg&refer=internet-ir-airc
#br
(2015-10-30追記)
今年の夏にヒートシンク(大と小)を付けました。でも通気性が悪いことも影響したからか、5度くらいしか下がりませんでした。同じヒートシンクをもう少し通気性が良い環境のラズパイ2の方に付けると10度くらい下がりました。なのでこちらの方はケースの下側にド
** エアコンのON・OFFセンサ [#f903599b]
&ref(internet-ir-aircon-raspberry-pi_4_s.jpg,nolink);
Raspberry PiのPin 4(5V),6(GND),12(GPIO1)と接続しています。本来のパワーステータスを覆い隠してしまってるので、代替のパワーステータスLEDが付いています。
#br
''回路図''
[[&ref(internet-ir-aircon-raspberry-pi_power-sensor_circt_s.png);:http://wikiwiki.jp/disklessfun/?plugin=attach&pcmd=open&file=internet-ir-aircon-raspberry-pi_power-sensor_circt_b.png&refer=internet-ir-aircon-raspberry-pi]]
&size(7){クリックすると大きな画像で表示されます};
#br
&ref(internet-ir-aircon-raspberry-pi_5_s.jpg,nolink);
製作中の写真です。スカスカです。
マイコンの下には5Vから3.3Vを作るレギュレータ基板があります。ジャンク箱から引っ張りだしたものです。なぜ5V入力なのかと言うと、当初Raspberry Piから引き出す際の簡潔さに拘っていて、電源ピンとGNDとGPIOの3ピンが詰まって並んでいるのはPin4,6,8しかな
#br
ところで、このページからは多くのファイルがダウンロードできるようにしてるんですが、ON・OFFセンサに使用しているマイコンのファームウェアのソースは公開してません。理由は想像つくと思うんですが、そもそもマイコンの必然性はない場面であって、普通は
#br
** シリアル接続赤外線リモコン・トランスミッター [#ebed808f]
&color(Blue){(2015-12-6追記)確かにこのページのシステムではシリアル接続赤外線リモコン・トランスミッターを使っているのですが、現在は皆さんにお勧めしません。};
#br
&color(Blue){私がお勧めするのは代わりに[[&color(Blue){%%%キットもしくは完成品のUSB接続赤外線リモコン%%%};:http://www.amazon.co.jp/Bit-Trade-One-AD00020-%E8%B5%A4%E5%A4%96%E7%B7%9A%E3%83%AA%E3%83%A2%E3%82%B3%E3%83%B3/dp/B00AXVH1P8/]]を使う方
#br
&color(Blue){何故これをお勧めするかというと、安いだけじゃなく、学習機能も持っているからです。};
&color(Blue){しかもWindowsだけでなく、x64 Linux、x86Linux、ラズベリーパイLinux、Mac OS Xでも学習も送信もおこなえます。多くのエアコンにも対応しています。};
#br
&color(Blue){現時点までのAmazonのレビューはほぼ発売時の状態に対する内容で、[[&color(Blue){%%%AssemblyDesk%%%};:http://a-desk.jp/modules/mydownloads/]]や[[&color(Blue){%%%これ%%%};:https://github.com/kjmkznr/bto_ir_cmd]]でファームウェア等が
#br
&color(Blue){シリアル接続赤外線リモコントランスミッターの代わりにUSB接続赤外線リモコンを採用した場合、操作する方法を↓下記から少しだけ変更する必要があります。でもコマンドラインで操作できることには違いはないので問題にはならないでしょう。};
#br
#br
#br
#br
#br
(2015-11-14追記)↓下記のリモコン・トランスミッターではPIC18F2550とC18を用いていますが、このほど、[[%%%PIC16F886とXC8を用いた、(意外なことに)機能的に上位の、新しいリモコン・トランスミッター%%%>network-io_on_universal_circuit_board#i64e1ba7]
#br
[[&ref(internet-ir-aircon-raspberry-pi_6_s.jpg);:http://wikiwiki.jp/disklessfun/?plugin=attach&pcmd=open&file=internet-ir-aircon-raspberry-pi_6_b.jpg&refer=internet-ir-aircon-raspberry-pi]]
&size(7){クリックすると大きな画像で表示されます};。
接続端子がピンソケット2列(本)になっているのは接続ケーブルを流用する為です。Raspberry PiのPin8(TXD),10(RXD),14(GND),17(3.3V)と接続しています。当初はGPIOのない普通のPCで使い回しが可能なものを作ろうと思いUSB接続を試みたんですが、どうやらRaspbe
&color(Blue){(2015-10-30追記)上記の内容に説明を加えます。上述におけるCDCドライバとはUSB・CDCクラスのドライバで/dev/ttyACM?を作るものです。これがARMアーキテクチャのLinux上では簡略化されているように見え、本物のモデムしか正しく動作しないような
#br
''回路図''
[[&ref(internet-ir-aircon-raspberry-pi_ir-transmitter_circt_s.png);:http://wikiwiki.jp/disklessfun/?plugin=attach&pcmd=open&file=internet-ir-aircon-raspberry-pi_ir-transmitter_circt_b.png&refer=internet-ir-aircon-raspberry-pi]]
&size(7){クリックすると大きな画像で表示されます};
#br
''Raspberry Piからの操作法''
シリアル接続なので、シリアルポートに赤外線命令のデータ(16進文字列)を書き込むだけです。
echo 0A50504FB020DF900980000C154DB020DF900980000C15 > /dev/ttyMA0
こんな感じです。16進文字列の書式は[[%%%ビット・トレード・ワン社のUSB接続 赤外線リモコン%%%:http://a-desk.jp/modules/forum_hobby/index.php?cat_id=8]]と同じです。
ごくありふれた書式でして
|1バイト目|2バイト目|3バイト目|4バイト目以降|h
|フォーマットID|前半の命令長|後半の命令長|データ部|
データ部は赤外線命令の1と0をそのまま格納したものです。
上記のechoコマンドによる操作はスクリプト化しています。そのスクリプトをphpやPerlから呼び出しています。
赤外線トランスミッターを操作するスクリプトです。
''ダウンロード'' &ref(ctrl-hitachiAC.sh,nolink);
#br
''ファームウェア''
MPLAB C18用のソースです。
''ダウンロード'' &ref(ir-transmitter.c,nolink); PIC18F2550用
ソースは[[%%%この中%%%:http://a-desk.jp/modules/mydownloads/singlefile.php?cid=3&lid=81]]の「シリアルインターフェース版」から大半を流用しています。Raspberry Pi側からトランスミッターに引き渡す赤外線リモコンのデータとなる16進文字列は、同じく[
#br
赤外線リモコンデータの計測環境としてはlircの他にArduinoを用いる方法も簡単でお薦めです。これは[[%%%この中%%%:http://a-desk.jp/modules/mydownloads/singlefile.php?cid=3&lid=52]]に詳しい説明画像やスケッチがあります。(2014-12-12追記)mbedも[[%%%
あと(もちろん)16進文字列はソース流用元のUSB接続 赤外線リモコンでも一発で算出できます。
&color(Blue){(2015-10-30追記)本項と直接関係ありませんが、今年に入ってソース流用元のUSB接続 赤外線リモコンに、上述のmbedでおこなえるような未知の赤外線リモコンフォーマットの生データを取得する機能が追加されました。};
#br
あと、USBを使ってないのにUSB内蔵PICであるPIC18F2550を使っている理由ですが、USB経由のファームウェア書き換えができない不良品PIC18F2550を消費したかったからです。普通はこの用途だったらPIC18F25K22あたりを選択するんじゃないかと思います。ソースの
#br
** web画面 [#z396ab31]
画面をPCのブラウザに表示したところです。
&ref(internet-ir-aircon-raspberry-pi_7_s.png,nolink);
この画面のphpソースです。
''ダウンロード'' &ref(onoff.php,nolink); 2016-2-15更新(スマホに本格対応する為、フォントサイズ変更機能を追加しました)
#br
php画面から呼び出されてエアコンを操作するスクリプトです。
''ダウンロード'' &ref(ctrl-hitachiAC.sh,nolink);
''他にgpioコマンドの導入が必要です。''
#br
phpの中からsudoして呼び出すコマンドは当然/etc/sudoers.d内にこのように設定してパスワードなしで済むようにしています。
owner,www-data ALL=(ALL) NOPASSWD: /usr/local/bin/get_temp
#br
ところで、Raspberry Pi本体にあるのシリアル端子(TXD,RXD)は/dev/ttyMA0として認識されるんですが、
デフォルトでシリアルコンソール用として設定されています。このデフォルトの設定を基本的に変えないまま、
“ちょっと拝借します”みたいな感じでこのweb画面から使用可能とする設定がこのスクリプトです。
''ダウンロード'' &ref(setup-ttyama0.sh,nolink);
私の場合/etc/rc.localから(sleepを使っているので&付きで)呼んでいます。
#br
OSは最も一般的なRaspbianを使用しています。
webサーバはApache2です。(a2enmod,a2ensiteコマンドを使って)お手軽にSSL+BASIC認証にしています。
** 設定室温に達すると冷房をつけた上で携帯電話にメールを送信するPerlスクリプトのカスタマイズ(第3)版 [#wbdb5604]
[[%%%こちら%%%>internet-ir-aircon#check_and_warning_sendmail]]と[[%%%こちら%%%>add_usb-port_to_dd-wrt#zb02e440]]に続く第3版です。今回WebサーバとネットワークIOが同一サーバ上になったので簡素化しました。cronで30分毎に起動するように設定していま
''ダウンロード'' &ref(rpi-check_and_warning_sendmail.pl,nolink);
''ダウンロード'' &ref(ctrl-hitachiAC.sh,nolink); これはPerlスクリプトから呼び出されてエアコンを操作するスクリプトです。
Perlスクリプトの中身
#!/usr/bin/perl
# このスクリプトはEUC-JPで保存されている必要があります。
# Debian, Ubuntu系の場合の追加インストールが必要なパッケージ
# libnet-smtpauth-perl libjcode-pm-perl libwww-perl libmath-round-perl
use Net::SMTP_auth;
use Jcode;
use Encode;
#use LWP::Simple;
use LWP::Simple qw($ua get);
use Math::Round;
$ua->timeout(10);
$smtpserver = 'smtp.hoge.ne.jp:587'; # SMTP認証でアクセスするサーバ
$smtpacount = 'fugafuga@hoge.ne.jp'; # SMTP認証用のアカウント
$smtppasswd = 'SECRET'; # SMTP認証用のパスワード
$myrealmailaddress = 'fugafuga@hoge.ne.jp'; # 自分の本当のメールアドレス
$tomailaddress1 = 'foobar@docomo.ne.jp'; # 宛先アドレス
$tomailaddress2 = 'foobar@hoge.ne.jp'; # 宛先アドレス
$bccmailaddress = $smtpacount;
$fromaddress = $smtpacount;
#$fromaddress = 'remotecontroleradmin@dummy.com'; # 宛先側で個別の受信設定をおこな
# えば実在しないアドレスも可
$limittemp = 35; # メールを送信し始める室温(摂氏)
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$nowdate = sprintf("%d年%d月%d日 %d時%d分%d秒", $year + 1900, $mon +1, $mday,
$hour, $min, $sec);
# 室温
$Celcius = `sudo get_temp`;
chomp($Celcius);
$Celcius = nearest(0.1, $Celcius);
if ( $Celcius >= $limittemp ) {
system('/usr/local/bin/ctrl-hitachiAC.sh cool_on');
# $Subject="室温が$Celcius度です。冷房をつけました。";
$Subject="室温が$Celcius度です。冷房ON";
$Body="$nowdate\n室温は現在$Celcius度です。\nたった今、冷房をつけました。";
mailsend();
exit;
}
sub mailsend {
$smtp = Net::SMTP->new("$smtpserver");
$smtp->auth("$smtpacount", "$smtppasswd");
$smtp->mail("$myrealmailaddress");
$smtp->to("$tomailaddress1","$tomailaddress2");
$smtp->bcc("$bccmailaddress");
&Jcode::convert($Subject, 'jis', 'euc');
&Jcode::convert($Body, 'jis', 'euc');
$smtp->data();
$smtp->datasend("From:$fromaddress\n");
$smtp->datasend("To:$tomailaddress1\n");
$smtp->datasend("To:$tomailaddress2\n");
$smtp->datasend("Subject:".encode('MIME-Header-ISO_2022_JP', $Subject)."\n");
$smtp->datasend($Body);
$smtp->dataend();
$smtp->quit;
return;
}
#br
* ご要望、ご意見、質問を下のフォームにどうぞ&br;(でもここより、[[掲示板>board]]や[[書き込みフォーム>form]]のページに書いて頂いた方が気づき易いと思います。) [#v375dfa9]
#areaedit(nofreeze,noauth,btn:[修正(書き間違った場合にご利用下さい)])
#comment
#areaedit(end)
ページ名: