2007年10月2日 星期二

Surge on TinyOS1.x

Surge 為TinyOS1.x上用作測試mutlihop的應用程式
它可以GUI的方式將整個Topology呈現出來
只要到apps/SurgeTelos 底下就可以找到其原始碼
下面記載我自己測試時遇到的問題和需要注意的地方

Step1 燒錄程式
因為我目前用的mote是Tmote sky
所以首先到apps/SurgeTelos
並輸入以下指令將程式碼燒到mote裡面
$ make telosb install,0 bsl,/dev/ttyUSB0
$ make telosb install,1 bsl,/dev/ttyUSB1
第一行是將第一個mote編號設定為0
因為編號為0的節點在surge中為base station
可以透過這個節點收集資料
第二行是將第二個mote編號設定為1
這個節點會將資料一直傳送出去

此外,預設的Group ID 為0x7D
如果要更改Group ID的話
可以先修改環境變數之後再重新編譯程式
例如
$ export DEFAULT_LOCAL_GROUP=0x0a
$ make telosb install,0 bsl,/dev/ttyUSB0
......
這樣就可以將Group ID改成0x0a


Step2 讀取資料
將程式燒好之後,我們有兩種方式將basestation 收集的資料以GUI的方式秀出

法一 直接使用Surge的java程式
先確認tools/java/net/tinyos/surge/底下的java程式是否已經編譯完成
而且必須為telos重新編譯surge,否則可能會遇到資料格式不符的問題
$ cd $TOSROOT/tools/java/net/tinyos/surge
$
make clean
$
SURGE_PLATFORM=telos make
在確認surge已經編譯完成之後
必須修改環境變數,讓java程式知道需要透過哪個device讀取資料和所用到的baud rate
$ export MOTECOM=serial@/dev/ttyUSB0:telos
請特別注意":"之後為telos,不要設定為一般telos用的57600
如果設為57600會一直出現 TOS_Msg ngth is invalid
我在這邊卡很久,還以為surge不會自動判斷封包的格式,重新編譯surge了好多次
後來才發現只要在":"之後設定為telos,surge會自己去找相對應的格式

接著執行surge程式
$ java net.tinyos.surge.MainClass 0x7D
這樣就會有GUI的畫面跑出來了

法二 透過SerialForwarder傳送資料
透過SerialForwarder的好處是可以讓多台電腦同時觀看目前basestation的狀況
所以首先先設定好SerialForwarder:
$ java net.tinyos.sf.SerialForwarder -comm serial@/dev/ttyUSB0:telos -no-gui
類似剛才"法一"的環境變數設定
我們必須確認device和baud rate是否都設定妥當
"-no-gui"是讓SerialForwarder在commend line下執行
接著再開另一個commend line執行surge 程式
而且因為SerialForwarder 預設的port為9001
所以我們將環境變數改成
$ export MOTECOM=sf@localhost:9001
之後再執行surge主程式
$ java net.tinyos.surge.MainClass 0x7D
使用法二的好處是可以讓多個使用者同時都可以觀察目前basestation的情況
只要將環境變數中的localhost改成IP
就可以在其它的電腦上觀看整個網路的狀況


參考來源:
http://www.tinyos.net/tinyos-1.x/doc/multihop/multihop_routing.html

SurgeTelos README


目前測試結果:
可以在server上啟用SF
並在遠端的cliet上看到 1個basestation和8個node的連接狀況
如圖所示:



遇到狀況:
  1. client每隔幾分鐘會斷線一次,GUI就會消失
  2. server端收到四千多個packet後會crash

11 則留言:

canny 提到...

你好,
冒昧打擾,由於剛踏入使用Tmote Sky,所以有些概念不太懂。
如果廠商已經將framework寫到mote裡面
,有些功能並無法符合我們的需要(也沒釋放source code),
我們如何知道他運用到哪些元件(或者API,或許稱API很奇怪,nesc應該利用event互相溝通),如何串連起來。tinyOS又有哪些API可供參考?
Berkeley 是否已有公開的FW可供使用?
可否協助一下,謝謝!

canny

hdj 提到...

Canny 你好丫
不好意思今天才看到你的留言
因為最近太忙啦..哈

