推特地震按鈕製作簡易說明

Arduino button layout

昨天做的地震發推按鈕主要參考這篇 “Arduino to Twitter over USB“,雖然標題上是寫透過 USB ,不過要改成藍牙或是 WiFi 也是沒問題的。

這個方案主要是透過在電腦上運作的一隻 python 腳本來監聽 serial port,如果有接收到訊息的話,就把該訊息透過 twitter API 發佈。然後我們透過 Arduino 來製作一個按鈕裝置,觸動按鈕後會將預先定義的字串傳到 serial port。

要實作這個小專案,需要準備的材料如下:

  • 一台有 USB port,已經安裝好 pythonArduino IDE 的電腦,作業系統不拘。
  • Arduino 板子,我手上的是 Arduino Duemilanve,不過任何一塊都可以。
  • Arduino USB 連接模組,有些版本是內建的,可以不用另外準備。
  • 麵包板。
  • 10K歐姆電阻一個。
  • 觸碰式按鈕一個。
  • 單心線數條

Arduino 板子的配置如上圖(用 Fritzing 畫的)所示,設置完成後連接到電腦,然後將下面程式碼寫入板子裡:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int buttonPin = 10; //定義按鈕連接腳位
int val = 0; //按鈕狀態
 
void setup()
{
  pinMode(buttonPin, INPUT); //將按鈕腳位設定為輸入模式
  Serial.begin(9600); //設定 serial 傳輸速率
}
 
void loop()
{
  val = digitalRead(buttonPin); //讀取按鈕狀態
 
  if(val == HIGH) { //如果按鈕被觸發 
    Serial.println("改成你想發推的字串"); //將預先設定的字串傳到 serial port
    delay(1000); //延遲等待一秒鐘,避免連續觸發
  }
}

程式寫入完成後,可以透過 Arduino IDE 上的 “Serial Monitor” 進行測試,按一下按鈕看是否有正常運作,如果沒有的話就再檢查一次電路的配置。

接下來要準備電腦端的程式,首先去 http://dev.twitter.com/ 申請註冊一個 app,待會我們會用到 twitter API key。

申請好 twitter API 後,要在機器上安裝幾個 python 套件 – pySerial 套件讓 python 可以監聽 serial port 事件,Python-Twitter 則可以讓我們使用 twitter API 發推。Python-twitter 會用到 simpleJason, httplib2python-oauth2 三個套件,請務必在 Python-twitter 套件之前安裝好。

然後修改一下 “Arduino to Twitter over USB” 作者所提供的 python 腳本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#**************#
# Brad Wells   #
# wellsb.com   # 
# *************#
 
##Import Libraries
import twitter
import serial
import time
 
##Authenticate with Twitter API
api = twitter.Api(consumer_key='your key here', consumer_secret='your key here', access_token_key='your key here', access_token_secret='your here here') 
 
##Configure Serial Port
arduino = serial.Serial('/dev/ttyUSB0', 9600)
 
 
while 1:  ##Infinite Loop
	status = arduino.readline() ##Wait for new line to come across Serial
	api.PostUpdate(status) ##Post message to Twitter
	time.sleep(3600) ##Wait 3600 seconds
	del status	##Clear status

除了把剛才申請到的 twitter API key 填入外,需特別注意的是把’/dev/ttyUSB0′改成你的配置,如果不確定的話,可以開啟 Arduino IDE,在”Tools”選單裡的”Serial port”可以看到你目前可用的配置。

改完後存檔,檔名隨便,我是存成 “twitterButton.py”。然後我們就可以在命令行輸入 “python twitterButton.py” 來執行腳本,要終止執行的話請按”Ctrl+c”。

在腳本執行期間,只要按一下已經連接到電腦上的 Arduino 按鈕,系統就會把預先設定好的訊息發送到 twitter 上了。

其他可以實作的延伸計畫

  • 將 python 腳本編譯成常駐程式或服務
  • 將 Serial port 發送的方式改成直接透過 web api 呼叫
  • 配置多個按鈕及其他感測器來觸發不同事件
  • 透過 python-twitter 過濾特定條件 tweet,經由 serial port 反饋到 Arduino 上觸發實體裝置
  • 發送到 plurk 和 facebook
  • 無線化

結語

一直都是自己悶著頭玩的,這次有機會可以和大家分享也頗開心,一起來玩吧。:)

This entry was posted in 奇技淫巧, 設計工藝, 謎樣人生 and tagged , , . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

3 Comments

  1. 維毅
    Posted 2011/09/23 at 22:45 | Permalink

    你好,我有照著你的步驟做,但在最後觸發按鈕的時候出現了以下的錯誤(執行python twitterButton.py時都正常),
    Traceback (most recent call last):
    File “twitterButton.py”, line 20, in
    api.PostUpdate(status) ##Post message to Twitter
    File “/home/bravo/下載/python-twitter-0.8.2/twitter.py”, line 2766, in PostUpdate
    data = self._ParseAndCheckTwitter(json)
    File “/home/bravo/下載/python-twitter-0.8.2/twitter.py”, line 3668, in _ParseAndCheckTwitter
    self._CheckForTwitterError(data)
    File “/home/bravo/下載/python-twitter-0.8.2/twitter.py”, line 3691, in _CheckForTwitterError
    raise TwitterError(data['error'])
    twitter.TwitterError: Could not authenticate you.

    • OOBE
      Posted 2011/09/26 at 00:26 | Permalink

      看起來是 twitter 認證的問題,
      你有去 twitter.com 申請 API key 並且在程式裡填入正確的位置嗎?

  2. 維毅
    Posted 2011/09/26 at 11:38 | Permalink

    您好,我是在consumer_key和access_token_key的地方填入已申請的帳號及密碼,但卻還是發生錯誤…

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">