顯示具有 [程式設計]--TinyOS 標籤的文章。 顯示所有文章
顯示具有 [程式設計]--TinyOS 標籤的文章。 顯示所有文章

2011年5月23日 星期一

TinyECC 2.0 釋出啦

TinyECC是TinyOS上有名的加密軟體,
不過以往他只支援TinyOS 1,
所以,我一直在等他支援TinyOS 2,甚至是找人幫忙將他Port到TinyOS 2,
沒想到,總算在2011的二月,官方釋出了TinyECC 2.0,並且支援TinyOS 2。

等這個消息等了快三年,總算是讓我等到啦,有需要研究的朋友,快去下載來試試吧!!

http://discovery.csc.ncsu.edu/software/TinyECC/

2010年5月23日 星期日

Yeti 2 讓你用eclipse開發TinyOS2

本來是想找看看有沒有什麼其它工具可以用來Debug Nesc的,
結果讓我找到了Yeti 2這個eclipse上的外掛。
Yeti 2非常的強大,除了可以顯示Nesc的特殊字元,
還可以自動呈現出component之間的關係,
而且可以隨時查看各函式的內容,相當的方便。

官方網站如下:
http://tos-ide.ethz.ch/wiki/pmwiki.php

底下紀錄我自己安裝的過程和一些使用上的心得:

Yeti 2 安裝步驟



Yeti 2的安裝還滿簡單的,只需要按照官網的說明安裝,
請參考http://tos-ide.ethz.ch/wiki/pmwiki.php?n=Site.Installation
要注意的是eclipse的版本要3.5以上會比較穩一點,
所以,我在安裝Yeti 2之前有先行將eclipse更新到最新的版本。
因為官網有提到不確定在MAC OSX下可不可以正常執行,
所以我想有必要在作一份紀錄供MAC的使用者參考。
簡略的步驟如下:

Step 1 下載Yeti 2

首先開啟eclipse,點選"Help" > "Install new software" 。
如下圖所示:
螢幕快照 2010-05-22 下午5.33.36.png


接著新增一個來源位置: http://tos-ide.ethz.ch/update/site.xml,如下圖所示:
螢幕快照 2010-05-22 下午5.06.17.jpg


新增完之後,eclipse會自動取得套件列表,如下圖所示:

螢幕快照 2010-05-22 下午5.10.52.jpg


方框中的套件是我有安裝的,因為我是用snow leopard,所以我選擇的環境是TinyOS 2.x on Unix,
接著按下“next“,Yeti就會自動安裝了。


Step 2 設定環境參數

原則上,因為我是先安裝好TinyOS2.x的,所以,eclipse會自行找到TinyOS的環境變數如TOSDIR和TOSROOT,
個人的猜測是eclipse自行去讀bash的環境設定,
不過我發現CLASSPATH和PATH還是沒有設定完善,
所以還是要自行確認,請開啟“偏好設定“,
並且在"TinyOS" > "Environments" > "TinyOS 2.x Unix-environment" > "environment Variables"中,
自行新增環境變數。
如下圖所示:
螢幕快照 2010-05-22 下午6.11.01.jpg


如果環境變數都沒有什麼問題,現在就可以使用eclipse開啟TinyOS的專案了。

新增TinyOS範例專案



要檢查安裝有沒有成功,最簡單的方法就是新增一個example project。
可以參考官網的說明:
http://tos-ide.ethz.ch/wiki/pmwiki.php?n=Site.NewExampleProject

不過,我自己也不免俗的開了一個Base station專案來測試,
他會自動幫你新增相對應的原始碼和makefile,感覺就好像copy了一份apps/Basestation/給你。
個人覺得最貼心的地方是它會自動產生程式的component連結圖,
如下圖所示:
螢幕快照 2010-05-23 上午1.03.11.png

可以馬上看到現在各component連結的狀況。
如果要編譯,就按下run就可以了,感覺還算容易上手的。
以上就是目前的使用心得,有進一步有趣的東西,我會再補充。

2010年5月2日 星期日

在Mac osx 10.6.3(Snow leopard)中灌TinyOS2.x

