2011年3月3日 星期四

序列伺服器 serproxy 介紹

什麼是 serproxy?

serproxy 是一支可以把序列通訊轉接成網路通訊(Redirecting network socket connects to/from serial ports)的程式。參考底下這張示意圖,serproxy 允許你透過網路跟 Arduino 建立通訊。

image
▲ serproxy 運作示意圖

什麼情況下會用到 serproxy?可能有兩種情況會需要 serproxy:

  1. 你想把 Arduino 變成一個網路設備,讓你或別人透過網路存取 Arduino。
  2. 你用的程式語言不支援 serial port,例如 Flash。Flash 不能存取 serial port 但可以建立 socket 進行網路通訊,有了 serproxy,Flash 便可以跟 Arduino 建立通訊,你就可以結合 Arduino 與 Flash 來做一些互動的應用。

除了 Flash,要開發結合 Arduino 的互動應用程式,你可以使用任何你喜歡或習慣的程式語言,比如 Processing, Puredata, Tcl, Python, VB.NET 等,只要所用的程式語言有網路通訊的能力就行。

哪裏可以取得 serproxy?

serproxy 可以在它的官網下載,有 Windows 和 MAC 的版本。軟體不需要安裝,下載後解開壓縮檔即可:

image

壓縮檔裏只有兩個檔案:

  1. serproxy.exe: 主程式
  2. serproxy.cfg: 組態設定檔。檔案是純文字格式,用一般文字編輯器即可編輯。
怎麼使用 serproxy?

serproxy 的使用方法很簡單。首先,你必須根據你的環境調整 serproxy.cfg 的設定,然後再執行 serproxy.exe 以啟動服務。

serproxy.cfg 預設內容如下:

serproxy.cfg 裏的設定,主要是描述 Serial Ports 跟網路通訊的 Socket Ports 的對應關係。

以預設的 serproxy.cfg 來說,它說:總共有 4 個 serial ports(comm_ports=1,2,3,4),編號為 1, 2, 3, 4(亦即 Windows 的 COM1, COM2, COM3 及 COM4 四個 serial ports),這 4 個 serial ports 依序對應到 port 5331 ~ port 5334,可參考底下這張示意圖:

image
▲ serproxy 可用的 Serial Ports 沒有限制,你可以用 COM4 之後的 Serials Ports,如 COM9

Baud Rate 的設定也是需要留意的一件事,因為必須跟 Arduino 程式的 baud rate 設定匹配,serproxy.cfg 裏的 baud rate 設定預設是 19200 bps(comm_baud=19200)。

image

如上圖,假設你有一塊 Arduino 板子,你把它接在筆電的 COM4 上,你希望透過網路來存取 Arduino,把它開在 5331 這個 port 上,那麼,根據你的環境,你只要把 serproxy.cfg 改成底下這樣就可以了。我假設你 Arduino 程式其 Serial Port 通訊速率(baud rate)為 57600 bps。

接著就可以雙擊 serproxy.exe 啟動服務。

image

跑 serproxy.exe 的時候,Windows 可能會跳出上面的安全性警示視窗,儘管按下「解除封鎖」鈕,然後就會看到底下這個視窗,這代表 Serproxy 已經啟動了:

image

等一下,這樣就夠了嗎?

嗯,這樣還不夠,現在只是在 PC 或筆電上把 serproxy 跑起來而已。你還得做兩件事才行。第一,為你的 Arduino 應用寫一支 Arduino 程式,而且這支程式除了有讀取感測器(Sensors)或控制動作器(Actuators)外的功能,還要有能力與 PC 或筆電透過 Serial port 通訊;第二,用你慣用的程式語言撰寫你的互動程式,你可以用 Flash 做動畫、用 PureData 做音訊處理或做任何互動應用程式,除此之外,這支互動程式還要有網路通訊的能力,而且還要與 Arduino 講同樣的語言/協定,這樣兩邊才能溝通。

「哇!聽起好像很複雜。」

別擔心!你要做的事其實不多,很多工作別人都幫我們做完了。現在已經有很多種方法可以讓這些事變得很簡單,你只要照著步驟做,很快就可以做出你自己的互動應用,而且非常輕鬆。

以目前而言,使用 Firmata 應該是最簡單的方法,我們日後會提到,你現在只需要知道概念就好。

image

Firmata 是一個通訊協定,它可以讓你的 Arduino 跟外部的軟體(例如 Flash 或 Processing)用同一套語言對話。一般來說,Firmata 的使用步驟大概如下(請參考上面這張示意圖):

  1. 在 Arduino 上跑 Firmata 程式。(Arduino IDE 已內附 Firmata 程式)
  2. 在 PC 或筆電上把 serproxy 跑起來
  3. 為你的程式語言安裝 Firmata library 並撰寫你的互動應用程式。(Firmata 目前已支援多種程式語言)
延伸閱讀

3 意見:

XO 提到...

Nice work!
One Q though, is it possible to have different set of COM port setting, i.e. baud, data bits, stop bit and parity bit, for each COM port?

芭蕉葉上聽雨聲 提到...

我找到這個東西>>> http://mikmo.dk/gobetwino.html
好像功能不錯而且還是免費的,
不知您是否可以寫一些用Arduino收發email這方面的文章.

coopermaa 提到...

那個我有看過
之前寫「製作一個溫溼度記錄器 (2)」這篇,在尋找 log 工具的時候有看過 gobetwino
不過,後來我用 Tcl 自己寫了一個 log 工具,沒有選擇用它,記得那時的感覺是覺得這工具不夠 friendly, 而且沒有 source code,所以就放棄了