IoT の醍醐味はなんといっても「ネットに繋がっている」事ではないでしょうか。
そのインターネットを生かした使い方として「なにかあったらツイートする」というのをやってみましょう。
ツイートするプログラム
今回 Edison の中からツイートをするためのプログラムを GO言語で書きました。
GO を使った理由としては
- クロスコンパイルが容易である
- 実行バイナリを生成する
- その実行バイナリがスタティックリンクのひとかたまりになっている
- ネットワークに強い
というあたりです。
ネットワークプログラミングがやりやすくて、Linux や Windows、そして MaxOSX と安定した開発環境を得られて動作確認もその上で行えるというところにメリットを見いだしました。
Linux なり Windows なりの上で開発して完成したらクロスコンパイル、できた実行ファイルを scp で Edison に転送しようという魂胆です。
ソースコード
実際に作ったコードはこちら。
起動時にコマンドライン引数に与えた文字列をツイートするという簡単なプログラム。
Twitter クライアントライブラリである anaconda を利用してさくっと作ってあります。
import (
"os"
"flag"
"fmt"
"github.com/ChimeraCoder/anaconda"
"net/url"
)
func tweet(talk string) {
anaconda.SetConsumerKey("your-consumer-key")
anaconda.SetConsumerSecret("your-consumer-secret")
api := anaconda.NewTwitterApi("your-access-token", "your-access-token-secret")
v := url.Values{}
tweet, err := api.PostTweet(talk, v)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println("Tweet success: "+tweet.Text)
}
func main() {
flag.Parse()
if flag.NArg() != 1 {
fmt.Println("Argument Error.")
fmt.Println(" usage: iotTalkPost your-tweet")
os.Exit(1)
}
tweet(flag.Arg(0))
}
アクセスキー
Twitter API へのアクセスキー群は各人で取得し、ソースコードに埋め込んでください。
ボタンを押したらツイートされる
上記のコマンドを実行すると Edison の内部からツイートが投稿されます。
GPIO に押しボタンを取り付けて、ボタンが押されたらツイートする ruby スクリプトを作って見ましょう。
押しボタンの配線
今回は GPIO15 に押しボタンスイッチをつけてボタンの入力を見ます。
プルアップ回路なので、解放で1押されたら0になる回路ですね。
スクリプト
ボタン監視とツイートコマンドの起動には Ruby を使いました。
書き捨てテストコード。
def gpio_in(port)
number = port.to_s
if !File.exist?("/sys/class/gpio/gpio#{number}") then
open("/sys/class/gpio/export", "w") do |fp|
fp << number
end
end
open("/sys/class/gpio/gpio#{number}/direction", "w") do |fp|
fp << 'in'
end
end
def input(port)
code = "1"
open("/sys/class/gpio/gpio#{port}/value", "r") do |fp|
fp.each do |line|
code = line
break
end
end
return (code.to_i == 0)
end
# ---- main
gpio_in(15)
trig = false
while(1) do
push = input(15)
if (trig == false) && (push == true) then
puts("Fire!")
system("./iotTalkPost \"push! ボタンが押されたよっ!\"")
end
trig = push
sleep(0.05)
end
sysfs の GPIO value をくるくる監視して、0から1になったらツイートする仕組みです。
IoT ってなんでしょかね
これで Edison の中からツイートすることができるようになりました。
Edison で何かを監視して、都度ツイートしまくるとかに使うといくらか IoT っぽくはないでしょうかね。