好久沒寫有關TinyOS的文章了,最近又要開始動手改code了,
看來不在自己的MBA上灌TinysOS不行啦,
近期之內,應該會寫幾篇有關TinyOS的文章,
也算是對TinyOS社群有所貢獻。
所以廢話不多說,在Mac osx 10.6.3灌TinyOS2.x的安裝步驟如下:

Step 1 安裝之前需要的工具



我的安裝環境是OSX 10.6.3,現在要安裝TinyOS已經變的很簡單了,
只要先行安裝必要的工具,就可以無痛安裝,需要的工具如下:

1. Xcode
由於我本身就已經安裝了Xcode ,所以我不確定如果沒有Xcode,會不會在安裝的過程中出現問題。
下載位置:
http://developer.apple.com/tools/xcode/

2.MacPorts
因為已經有熱心的朋友將TinyOS所需要的軟體發佈在Ports上,所以只要安裝MacPorts,
一些TinyOS必要的軟體像是NesC、AVR GCC,就不用自己手動去抓下來安裝了。
下載位置:
http://www.macports.org/
3.Git
Git為版本控制軟體,因為我希望能下載到TinyOS的程式,
所以需要透過版本控制軟體來下載,其實用CVS也可以下載最新的code回來,
但是,我發現用Git速度快上好幾倍,所以,當然要用Git啦。
您可以使用port安裝Git,不過我自己是到google code上抓git的installer,因為我有搜集dmg的習慣。
下載位置:
http://code.google.com/p/git-osx-installer/

Step 2 安裝NesC、 AVR GCC compiler 和MSP GCC



安裝完基本的工具之後,現在我們要正式開始安裝TinyOS了,
首先,我們必須修改並新增一個Port的來源,並且增修port的設定,方法如下:

cd /Users/user 
git clone git://hinrg.cs.jhu.edu/git/ports.git

到你的家目錄底下,用Git下載Razvan包好的port來源。

接著修改macports的sources.conf,在裡面加入剛才下載回來的檔案位置:
sudo vi /opt/local/etc/macports/sources.conf

加入
#在rsync之前加入以下這行,記得一定要放在rsync之前,不然會發生錯誤,如下所示
file:///Users/hdj/ports
rsync://rsync.macports.org/release/ports/ [default]


設定完port之後,我們可以開始安裝NesC和avr/msp430 tools

sudo port install msp430-binutils-tinyos msp430-gcc-tinyos msp430-libc-tinyos (for MSP430)
sudo port install avr-binutils-tinyos avr-gcc-tinyos avr-libc-tinyos avrdude-tinyos (for AVR)
sudo port install nesc


Step 3 下載TinyOS source code並且安裝相關的程式



這裡我們到家目錄,用Git將最新版的TinyOS下載回來:
cd /Users/user
git clone git://hinrg.cs.jhu.edu/git/tinyos-2.x.git


下載回來之後,我們必需要設定一些環境變數,才能讓TinyOS正確的運行,
這裡通常是最難搞的地方,因為只要有環境變數設定錯誤,TinyOS就無法正常編譯成功。
還好TinyOS官方有提供一個環境設定檔tinyos.sh,但是我覺得並不好用,還是有一些參數沒有設定完整,所以,參考了我之前下載的script,改了一份新的設定檔,加入了一些常用的指令和java的設定,大家可以參考看看。
請記得修改.bashrc,並加入
source ~/Documents/tinyos/tinyos.sh
其中,~/Documents/tinyos/是你下載tinyos.sh的存放位置。

接著將TinyOS的一些Tool安裝起來:
cd $TOSROOT/tools
./Bootstrap
./configure
make
sudo make install 
sudo tos-install-jni 


安裝完所有的tool之後,可以輸入以下指令確認是否有TinyOS的工具可以使用:
motelist

或者也可以檢查一下有沒有什麼設定或是軟體還沒安裝:
tos-check-env


原則上,到這一步,如果環境設定都沒有問題的話,就算是安裝完成了,
有任何的問題,一定是環境設定沒有設定好,就必須檢查有那一個步驟遺漏掉了。

Step 4 安裝 FTDI Drivers


為了要讓motelist可以正常讀取到Mote的資訊,請下載安裝FTDI driver
下載位置:
http://www.ftdichip.com/Drivers/VCP.htm

Step 5 重編java tool



如果需要不需要重編java tool的朋友,這個步驟可以跳過。

