Wifi小車之 – 無線路由串口調試篇

由於苦苦尋找愛果論壇的第一版程序都沒有結果,不得不開始走其他的路線。經過多番的搜索,找到了以下兩個可替代的方案。

1. 一位國外牛人做到wifi小車

http://www.jbprojects.net/projects/wifirobot/

文章提供了一個ipk文件,其作用就是將socket接收到的指令,通過串口轉發出去,不過由於這篇文章是2008年寫的,當時的openWRT跟現在的差很遠,程序也不能安裝了,但他在網站上共享了他的c代碼,還有openWRT平臺程序開發的鏈接,實在不行就得自己搭個開放環境編譯了。不過我覺得它的小車有點浪費資源,他的攝像頭是“網絡攝像頭”,接上網線就可以看視頻,其實裏面也是一個Linux系統,有一個250MHz的CPU,64M的內存,而路由也是一個Linux系統。。。

2. 國內一位牛人liuhuiviking的方案ser2net

其實應該和上面的方案差不多,不過ser2net是一個通用的socket轉串口程序,就省去了編譯的麻煩。

 

由於ser2net簡單可用,所以就選擇了它,實際使用前當然得先測試一下啦。

由於之前用TTL刷路由,路由現在就用串口連着電腦,超級終端應該看到路由串口發出的信息,然後我們用putty登錄路由,執行以下命令,超級終端應該可以看到相應的測試信息。

echo “test” > /dev/ttyS0

這樣我們就確定了ttySo就是路由的串口。

然後我們就要按裝ser2net

 

opkg update

opkg install ser2net

看看它的配置文件,

vi /etc/ser2net.conf

2001:raw:600:/dev/ttyS0:9600 NONE 1STOPBIT 8DATABITS XONXOFF LOCAL -RTSCTS

因爲我刷路由的時候,波特率是115200,這裏我改爲115200並保存。

然後就是啓動ser2net

ser2net -c /etc/ser2net.conf

然後就要測試一下向路由發送socket信息了。

 

liuhuiviking提供的源碼是c#寫的,本來我c#也學過,做過一些小軟件,但現在的電腦沒有.net開發環境,現在主要搞Java,於是就用Java寫了一個測試程序,其實也是網上搜索來的例程,呵呵。啓動程序啊,在命令行輸入字符串,在超級終端應該能看到相應的字符串,這樣我們就把這條路打通了。

 

import java.io.*;

import java.net.*;

 

public class SocketClientTest {

Socket socket;

 

BufferedReader in;

 

PrintWriter out;

 

public SocketClientTest() {

try {

Socket socket = new Socket(“192.168.1.155″, 2001);

 

// 向本機的4700端口發出客戶請求

 

BufferedReader sin = new BufferedReader(new InputStreamReader(

System.in));

 

// 由系統標準輸入設備構造BufferedReader對象

 

PrintWriter os = new PrintWriter(socket.getOutputStream());

 

// 由Socket對象得到輸出流,並構造PrintWriter對象

 

BufferedReader is = new BufferedReader(new InputStreamReader(socket

.getInputStream()));

 

// 由Socket對象得到輸入流,並構造相應的BufferedReader對象

 

String readline;

 

readline = sin.readLine(); // 從系統標準輸入讀入一字符串

 

while (!readline.equals(“bye”)) {

 

// 若從標準輸入讀入的字符串爲 “bye”則停止循環

 

os.println(readline);

 

// 將從系統標準輸入讀入的字符串輸出到Server

 

os.flush();

 

// 刷新輸出流,使Server馬上收到該字符串

 

System.out.println(“Client:” + readline);

 

// 在系統標準輸出上打印讀入的字符串

 

//System.out.println(“Server:” + is.readLine());

 

// 從Server讀入一字符串,並打印到標準輸出上

 

readline = sin.readLine(); // 從系統標準輸入讀入一字符串

 

} // 繼續循環

 

os.close(); // 關閉Socket輸出流

 

is.close(); // 關閉Socket輸入流

 

socket.close(); // 關閉Socket

 

} catch (IOException e) {

}

}

 

public static void main(String[] args) {

new SocketClientTest();

}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章