IRKitが届いたので遊んでみた
IRKitが届いたので遊んでみた
- IRKitについて
- やりたいこと
- 手始め
- 初めてのiOSApp
- 実際の開発
- 完成
IRKitについて
引用:公式サイト http://getirkit.com/
IRKitは、 公式iOSアプリ IRKitシンプルリモコン 公式Androidアプリ IRKitシンプルリモコン から操作できるほか、
IRKit iOS-SDK を使えば、 任意のタイミングで赤外線信号を送ることのできるiOSアプリを簡単につくることができます。
また、JavaScriptを使ってブラウザから赤外線信号を送ったり
curlを使って黒い画面(Terminal)から赤外線信号を送ることもできます。
IRKitデバイス自体にHTTPサーバがあり、
JSON形式の赤外線情報を HTTP POSTリクエストにのせて送ることで、赤外線信号を送ることができるのです。
また、IRKitと同じWiFiにいなくても、外出先から赤外線信号を送るための、インターネット上にあるサーバのAPIも公開しています。
IRKitデバイスは、Arduino Derivative(派生)のプロダクトです。
未使用のピンは引き出してあるので、温度センサや明るさセンサなどを追加し、ArduinoIDEを使ってプログラムを書き込めば、
よりスマートなリモコンをつくることもできます。
やりたいこと
「帰ったよ」って言うと電気、エアコン、テレビをつける。
「いってきます」って言うと電気、エアコン、テレビを全部消す。
手始め
まずはcurlでエアコンをつけてみようかと
- IRKitをWifiに接続
- エアコンからIRKitに赤外線を送る
- MacからcurlでIRKitに送信された赤外線をJson形式で取得する
- MacからcurlでIRKitに赤外線を送信してエアコンをつける
1.IRKitをWifiに接続
まずはiPhoneを使って、IRKitに家のWifiの情報を送ってSetUp。
赤いランプの点滅が青くなったら接続完了!
RouterにつないでみるとIRKitが接続されていることがわかるので、
ホスト名を( ..)φメモメモ
2.エアコンからIRKitに赤外線を送る
とりあえずcurlがつながるか確認
curl -i "http://IRKitHoge.local/messages" -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/2.1.3.13.gbe33d36
Content-Type: text/plain
つながった!
次、青いランプが点灯している状態で、エアコンのONボタンをIRKitに向かって押した後GET
curl -i "http://IRKitHoge.local/messages" -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/2.1.3.13.gbe33d36
Content-Type: text/plain
{"format":"raw","freq":38,"data":
[18031,8755,1190,1190,1190,3341,1190,3341,1190,3341,1190,1190,1190,3341,
1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1190,1190,1190,1190
,1190,1190,1190,1190,3341,1190,3341,1190,1190,1190,3341,1190,1190,1190,1190
,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190
,3341,1190,3341,1190,3341,1190,3341,1190,65535,0,9379,18031,4400,1190]}
赤外線信号って、、、複雑。。。
ということでこれをそのまま送信してみましょう。
curl -i "http://10.0.1.2/messages" -H "X-Requested-With: curl" -d
'{"format":"raw","freq":38,"data":
[18031,8755,1190,1190,1190,3341,1190,3341,1190,3341,1190,1190,1190,3341,
1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1190,1190,1190,1190
,1190,1190,1190,1190,3341,1190,3341,1190,1190,1190,3341,1190,1190,1190,1190
,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190
,3341,1190,3341,1190,3341,1190,3341,1190,65535,0,9379,18031,4400,1190]}'
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/2.1.3.13.gbe33d36
Content-Type: text/plain
エアコンついたーー!!!
ちなみにそれぞれのJsonの意味はこんなんらしい
Key Description
format "raw"のみ
freq 赤外線信号のサブキャリア周波数を表します。38 または 40 のみ。単位 [kHz]
data 赤外線信号は、サブキャリア周波数のオン・オフからなります。IRKitデバイスはオン→オフ間の時間、オフ→オン間の時間を 2MHz のカウンタで数えます。dataには、カウンタで数えた数をオン・オフの回数分ならびます。
よくわからん。
初めてのiOSApp
さて、Siriに話しかけてリモコンを操作したかったものの、
実はiOSAppを作ったことがありませんでした!!!
というかXCodeを触ったこともありませんでした!!!
というかSwift書いたことない!!!
ので、実機確認が無料でできるXCode7をダウンロード。
XCode6まではDeveloperProgramに登録(有料)しないと実機確認
できないので注意。
Swiftは、まぁノリで書けるだろうと。
とりあえずこれだけ覚えた
func メソッド名(引数:型) -> 戻り値の型 {
return 戻り値
}
型の定義とかがJavaと逆なのかー。
でも、なんか書きやすい!
ってか言語仕様わかりやすいから以外とスラスラ書ける。
Swiftおもしろい、iOSAppおもしろい!
実際の開発
最初
本家のSDKを使おうと思ったんですが、、、
Objective-C ! そっちは書きたくない。
BridgeでImportできるらしいけど、
そんな面倒なこともあんまりしたくないなーということで、
UIViewのLoad後の処理にHTTPリクエストを書きましたw
func sendMessage(message: String) { let urlString = "http://IRKithoge.local/message/" var request = NSMutableURLRequest(URL: NSURL(string: urlString)!) request.HTTPMethod = "GET"
request.HTTPBody = message.dataUsingEncoding(NSUTF8StringEncoding)
var task = session.dataTaskWithRequest(req, completionHandler: {
(data, resp, err) in
println(resp.URL!)
println(NSString(data: data, encoding: NSUTF8StringEncoding))
})
task.resume() }
}
普通にHTTPのBodyに赤外線情報のJSONを突っ込んで送りました。
で、このアプリ名を「帰ったよ」にして
iPhoneにデプロイ。
すると、Siriに「帰ったよ」と言うと、
アプリが起動して自動で赤外線が送られるという簡単な仕組み。
Siriがアプリ内のコマンド実行できたらもっといいのになー。。。
完成
「HeySiri 帰ったよ」でエアコンON、電気全灯
「HeySiri いってくる」でエアコンOFF、電気消灯
はい、なぜテレビはできなかったか。。。
テレビはONとOFFの信号が同じなので、
どっちかわからないのです!
まぁ、帰ったらちょっと便利になったのでいいや。
IRKit - iPhone,iPadを使って外出先からエアコン等の家電を操作できる学習リモコン
- 出版社/メーカー: maaash.jp
- メディア: エレクトロニクス
- この商品を含むブログ (1件) を見る
公式サイト
IRKit - Open Source WiFi Connected Infrared Remote Controller