由於官方建議使用gcc44來編繹程式,所以我使用port下載,不過安裝gcc44需要很多時間,好幾個小時吧,我是放給他跑,睡一覺起來才安裝好的,安裝指㐴如下:

sudo port install gcc44
sudo port install gcc_select 

gcc_select是用來切換所需要的gcc,可用gcc_select -l察看主機上有灌了什麼版本的GCC,
如果要切換成gcc44,可輸入以下指令:
gcc_select mp-gcc44 

如果要切回原來的gcc42,指令如下:
gcc_select gcc42 


目前我自己測試是沒有需要用到gcc44,因為我沒有重新編譯TinyOS的java tool,
如果有需要重新編譯java tool的朋友,才會需要使用到gcc44




Step 6 試著編譯應用程式



重頭戲來了,讓我們來編譯一個程式看看:
cd $TOSROOT/apps/Blink
make telosb 


如果沒有error,而且看到以下訊息,就表示TinyOS已經安裝成功:

    compiled BlinkAppC to build/telosb/main.exe
            2648 bytes in ROM
              54 bytes in RAM
msp430-objcopy --output-target=ihex build/telosb/main.exe build/telosb/main.ihex
    writing TOS image


恭喜啦,您可以開始編寫TinyOS的程式了~~


疑難雜症



Problem 1 Compile 含有Java的程式

例如,如果在編譯estSerial過程中,出現了以下的錯誤訊息:

hdj@MBA:~/tinyos-2.x/apps/tests/TestSerial$ make telosb
mkdir -p build/telosb
mig java -target=null -I/Users/hdj/Documents/tinyos/tinyos-2.x/tos/lib/T2Hack -DIDENT_APPNAME=\"TestSerialAppC\" -DIDENT_USERNAME=\"hdj\" -DIDENT_HOSTNAME=\"Huang-Ding-jiet\" -DIDENT_USERHASH=0x8527c6dbL -DIDENT_TIMESTAMP=0x4bfc99feL -DIDENT_UIDHASH=0x69b76063L -java-classname=TestSerialMsg TestSerial.h test_serial_msg -o TestSerialMsg.java
cat: java: No such file or directory
mig: fatal: "java", line 1: no SubSystem declaration
warning: option "-target=null" after filename(s) ignored
warning: option "-I/Users/hdj/Documents/tinyos/tinyos-2.x/tos/lib/T2Hack" after filename(s) ignored
warning: option "-DIDENT_APPNAME="TestSerialAppC"" after filename(s) ignored
warning: option "-DIDENT_USERNAME="hdj"" after filename(s) ignored
warning: option "-DIDENT_HOSTNAME="Huang-Ding-jiet"" after filename(s) ignored
warning: option "-DIDENT_USERHASH=0x8527c6dbL" after filename(s) ignored
warning: option "-DIDENT_TIMESTAMP=0x4bfc99feL" after filename(s) ignored
warning: option "-DIDENT_UIDHASH=0x69b76063L" after filename(s) ignored
warning: option "-java-classname=TestSerialMsg" after filename(s) ignored
/usr/bin/mig: line 207: /var/folders/5W/5WdvGkinHMGZ7JuCEC53Pk+++TI/-Tmp-//mig.YPmOow/TestSerial.h.19983.c: No such file or directory
i686-apple-darwin10-gcc-4.2.1: /var/folders/5W/5WdvGkinHMGZ7JuCEC53Pk+++TI/-Tmp-//mig.YPmOow/TestSerial.h.19983.c: No such file or directory
i686-apple-darwin10-gcc-4.2.1: no input files
mig: fatal: "<no name yet>", line -1: no SubSystem declaration
/usr/bin/mig: line 207: /var/folders/5W/5WdvGkinHMGZ7JuCEC53Pk+++TI/-Tmp-//mig.YPmOow/test_serial_msg.19983.c: No such file or directory
i686-apple-darwin10-gcc-4.2.1: /var/folders/5W/5WdvGkinHMGZ7JuCEC53Pk+++TI/-Tmp-//mig.YPmOow/test_serial_msg.19983.c: No such file or directory
i686-apple-darwin10-gcc-4.2.1: no input files
mig: fatal: "<no name yet>", line -1: no SubSystem declaration
warning: option "-o" after filename(s) ignored
/usr/bin/mig: line 207: /var/folders/5W/5WdvGkinHMGZ7JuCEC53Pk+++TI/-Tmp-//mig.YPmOow/TestSerialMsg.java.19983.c: No such file or directory
i686-apple-darwin10-gcc-4.2.1: /var/folders/5W/5WdvGkinHMGZ7JuCEC53Pk+++TI/-Tmp-//mig.YPmOow/TestSerialMsg.java.19983.c: No such file or directory
i686-apple-darwin10-gcc-4.2.1: no input files
mig: fatal: "<no name yet>", line -1: no SubSystem declaration
rmdir: /var/folders/5W/5WdvGkinHMGZ7JuCEC53Pk+++TI/-Tmp-//mig.YPmOow: No such file or directory
javac -target 1.4 -source 1.4 *.java
TestSerial.java:45: cannot find symbol
symbol  : class TestSerialMsg
location: class TestSerial
    this.moteIF.registerListener(new TestSerialMsg(), this);
                                     ^
