由於苦苦尋找愛果論壇的第一版程序都沒有結果,不得不開始走其他的路線。經過多番的搜索,找到了以下兩個可替代的方案。
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();
}
}