由于苦苦寻找爱果论坛的第一版程序都没有结果,不得不开始走其他的路线。经过多番的搜索,找到了以下两个可替代的方案。
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();
}
}