开发者社区> KB小秘书> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

【STM32 .Net MF开发板学习-17】Wifi遥控智能小车

简介: 对我们开发者来说,Wifi和普通的网线接口一样,都是Socket编程。我们只需用在PDA上构建一个简单的TCP Client端,在PC构建一个TCP Server端即可,PDA发送相关指令,PC接收后通过Zigbee转发给智能小车。
+关注继续查看

恰好以前购买的一个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控制智能小车,在我的上篇博文《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 });

}

编译运行后的效果图如下:
image.png

 

完成PDA上的编程,我们改造一下《Zigbee遥控智能小车》中提到的PC Zigbee通信程序,我们把相关TCP服务代码加入其中,相关代码如下:

    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来控制智能小车了。

相关控制视频如下:

http://video.sina.com.cn/v/b/40292055-1804832611.html

(1)、小车底盘

 http://item.taobao.com/item.htm?id=7218838776

(2)、四路直流电机驱动器

http://item.taobao.com/item.htm?id=7218717808

(3)、.NET Micro Framework开发板

 http://item.taobao.com/item.htm?id=7117999726

   注:需要红牛开发板固件在 V1.0.0以上

本文源码1:http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/PCZigbee_Socket.rar

本文源码2:http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/PDASocket_wifi.rar

MF快速参考: .NET Micro Framework 快速入门

MF中文讨论组:http://space.cnblogs.com/group/MFSoft/

微软官方论坛:MSDN微软中文技术论坛(.NET Micro Framework)

开发板简明手册:http://blog.sina.com.cn/s/blog_6b938f630100kh0k.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【STM32 .Net MF开发板学习-18】GPRS遥控智能小车
有了Wifi间接控制智能小车的经验,很自然的想到,也可以通过GPRS远程遥控智能小车,因为从通信原理上看,二者其实没有什么本质的不同,都是基于Socket的TCP通信
573 0
STM32 .Net MF开发板学习-16】Zigbee遥控智能小车
Zigbee技术目前在物联网领域和RFID一样,受关注度非常高。日前中科院上海微系统与信息技术研究所、无锡物联网产业研究院等传感器网络标准工作组成员单位联合发布了名为VW628、WSNS1_SCBR的两款中国自主知识产权的无线传感网SoC芯片,其中WSNS1_SCBR为中国首款符合IEEE802.1
627 0
【STM32 .Net MF开发板学习-21】蓝牙遥控智能小车(PC模式)
上篇文章我们用手机上的蓝牙去控制智能小车,这次我们直接用笔记本上的蓝牙模块来控制小车,这样利用PC更为强大的运算能力,就可以扩展出更多有意思的功能来。
428 0
【STM32 .Net MF开发板学习-10】SPI测试之触摸屏坐标获取
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(用于单向传输时,也就是半双工方式)
552 0
【STM32 .Net MF开发板学习-20】蓝牙遥控智能小车(手机模式)
无论是用WIfi还是用GPRS遥控小车,目前都离不了PC这个中转站,并且PC还得借助Zigbee通道和小车通信,这就大大地增加了此遥控平台的构建代价。
695 0
【STM32 .Net MF开发板学习-21】蓝牙遥控智能小车(PC模式)
上篇文章我们用手机上的蓝牙去控制智能小车,这次我们直接用笔记本上的蓝牙模块来控制小车,这样利用PC更为强大的运算能力,就可以扩展出更多有意思的功能来。
507 0
【STM32 .Net MF开发板学习-13】用PWM驱动智能小车
这段时间一直忙着开发基于.NET Micro Framwork系统的远程医疗系统(参见:http://space.cnblogs.com/group/topic/41835/),所以隔了近一个礼拜的时间,才有精力继续研究PWM驱动智能小车的问题。
576 0
【STM32 .Net MF开发板学习-10】SPI测试之触摸屏坐标获取
  【低价开发板】http://item.taobao.com/item.htm?id=7117999726    源码下载:http://www.
763 0
+关注
文章
问答
来源圈子
更多
阿里云最有价值专家,简称 MVP(Most Valuable Professional),是专注于帮助他人充分了解和使用阿里云技术的意见领袖阿里云 MVP 奖项为我们提供了这样一个机会,向杰出的意见领袖表示感谢,更希望通过 MVP 将开发者的声音反映到我们的技术路线图上。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载