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

简介:

恰好以前购买的一个PDAWifi功能,所以与其用PC通过Zigbee控制智能小车,不如用PDA来控制,这样更为方便,不过由于目前.NET MF开发板不直接支持Wifi功能,所以我们也只好间接控制了,也就是PDA控制PCPC通过Zigbee控制智能小车。

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

PDA ===> WifiTCP/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 });

}

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

 

完成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以上

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

本文源码2http://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

【低价开发板】http://item.taobao.com/item.htm?id=7117999726









本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/414275,如需转载请自行联系原作者

相关文章
|
3月前
|
芯片
毕业设计|基于stm32单片机的app视频遥控抽水灭火小车设计
毕业设计|基于stm32单片机的app视频遥控抽水灭火小车设计
|
12月前
STM32智能小车 0基础教学(驱动小车电机)
STM32智能小车 0基础教学(驱动小车电机)
276 0
|
传感器 IDE Linux
基于STM32设计的遥控小车(手机APP+GPS+温湿度+ESP8266)
基于STM32设计的遥控小车(手机APP+GPS+温湿度+ESP8266)
835 0
基于STM32设计的遥控小车(手机APP+GPS+温湿度+ESP8266)
|
安全
.Net MF V4.0开源前的代码整理
已经有好长一段时间没有更新博客了,一是去美国总部和台湾出差用了不少时间,二是做.Net MF代码整理又花了近一个月的时间。不过令人欣慰的是,目前.Net MF V4.0的相关代码整理已经告一段落,就等着下一步的开源了
628 0
|
内存技术
【玩转.Net MF – 01】Flash远程读写
目前在PC远程访问设备Flash,也就是部署TinyCLR和下载应用程序
537 0
|
内存技术
【玩转.Net MF – 02】让PC成为MF的鼠标键盘
通过扩展我以前为.Net MF开发的WinForm库(参见我以前的文章《开源System.Windows.Forms库,让.Net Micro Framework界面开发和上位机一样简单》),增加一个输入代理层,就可以实现虚拟鼠标和键盘输入。
562 0
|
网络协议
【玩转.Net MF – 03】远程文件查看器
做过WinCE或Windows Mobile开发的人都知道,VS2008开发工具提供了些远程工具,诸如远程文件查看器、远程注册表编辑器、远程堆查看器和远程放大等等。受此启发,所以才有了MF的远程文件查看器。
605 0
【玩转.Net MF – 04】远程屏幕截图
实现远程屏幕截图的思路很简单,就是直接获取设备的显存数据,由PC再现画面。由于我们已经实现了Custom信道,所以我们在原有程序基础上,增添一个Custom_Command_Screenshots命令,就可以完成数据的获取。
473 0
|
芯片 物联网 内存技术
WG7310(WLAN+Bluetooth+FM)芯片在.Net MF中的应用
WG7310芯片是Ti推出的一款芯片,集成了WLAN、Bluetooth、FM等功能(最近又推出了四合一的芯片,把GPS功能也集成了进去),由于以前在.Net MF上的一些工作是基于Ti DM335开发板上的,所以开发.Net MF系统的WiFi功能就选用了WG7310芯片。
699 0
|
芯片
免费发放firmwave,打造史上最低价.Net MF开发板
很久以前就曾多方位思考限制.Net Micro Framework发展的原因是什么?在物联网和Cortex-M3大行其道的今天,应该有更大的发展空间才对,为什么现在还是关注者甚少?我想主要原因有三,一、源码代码是否开源;二、是否有低价开发板;三、TinyCLR是否够小。
738 0