天天看點

【STM32 .Net MF開發闆學習-17】Wifi遙控智能小車

恰好以前購買的一個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) ===> 智能小車

我們先開發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 });

}

編譯運作後的效果圖如下:

【STM32 .Net MF開發闆學習-17】Wifi遙控智能小車

    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];

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

                        case 50:

                            serial.Write("2");

                        case 51:

                            serial.Write("3");

                            serial.DiscardInBuffer();

                        case 52:

                            serial.Write("4");

                    }

            Thread.Sleep(100);

 }

運作PC程式,建好Zigbee通道,我們就可以用PDA來控制智能小車了。

相關控制視訊如下:

<a href="http://video.sina.com.cn/v/b/40292055-1804832611.html">http://video.sina.com.cn/v/b/40292055-1804832611.html</a>

(1)、小車底盤

(2)、四路直流電機驅動器

<a href="http://item.taobao.com/item.htm?id=7218717808">http://item.taobao.com/item.htm?id=7218717808</a>

(3)、.NET Micro Framework開發闆

   注:需要紅牛開發闆固件在 V1.0.0以上

繼續閱讀