TestSerial.java:50: cannot find symbol
symbol  : class TestSerialMsg
location: class TestSerial
    TestSerialMsg payload = new TestSerialMsg();
    ^
TestSerial.java:50: cannot find symbol
symbol  : class TestSerialMsg
location: class TestSerial
    TestSerialMsg payload = new TestSerialMsg();
                                ^
TestSerial.java:69: cannot find symbol
symbol  : class TestSerialMsg
location: class TestSerial
    TestSerialMsg msg = (TestSerialMsg)message;
    ^
TestSerial.java:69: cannot find symbol
symbol  : class TestSerialMsg
location: class TestSerial
    TestSerialMsg msg = (TestSerialMsg)message;
                         ^
5 errors
make: *** [TestSerial.class] Error 1


這表示你的mig工具設定有問題,請使用以下指令解決:

export PATH=$TOSROOT/tools/tinyos/ncc/:$PATH
chmod  a+x $TOSROOT/tools/tinyos/ncc/mig

這裡主要是因為mig的權限問題,所以,只要讓mig可執行問題就可以解決。

Problem 2

但是,修改完權限之後,在MAC OSX上還會出現另外一個問題,如下所示:

hdj@MBA:~/tinyos-2.x/apps/tests/TestSerial$ make telosb
mkdir -p build/telosb
mig java -target=null -I/Users/hdj/Documents/tinyos/tinyos-2.x/tos/lib/T2Hack -DIDENT_APPNAME=\"TestSerialAppC\" -DIDENT_USERNAME=\"hdj\" -DIDENT_HOSTNAME=\"Huang-Ding-jiet\" -DIDENT_USERHASH=0x8527c6dbL -DIDENT_TIMESTAMP=0x4bfc9a4fL -DIDENT_UIDHASH=0x1795bab5L -java-classname=TestSerialMsg TestSerial.h test_serial_msg -o TestSerialMsg.java
In file included from /usr/include/string.h:148,
                 from /Users/hdj/Documents/tinyos/tinyos-2.x/tos/system/tos.h:13:
