イントロダクション
いやぁほんと休日出学は辛い。
できることもできないし、やりたいこともやれないし。
そんなわけで約2週間ぶりの更新。という似たようなシュチュが前にあったような…を繰り返し
for(i = 0; i < 偉い人の気がすむまで; i++){
out.Home(“University”);
}
のような…。
そんなことより
イントロダクションを華麗にスルーして今回やった(先週やりたかった)ことはタイトルにある通りに『Twitterを使って家電を操作(未完?』です。
具体的に言うとPythonのTwitter ライブラリ(でいいかな)のTweepyを使って赤外線LEDを高速で点滅させて、家電(照明やエアコン)を操作しよう。ということ。
そんなわけでサクッとやりましょう。
調理する具材
- RPiとかまぁおよそ必須だろと思えるもの
- 赤外線LED(OSI5FU5111C-40)
- 赤外線リモコン受信モジュール(OSRB38C9AA)
- トランジスタ(2SC1815)
- 普通のLED(赤外線は目に見えないためちゃんと光ってるか確認用のLED)
調理方法
まずは赤外線LEDの受信。と行きたいとこですが、いかんせん僕は回路さっぱり人間なので回路を組むというハードな方から済ませます(嫌いなものは先に食べるタイプ)。
今回使う赤外線LEDはRPiの大半を占める3.3VのGPIOピンでは少々力不足(アンペアが足りない)のでRPiに二本しかない貴重な5Vのピンを使います。が、その5Vのピンは常に電力出し続ける電源ピンなのでソフトウェア的に制御することができません。そこで使うのがトランジスタです。
トランジスタ編
“トランジスタ”でググるといろんな情報(増幅なんたら)が出てきますが、増幅というよりかは小さい電流で大きい電流の制御をするという役割です。(わかってる人に聞いても大体よく分からないたとえ話されるので自分で資料を読んで考えることをオススメ)
勉強しようとすると頭がパンクしそうになりますが、使う分に必要最低限の知識は入れましょう。
一番わかりやすいネットの資料があるので載せておきます。
トランジスタを使う上での基礎知識:PDFです。
トランジスタの前座が終わりました。で、回路を組みます。

赤色のLEDを赤外線LEDとして、「N」ってマークの付いてる部品がトランジスタ(NPN型の)です。
電源は5Vのピンにつながっていて、制御をGPIO24(18番ピン)で行います。
さて次は赤外線を受信するための(リモコンの信号をコピるために)回路を組みます。これは簡単で、The そのまま です。

ここまででハード的な作業は終わったので次はソフト的なものを用意していきます。
Tweepy編
まず、PythonでTwitterの情報を取れるようになりましょう。
上のブログ(1個目のリンク)を参考にTweepyが使える環境を構築します。
そのあとはリファレンス(2個目のリンク)を見て慣れるまでいじってみます。
で、今回作るプログラムのアルゴリズムは
『Twitter上で自分のアカウント‘@bean1310’のつくツイートを検索 →
その検索結果の中から自分が自分に向かってリプを送信したもの かつ 自分が いいね をしていないリプ (かつ 送信元(via)がツイ廃あらーとでないリプ)を読みだして →
ツイートをスペースで区切った時 2番目(1番目は@bean1310)が‘/cmd’であるとき→
そのあとの文字列によって動作を決める → 動作したなら いいね をつける』
という文字にするとややこしく見えるものです。
とどのつまり、自分が自分に送ったリプがある一定の書き方で いいね されていなければ実行(何回も同じ動作を防ぐために実行したらそのツイートに いいね をつけて区別する)というわけです。
使ったAPIを書き出していくと
- 検索結果:search_result = API.search(q = ‘@bean1310‘)
- リプの送信者(ユーザネーム):rep_uid = search_result[i].author.screen_name
- いいねしたかどうか:tweet_status = API.get_status(search_result[i].id).favorited
- via判定:search_result[i].source
- リプの内容(ツイート内容):rep_txt = search_result[i].txt
- いいね をつける:API.create_favorite(search_result[i].id)
となります。(’i’は繰り返し文で使った変数の名残です)
これを使えるまでに何回もprintで受信データを見るというもうしたくないと思うレベルの重労働をしました。もうしません。
ここまででTwitterから情報を抜き出すことができたのでこれとGPIOのプログラムを絡めるとLEDを光らすことができそうです。いやできます。
最終的にはcronに指定間隔でやってもらう感じですかね。
リモコンをコピる編
もう誰もが思いつくような普通のことなのですでに便利ソフトがあります。
ここでは『lirc』というソフトを使います。
これは本を見てやりましたが、まぁネット上のサイトでもいいところはあるでしょう。
実例で学ぶRaspberry Pi電子工作 作りながら応用力を身につける:ブルーバックス:やっぱりこの本いいですね
前に一回紹介した本です。おすすめです。
これを参考にまずは部屋の照明の信号をとってみました。特に苦労することなくサクッと出来てしまいました。(かなり前にTV を使って実験したので失敗はなかったですね)
で、問題があります。エアコンのリモコンはどうやっても無理でした。
メーカによるのかもしれませんが、エアコンのリモコンは全データを毎回送信するみたいで、云々…。よくわからないですが無理なんだそうで。
で、どうしたものかと頭をかかえてると前に見た「うしこlogさん」がC言語でツールを作っていたことを思い出し、がガガーーーっと。
ラズパイでエアコンを操作:当該記事です。
ここにあったCのプログラムをコンパイルするためにまず『wiringPi』をインストールします。Raspberry PiのGPIO制御のヘッダファイル(という認識でいいのか)です。
ラズベリーパイ2のGPIOを使ってLチカ:えぇこれも「うしこlogさん」です
うしこlogさん様様です。感謝っ!圧倒的感謝っ!!ってやつです。
で、Cソースコードの指定ピンを変更し(だって回路変えるのめんどくさいじゃん)コンパイルしエアコンのリモコンの信号を読み込んで送信しようとすると、読み込んだ信号を保存しているテキストファイルの中身が消失してしまったんですね。
それはC言語ソースファイル(送信の方)の55行目の「”w”」を「”r”」に書き換えると(多分)解決し、普通のLEDでもちゃんと(ディテールは省くとして)光るのでいけたと思ったのですが…。
沈 第3話
黙
のエアコン
で、反応しない。うーんなぜなのか。
と、今に至ってもまだ解決できていません。
出力が足りないということはないと思うのですが、何か仕掛けがあるんですかね。おそらくエアコンは他の一般的な赤外線リモコンとは少し違うんでしょうか。
というわけで、1点の未解決問題が残りましたが、今週の工作はここまでです。

食後
いやぁ暑い。今日は窓を開けていると涼しいのですが閉め切っていると暑い。
と、導入と関係なく最近LEDを使いまくっていると落としてしまったりで足にLEDが刺さりました。
はい。
特に書くことがありません。
では、次回予想(予告ではない)をします。
多分音声認識に挑戦しています。とはいえ今日やったTwitter部分を音声でやろうというあまり面白みのないものでしょう。
今週のまとめ:鋼鉄城のカバネリが最高に面白くかっこいい。
コメントを残す