本文共 2563 字,大约阅读时间需要 8 分钟。
恰好以前购买的一个PDA含Wifi功能,所以与其用PC通过Zigbee控制智能小车,不如用PDA来控制,这样更为方便,不过由于目前.NET MF开发板不直接支持Wifi功能,所以我们也只好间接控制了,也就是PDA控制PC,PC通过Zigbee控制智能小车。
对我们开发者来说,Wifi和普通的网线接口一样,都是Socket编程。我们只需用在PDA上构建一个简单的TCP Client端,在PC构建一个TCP Server端即可,PDA发送相关指令,PC接收后通过Zigbee转发给智能小车。
PDA ===> Wifi(TCP/IP) ===> PC ===> Zigbee(串口232/TTL) ===> 智能小车
PC通过Zigbee控制智能小车,在我的上篇博文《
我们先开发PDA上的程序(操作系统Windows Mobile 5.0),开发语言我们选择C#,相关代码如下:
public frmMain()
{
InitializeComponent();
Connect("192.168.1.2", 7722);
}
public void Connect(string server,int port)
{
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
if (ipEndPoint != null) sock.Connect(GetEndPoint(server, port));
}
private void btnForward_Click(object sender, EventArgs e)
{
if (sock != null) sock.Send(new byte[] {48});
}
private void btnLeft_Click(object sender, EventArgs e)
{
if (sock != null) sock.Send(new byte[] { 49 });
}
private void btnRight_Click(object sender, EventArgs e)
{
if (sock != null) sock.Send(new byte[] { 50 });
}
private void btnBack_Click(object sender, EventArgs e)
{
if (sock != null) sock.Send(new byte[] { 51 });
}
private void btnStop_Click(object sender, EventArgs e)
{
if (sock != null) sock.Send(new byte[] { 52 });
}
编译运行后的效果图如下:
完成PDA上的编程,我们改造一下《
listener = new TcpListener(IPAddress.Parse(ip),7722);
listener.Start();
Thread thread = new Thread(new ThreadStart(StartSocketListen));
thread.IsBackground = true;
thread.Start();
private void StartSocketListen()
{
while (true)
{
try
{
//当接收到一个客户端请求时,确认与客户端的连接
if (listener.Pending())
{
socket = listener.AcceptSocket();
//开辟线程(启动相关通信服务)
Thread threadServer = new Thread(new ThreadStart(ServiceRun));
threadServer.IsBackground = true;
threadServer.Start();
}
}
catch //(Exception ex)
{
socket = null;
}
Thread.Sleep(200);
}
}
private void ServiceRun()
{
//接收数据并存入buff数组中
byte[] buff = new byte[1024];
while (true)
{
if (socket != null)
{
if (socket.Available > 0)
{
//接收数据
socket.Receive(buff, socket.Available, SocketFlags.None);
switch (buff[0])
{
case 48:
serial.Write("0");
serial.DiscardInBuffer();
break;
case 49:
serial.Write("1");
serial.DiscardInBuffer();
break;
case 50:
serial.Write("2");
serial.DiscardInBuffer();
break;
case 51:
serial.Write("3");
serial.DiscardInBuffer();
break;
case 52:
serial.Write("4");
serial.DiscardInBuffer();
break;
}
}
}
Thread.Sleep(100);
}
}
运行PC程序,建好Zigbee通道,我们就可以用PDA来控制智能小车了。
相关控制视频如下:
(1)、小车底盘
(2)、四路直流电机驱动器
(3)、.NET Micro Framework开发板
注:需要红牛开发板固件在 V1.0.0以上
本文源码1:
本文源码2:
MF快速参考:
MF中文讨论组:
微软官方论坛:
开发板简明手册:
【低价开发板】
本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/414275,如需转载请自行联系原作者