/usr/include/secure/_string.h: In function `__inline_memcpy_chk':
/usr/include/secure/_string.h:58: warning: return makes pointer from integer without a cast
/usr/include/secure/_string.h: In function `__inline_memmove_chk':
/usr/include/secure/_string.h:69: warning: return makes pointer from integer without a cast
/usr/include/secure/_string.h: In function `__inline_memset_chk':
/usr/include/secure/_string.h:80: warning: return makes pointer from integer without a cast
/usr/include/secure/_string.h: In function `__inline_strcpy_chk':
/usr/include/secure/_string.h:91: warning: return makes pointer from integer without a cast
/usr/include/secure/_string.h: In function `__inline_stpcpy_chk':
/usr/include/secure/_string.h:103: warning: return makes pointer from integer without a cast
/usr/include/secure/_string.h: In function `__inline_strncpy_chk':
/usr/include/secure/_string.h:116: warning: return makes pointer from integer without a cast
/usr/include/secure/_string.h: In function `__inline_strcat_chk':
/usr/include/secure/_string.h:127: warning: return makes pointer from integer without a cast
/usr/include/secure/_string.h: In function `__inline_strncat_chk':
/usr/include/secure/_string.h:139: warning: return makes pointer from integer without a cast
In file included from /Users/hdj/Documents/tinyos/tinyos-2.x/tos/system/tos.h:14:
/usr/include/stdlib.h: At top level:
/usr/include/stdlib.h:272: syntax error before `^'
/usr/include/stdlib.h:272: `type name' declared as function returning a function
/usr/include/stdlib.h:274: syntax error before `^'
/usr/include/stdlib.h:274: `type name' declared as function returning a function
/usr/include/stdlib.h:301: syntax error before `^'
/usr/include/stdlib.h:301: `type name' declared as function returning a function
/usr/include/stdlib.h:307: syntax error before `^'
/usr/include/stdlib.h:307: `type name' declared as function returning a function
/usr/include/stdlib.h:313: syntax error before `^'
/usr/include/stdlib.h:313: `type name' declared as function returning a function
/usr/include/stdlib.h:319: syntax error before `^'
/usr/include/stdlib.h:319: `type name' declared as function returning a function
In file included from /Users/hdj/Documents/tinyos/tinyos-2.x/tos/system/SchedulerBasicP.nc:41,
                 from /Users/hdj/Documents/tinyos/tinyos-2.x/tos/system/TinySchedulerC.nc:40:
/Users/hdj/Documents/tinyos/tinyos-2.x/tos/platforms/null/hardware.h: In function `__nesc_ntoh_afloat':
/Users/hdj/Documents/tinyos/tinyos-2.x/tos/platforms/null/hardware.h:22: warning: pointer/integer type mismatch in conditional expression
/Users/hdj/Documents/tinyos/tinyos-2.x/tos/platforms/null/hardware.h: In function `__nesc_hton_afloat':
/Users/hdj/Documents/tinyos/tinyos-2.x/tos/platforms/null/hardware.h:27: warning: pointer/integer type mismatch in conditional expression
In file included from /Users/hdj/Documents/tinyos/tinyos-2.x/tos/system/TinySchedulerC.nc:40:
In component `SchedulerBasicP':
/Users/hdj/Documents/tinyos/tinyos-2.x/tos/system/SchedulerBasicP.nc: In function `Scheduler.init':
/Users/hdj/Documents/tinyos/tinyos-2.x/tos/system/SchedulerBasicP.nc:117: warning: pointer/integer type mismatch in conditional expression
failed to parse message file TestSerial.h
make: *** [TestSerialMsg.java] Error 1


這個問題的解法有兩種:

第一種解法--
這是因為Makefile的問題,請將你的Makefile中,
編譯java欄位裡的target值,從null改為$(PLATFORM),
如下所示:

 mig java -target=$(PLATFORM) $(CFLAGS) -java-classname=TestSerialMsg TestSerial.h test_serial_msg -o $@


這樣就能夠正常compile了。
參考來源:
http://old.nabble.com/Re:-Build-errors-for-TestSerial----resolved-td26123725.html

第二種解法--
剛才我們有提到是Makefile的問題,
但是追根究底,主要還是因為Snow leopard上的gcc42對null語法的解讀錯誤,
所以,如果不想改Makefile,而且在之前Step 5有安裝gcc_select的朋友,
可以使用以下指令,在每次compile java程式之前,先將預設的gcc版本改為gcc44。

sudo gcc_select mp-gcc44 



後話



感覺在ubuntu上安裝TinyOS2比在OSX上安裝方便而且快速,
果然有編譯的執行檔還是比較方便,可惜MAC上還沒有人將TinyOS包成DMG檔,
有空再來研究看看好了。
此外,本篇文件主要是參考這篇文章,如有需要可以前往參考。

參考來源:
http://research-machine.blogspot.com/2010/01/how-to-install-tinyos-2-on-macosx-106.html
http://docs.tinyos.net/index.php/Installing_from_CVS/GIT
http://www.mail-archive.com/tinyos-help@millennium.berkeley.edu/msg31149.html
http://www.mobilab.unina.it/TinyOSMAC.htm

2009年6月23日 星期二

Crossbow TelosB 硬體測試 by using Oscilloscope