基本上可以把TinyOS看成是API
它將你會用到的硬體,如mote上的Led,Sensor,Radio和封包格式....等
都幫你處理好(就好像幫你寫好driver)
當你要用到Led時,只要將相對應的interface寫到你的config檔
你就可以在你的主程式中呼叫和使用Led

即然硬體都驅動好了
就可以使用radio傳送基本的封包
而且也越來越多人參與相關的研究
接著有人開始研究上一層的protocol
如routing protocol, 時間同步協定等

所以如果你有下載TinyOS回來玩過的話
你會發現他將你會用到的程式都整理好好的.
個人是感覺TinyOS1.x東西很多,
發展也比較久,
但是缺點是有點亂,
因為很多人各自開發自己的程式,
導致文件有點混雜,
而TinyOS2.x整理的相當完善,
但是相對的能用的API就比較少一點.

BTW
TinyOS是open source你可以先去TinyOS的網站看看他們的說明文件

Good luck
hdj

canny 提到...

Hello,
經過這段時間的摸索(實在這類資料太少,爬柏克萊的HELP好辛苦)大概也有個基礎囉,謝謝你的說明!我利用他的範例程式一層一層地追,發覺該技術的文章缺乏系統整理,例如到底底層用到的component,interface到底有多少種,最困難的部分,我是認為就是我不知道引用的元件存在多少使用的介面,是否該實作,有點茫茫的。如果有一個總表清楚地介紹出輪廓,對新手來說更能掌握細節。謝謝囉,希望再跟你請教後續的問題。
對了!請教一個問題
在tinyos1.x下以Tmote sky板子,執行cntToLeds範例時都會出現以下的錯誤訊息"expected interface 'Counter' but got a component",查tinyosHelp的說明時,該連結已不見。是不是要修改MSP頻率軟體某個檔案的設定啊?謝謝!

匿名 提到...

你好,冒昧打擾,

由於我們目前將使用TmoteSky來寫畢業專題,但是第一次接觸,希望能向你請教一些相關知識。

目前我們需要做到讓三個TmoteSky做到跳接功能,之後需要讓它能抓到訊號強度並顯示,但是我們拿到的使用手冊上,是一些很基本的功能,例如溫濕度感測等。

如果可以的話,能否請你稍微描述這部分的使用方法,若不行,也謝謝你寫出這篇文章,供閱讀。

不好意思,打擾你了。

hdj 提到...

我不知道你用的軟體是那一套,如果是TinyOS的話,有RSSI的範例程式,你可以研究看看,你描述的功能還滿簡單的。

匿名 提到...

您好!!
因為想做一個傳送文字的程式
可是在tinyos官網
琳瑯滿目
想請問大大
該用哪一個API比較恰當呢?

匿名 提到...

現在這邊謝謝大大了
打擾您了!!
不好意思!

hdj 提到...

你可能要跟明確點出你要的功能,如果你傳送的資料,需要使用到routing的功能,你可以去看看CTP。
如果單純是broadcast資料給鄰近的節點,那你只需要看看Tutorial的封包傳輸的章節。

建議你先看看
http://docs.tinyos.net/tinywiki/index.php/TinyOS_Tutorials

Mote-mote radio communication這章之中應該有你要的東西。

ㄚ胤 提到...

你好,想請問的是,我使用Tmote sky,我可以成功的燒錄Oscilloscope和Basestation,但是我看不到group id的號碼,因此去修改了basestation後,可以用Listen看到group id,但是奇怪的地方在於,我用DEFAULT_LOCAL_GROUP改變group id後,理論上應該basestation會收不到不同group id的訊號,可是我卻可以讀到不同group id的值,請問我該怎麼辦?謝謝

hdj 提到...
作者已經移除這則留言。
hdj 提到...

我沒有改過DEFAULT_LOCAL_GROUP,所以不太知道他的做用。不過,如果你想讓basestation收不到的話,建議你改channel,預設的設定如下:
CFLAGS += -DCC2420_DEF_CHANNEL=26
也就是說,預設是使用26 channel,你只要改了這個值,不同channel的mote彼此就收不到訊號了。
我想這應該是你想要的功能吧!!

Related Posts Plugin for WordPress, Blogger...