Wifi小车之 – 无线路由串口调试篇

来源:互联网 发布:mac flash卡 编辑:程序博客网 时间:2024/04/30 11:42

由于苦苦寻找爱果论坛的第一版程序都没有结果,不得不开始走其他的路线。经过多番的搜索,找到了以下两个可替代的方案。

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();

}

}

0 0