很久沒有紀錄和TinyOS相關的文章了
上個星期收到了幾顆Crossbow的mote
所以一時手癢拿來跑Oscilloscope的範例程式
順便復習一下TinyOS
不然人老了,很容易忘東忘西的

首先要跑Oscilloscope
可以先到官網的wiki看一下說明
http://docs.tinyos.net/index.php/Sensing

底下為大家一一介紹燒錄和觀看結果的步驟:

Step1 燒錄程式
要燒錄的程式有兩種:
1.BaseStation
2.Oscilloscope
第一份BaseStation主要是將收到的封包,透過serialforwarder傳回PC端
第二份Oscilloscope是將mote上收集的sensing data 傳送出去

由此可見,至少要二個mote才能跑起這個範例
所以我準備了兩個mote
在第一個mote上燒BaseStation


cd /opt/tinyos-2.1.0/BaseStation/
make telosb install,1 bsl,/dev/ttyUSB0


接著在第二個mote上燒Oscilloscope



cd /opt/tinyos-2.1.0/Oscilloscope/
make telosb install,2 bsl,/dev/ttyUSB1

在install之後的2是用來設定mote id用的,單純為了待會辨視之用

Step2 顯示資料結果
我們透過內建的java程式,觀測感測的資料


export MOTECOM=serial@/dev/ttyUSB0:telosb
cd /opt/tinyos-2.1.0/Oscilloscope/java/
./run


這樣就可以看到感測資料的結果了

2008年6月3日 星期二

[賀] TinyOS 教學文件被收入TinyOS Docs

一陣子沒寫跟TinyOS相關的文章啦
今天隔壁實驗室的學弟跟來跟我說
"你的TinyOS安裝教學被人放在TinyOS的docs啦"
聽到這個消息,我嚇了一大跳
馬上到
http://docs.tinyos.net/index.php/Main_Page#Installing_TinyOS
看看這個小道消息是不是真的

果然這個頁面裡真的有個chinese version
但是點開來居然是簡體的
http://hi.baidu.com/vvfang/blog/item/e2dfa4126bd9adcdc3fd789c.html
不知是該開心還是該憂心
開心的是自己的文章可以被人家認可
憂心的是自己的文章看的人不多
反而是被人翻成簡體中文才變的比較多人看
大概是台灣做WSN人太少了
所以我自己寫的文章沒什麼人看

或許我該感謝weiwei(轉錄我文章的朋友)
他讓我的文章受到大家的重視
也讓我知道我的文章還是有人在看..哈哈
(有點沒動力去更新ubuntu 8.04上灌tinyos了..囧)

2007年10月20日 星期六

Octopus使用心得

Octopus為TinyOS2.x上的圖形化控制介面
它比MViz功能還要多
可以把傳回來的資料記錄下來
存成csv檔以便之後觀察
官方網址:
http://csserver.ucd.ie/~rjurdak/Octopus.htm

底下稍微簡述使用的心得

首先至官網下載程式並解開
$ wget http://csserver.ucd.ie/~rjurdak/Octopus%20Code.zip
$ unzip Octopus\ Code.zip
接著將解開的檔案改名並移至便於管理的地方
$ mv Octopus\ Code octopus
$ mv octopus /opt/
完成下載和解壓縮後
開始正始燒錄的工作

==燒錄程式==
進入octopus的motes資料夾中
輸入以下指令將程式編譯並燒至mote中
$ cd /opt/octopus/motes/
$ make telosb
$ make telosb reinstall,0 bsl,/ttyUSB0
$ make telosb reinstall,1 bsl,/ttyUSB1
.....
這樣就燒錄完成了

==讀取資料==
在Octopus上讀取資料和Surge類似
可以參考
http://hdj-berkeley.blogspot.com/2007/10/surge-on-tinyos1x.html

這裡我只使用serialforwader 的方法

首先先設定好SerialForwarder:
$ java net.tinyos.sf.SerialForwarder -comm serial@/dev/ttyUSB0:telos -no-gui
接著再開另一個commend line執行Octopus的java程式
如果是第一次使用Octopus的java程式
請記得至Octopus的java資料夾下執行make
$ cd /opt/octopus/java/
$ make
而且因為SerialForwarder 在TinyOS2.x上預設的port為9002
所以我們將環境變數改成
$ export MOTECOM=sf@localhost:9002
之後再執行Octopus主程式
$ java OctopusGui
就會看到Octopus的GUI畫面了

