Help us understand the problem. What is going on with this article?

Intel Edison から Tweet をポスト

More than 5 years have passed since last update.

IoT の醍醐味はなんといっても「ネットに繋がっている」事ではないでしょうか。
そのインターネットを生かした使い方として「なにかあったらツイートする」というのをやってみましょう。

ツイートするプログラム

今回 Edison の中からツイートをするためのプログラムを GO言語で書きました。
GO を使った理由としては

  1. クロスコンパイルが容易である
  2. 実行バイナリを生成する
  3. その実行バイナリがスタティックリンクのひとかたまりになっている
  4. ネットワークに強い

というあたりです。
ネットワークプログラミングがやりやすくて、Linux や Windows、そして MaxOSX と安定した開発環境を得られて動作確認もその上で行えるというところにメリットを見いだしました。
Linux なり Windows なりの上で開発して完成したらクロスコンパイル、できた実行ファイルを scp で Edison に転送しようという魂胆です。

ソースコード

実際に作ったコードはこちら。
起動時にコマンドライン引数に与えた文字列をツイートするという簡単なプログラム。
Twitter クライアントライブラリである anaconda を利用してさくっと作ってあります。

iotTaslkPost
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になる回路ですね。
pullup_sw.PNG

スクリプト

ボタン監視とツイートコマンドの起動には Ruby を使いました。
書き捨てテストコード。

push.rb
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 っぽくはないでしょうかね。

rerofumi
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away