【Raspberry Pi】赤外線リモコンを作ってスマホで操作してみた(ソフト製作編)

前の記事から結構時間経ちましたが、宿題は一向に終わりません(́・ω・`)

※見てない人は一応ハード制作偏もよろしくオナシャス

でも仕方ないので作りきっちゃうことにしました。

というわけで、ハードはできているのであとはコントロールするところを作るだけです。

若干作ってる途中にめんどくさくなって機能削ったりしましたが(風向き調整とか,全部で1000通り超えそうだった)とりあえず温度調整と電源ON,OFFを目標にします。

とりあえず、操作インターフェイスはAndroidでセコセコ作りました。っていっても全部で6時間ぐらいかかりましたけど…

Androidアプリのいろいろわかったからよしとしよう(

僕の構想では、Android端末<==(ssh通信)==>Raspberry Pi==>赤外線LED

みたいな感じです。最初は軽そうだったからtelnet使おうかとも思ったのですが、万一ログインされてエアコンつけっぱなしとかにされたら金銭的被害が大きいのでやめました。

sshですが、自動ログインさせるためにパスワードなしのコマンド縛りなし公開鍵を使用します。管理には気をつけてください。

鍵作成

鍵登録

これでパス無しでログインできるようになります。

で、このid_rsaというファイル(~/.ssh/id_rsa)が公開鍵です。

どうやってスマホに飛ばそうか考えたのですが、めんどくさかったのでcatで開いてターミナルの内容をそのままコピーしてテキストファイルに貼り付けしました。

一応動いてます。動かないとかだったらウィンドウサイズのせいで改行入ってないかみてみてください。

アプリ内で、/data/local/raspi_id_rsaを使用するようにしました。ソース貼るつもりなので後で変えてもおkです。

飛ばします。

このままだとパーミッションで怒られるので

しときます。

試しにつないでみます。

-iで鍵指定です。

ちなみに、多分普通のAndroid端末だとssh入ってないと思います。Cyanogenmodに入ってるのでコマンド本体(ssh)とlibssh.soを抜いてきて入れれば動きます。root必要ですけど。

というわけで、無事にパス無しでsshつなげたので今度はネットのインフラを整えます。僕の部屋は有線LAN繋げない場所にエアコンがあります。なので無線LANを使います。最近ってホント便利だよねー(

SSIDは固定(当たり前)なので直接設定ファイルに書き込んじゃいます。

http://blog.goo.ne.jp/minoh_edubuntu/e/eb838d875436844788decd79da602c51

こんなの見つけました。

なるへそへそ

Raspberry Piの/etc/network/interfacesの中身はこんなかんじです。

wpa-confのところはコメントアウトしちゃいましょう(

僕の無線ドングル(2009年製)はwlan0として認識されてるのでwlan0のところをいじります。

もちろんIPは固定です。これで

するとWi-Fiにつながります。

これで、あとはarduino_ir_remoteを使ってそれぞれの温度設定やら電源操作やらを記憶させてください。

次、また端末側です。

まず、パスの通ったディレクトリに

というファイルを作って実行権を与えます。

僕は/system/xbin/send_ssh

という名前で置きました。

なんでこんなもの作ったかというと、アプリに埋め込むと謎のシンタックスエラーが出たからです…

こっちのほうがぱぱっと送れるし便利ですしね(

で、Raspberry Piにも、/binあたりに、

coolという名前で

というファイルを作ります。僕が記録した時にtmp_(温度)という感じに記録していったのでこんな感じになってます。$1がsshで飛んでくるリクエストです。

cool 25

みたいなコマンドとして扱えるようになります。

次に、onという名前とoffという名前で同じく電源ONとOFFのスクリプトを作ります。

スペースが入ると無駄にめんどくさくなるのでそれを回避するためにこんなことやってます。

プロの人たちはちゃんとできるんだろうなぁー…

アプリは、色んな所から真似て作りましたが(ていっても80%ぐらいはオリジナル)正直クソース過ぎて恥ずかしい…

シェルスクリプトの実行は

http://androidadvent.blog.shinobi.jp/2012/linux-command

ここのを真似ました。

で、上のを更に真似て

こんなの作りました。

これは画面上のEditTextにviewLog(“Test”);とするだけで書けるようにしたものです。

基本これとシェルスクリプトの実行の繰り返しだったりします。

こんなのです。

レイアウトとかはprivateのあたりで見てください(

ほんとにクソース…

Screenshot_2015-08-13-18-28-56

Screenshot_2015-08-13-18-29-23

こんな感じです。初心者にしてはちゃんと作れてるでしょ??(

将来的には(というか必要になったら)暖房のコントロールも実装したいです…

IMG_20150813_175323

エアコンにはこんな感じに装備しました。Raspberry Pi単体でできたらよかったんだけどなぁ…

とりあえず、これで家の中ではつながるようになりました。

次は外から操作してみます。念の為、ポートは変更しておきます。send_sshに書き加えておいてください。

ついでに、家の中と家の外を区別して接続を変えるようにします。

各自のnslookupの仕様で書き換えたり読み替えたりしてください(もちろんアドレスも)

あ、ポートもです。

うちの環境は、DD-WRTのDNS改造機能でharuroid.0t0.jpをサーバーのローカルIPに変えています。

なので、そのままharuroid.0t0.jpにつなぐとサーバーにsshしてしまうのでこうやってharuroid.0t0.jpのアドレスが192から始まる(=家内LANにいる)時は192.168.2.12にsshしています。

ということで、これで外からでもsshが通じるようになったので外からでもエアコン操作ができるようになりました!

やりながら書いてたので言語崩壊してる気がします…

わからないとこあったらコメントにでも書いてください!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です