Octopus的GUI程式,其中含有10個mote

Octopus的Network chart

參考來源:
http://csserver.ucd.ie/~rjurdak/User%20Documentation.pdf

2007年10月4日 星期四

MViz

MViz 為Tinyos 2.x上的圖型化介面的工具
有點像1.x上的Surge
不過根據個人使用的結果
並沒有Surge好用
而且功能也滿陽春的
如果要我選擇的話
我會用另一款圖型化介面 Octopus
而且Octopus才剛release出來
感覺上比較會有人維護

底下附上一張MViz run起來的圖型


















CVS 來源:
http://www.tinyos.net/dist-2.0.0/tinyos-2.0.0/apps/MViz/

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

2007年9月28日 星期五

SerialForwarder without GUI

SerialForwarder 主要是用來將BaseStation收集到的資料傳送出去
收集的方式可以透過serial port或是從網路收集
一般在使用SerialForwarder的時候都會有一個java GUI跑出來
如果在command line的模式下直接執行的話
就會出現error

必須加上-no-gui參數
SerialForwarder才能在command line下正常執行
例如:
java net.tinyos.sf.SerialForwarder -no-gui

java net.tinyos.sf.SerialForwarder -comm serial@/dev/ttyUSB11:57600 -no-gui
參考網址:
http://stevenylai.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=amonth%3D4%26ayear%3D2007

2007年9月20日 星期四

在Ubuntu 中灌 TinyOS2.x 和TinyOS1.x

Step1 安裝Ubuntu 7.04
安裝Ubuntu的過程約半個小時~一個小時
可以至
http://www.ubuntu.com/getubuntu/download
下載最新live CD並燒錄至光碟
詳細安裝步驟省略

Step2 安裝TinyOS2.x
安裝完Ubuntu之後
先裝TinyOS2.x
因為目前己經有人為Ubuntu打包好TinyOS2.x
只要先修改/etc/apt/sources.list
$ sudo gedit /etc/apt/sources.list
並且加入下列檔案來源至sources.list中
deb http://tinyos.stanford.edu/tinyos/dists/ubuntu feisty main
修改完sources.list,請儲存並關閉視窗
接著在command line中輸入以下指令安裝TinyOS2.x
$ sudo apt-get update
$ sudo apt-get install cvs subversion autoconf automake1.9 python-dev
$ sudo apt-get install g++ g++-3.4 gperf swig sun-java5-jdk graphviz alien fakeroot
$ sudo apt-get install tinyos tinyos-msp430 tinyos-avr
如果在安裝TinyOS2.x的時候有遇到任何詢問安裝相關程式的畫面時
請按"Y"或是"確認"完成安裝
在安裝Java時,可能會花費一段時間
而且安裝過程中可能會出現藍色畫面告知一些使用權限的資訊
直接按下"tab"到"確認"完成安裝

安裝完TinyOS2.x之後
可以輸入
$ motelist
測試是否能列出mote的基本資料
如果沒有將mote連接到電腦上
會出現"No devices found."

但是因為Ubuntu 7.04 USB driver 的問題
導致tmote 插上NB之後,居然找不到硬體
目前可以用以下方法解法
$ sudo apt-get remove brltty
$ sudo aptitude reinstall udev
執行完後重開電腦就可以了,
不過我沒有reboot,只是把mote重新plugin一次就可以找到了

Step3 安裝TinyOS1.x
安裝完TinyOS2.x
接著使用CVS安裝TinyOS1.x
如果系統中還沒有安裝CVS
請記得安裝
然後按照下列步驟安裝TinyOS1.x
$ cvs -d:pserver:anonymous@tinyos.cvs.sourceforge.net:/cvsroot/tinyos login
$ cvs -z3 -d:pserver:anonymous@tinyos.cvs.sourceforge.net:/cvsroot/tinyos co tinyos-1.x
$ sudo mv tinyos-1.x /opt
如果CVS詢問你的密碼時
直接按下Enter鍵跳過
而且下載TinyOS1.x大約需要半個小時
請耐心等候

Step4 環境設定
環境的設定非常重要
尤其是TinyOS和JAVA安裝的路徑一定要設定正確才行
還 有高手已寫好方便的設定檔供人下載
請至這裡下載設定檔並儲存在家目錄~/底下
$ cd ~/
$ wget http://www.5secondfuse.com/tinyos/.bash_tinyos
且在 ~/.bashrc 中加入
if [ -f ~/.bash_tinyos ]; then
    . ~/.bash_tinyos
fi
改完 ~/.bashrc 之後就可以在TinyOS1.x和TinyOS2.x切換
請記得將終端機重開才能看到正常切換
如下所示:
$ tos1
Setting up for TinyOS 1.x
...使用TinyOS1.x
$ tos2
Setting up for TinyOS 2.x
...使用TinyOS2.x
主要參考網址:
http://www.5secondfuse.com/tinyos/install.html
http://www.tinyos.net/scoop/story/2007/8/15/234856/990


Step5 安裝Javax.com
若要讓mote能和電腦溝通
也就是傳資料回電腦
就一定要使用Javax.com
不過預設是沒有安裝在電腦中的
請先至
http://javashoplm.sun.com/ECom/docs/Welcome.jsp
下載javax_comm-2_0_3-solsparc.tar.Z 並安裝

$ tar xvzf javax_comm-2_0_3-solsparc.tar.Z
$ sudo cp commapi/comm.jar $JDKROOT/jre/lib/ext/
$ sudo cp commapi/javax.comm.properties $JDKROOT/jre/lib/
$ sudo cp commapi/libSolarisSerialParallel.so /usr/lib

並修改$JDKROOT/jre/lib/javax.comm.properties
將最後一行改為
Driver=gnu.io.RXTXCommDriver
(請用vi 或 pico處理, gedit無法處理)

參考來源:
http://www.comnets.uni-bremen.de/typo3site/index.php?id=48


Step6 解決Java Serial Communications在TinyOS1.x的問題
在TinyOS1.x中需要安裝TOSComm
請先切換至TinyOS1.x的環境
$ tos1
再修改$TOSROOT/beta/TOSComm/comm/Makefile
加入
JAVADIR=/usr/lib/jvm/java-1.5.0-sun
接著執行
$ alias g++=g++-3.4; cd $TOSROOT/beta/TOSComm; sudo make
Step7 為TinyOS1.x安裝Java 工具
到/opt/tinos-1.x/tools/java底下執行
$ make
P.S
如果執行java的GUI程式出現空白畫面的情行
可能是因為java和compiz相衝
請修改環境變數
$ export AWT_TOOLKIT=”MToolkit”
如果在執行java程式遇到下列狀況
$ java net.tinyos.tools.Listen
getenv JNI library not found. Env.getenv will not work
.....
請執行下列指令,將libgetenv.so複製到正確的位置
$ sudo cp $TOSROOT/tools/java/jni/libgetenv.so $JDKROOT/jre/lib/i386/
$ cd $TOSROOT/tools/java/; sudo make
應該就可以解決了

2007年9月15日 星期六

A Network Architecture for Wireless Sensor Networks

這個是開發TinyOS的team
最近去旁聽他們meeting
都聽不太懂...囧

http://snap.cs.berkeley.edu/

讓你的VI看得懂NesC

VI能辨認很多種程式語言
只要去官方下載 *.vim
就可以讓你的VI看得懂新的程式語言

當然要開發TinyOS的時候
一定會用到NesC
可以先到
http://www.vim.org/scripts/script.php?script_id=899
下載nc.vim
並將這個nc.vim移到
~/.vim/ftdetect/

這個資料夾之下
記得將VI的 syntax打開
:syntax on

這樣VI就可以認得NesC啦

參考網址:
http://vimcdoc.sourceforge.net/doc/filetype.html#new-filetype

http://vimcdoc.sourceforge.net/doc/syntax.html

2007年8月25日 星期六

Motelab

Berkeley一位資深的學長推薦我們這套軟體
如果之後真的有興趣將所有WSN網頁化的話
可以參考這個計劃

MoteLab provides a public, permanent testbed for development and testing of sensor network applications via an intuitive web-based interface.
http://motelab.eecs.harvard.edu/index.php
Related Posts Plugin for WordPress, Blogger...