如何使用Android设备控制Arduino和WiFly屏蔽

时间:2012-10-01 20:44:53

标签: android tcp arduino wireless

我正在尝试使用我的Android手机控制Arduino Uno R3板+ WiFly RN-131C shield(即类似于显示here的内容,尽管我认为在这种情况下,Arduino通过以太网屏蔽连接到网络。

Arduino可以通过WiFly屏蔽连接到我的本地网络,Android手机也可以连接到同一网络。

我一直在尝试寻找一些类似的教程(不幸的是上面视频中给出的教程的链接已经破了),我找到了一些,但是我遇到了如何发送的步骤有问题从Android手机到Arduino的命令。许多教程展示了Android手机和Arduino如何通过蓝牙或using two Android devices进行通信,但我正在寻找通过Wi-Fi本地网络进行通信。

例如,我在4x4 Remote Control car上找到了这个很好的教程,这个家伙很友善地提供了the source code for his Android application。但是,我没有在代码中看到实际通信发生的地方(即发送命令的地方)。

根据我的阅读,我必须通过TCP连接创建一个套接字,但我不知道在Android中如何完成...: - / 我是Arduino的新手,但我对Android编程有一些经验..除了使用网络套接字和TCP!

关于Android手机如何通过TCP与Arduino进行通信的具体示例代码是什么?

PS:另外一个很好的教程可以在 Experimenting with Android and Arduino 中找到类似的东西,但是我不知道Python并且不能完全按照说明进行操作:(

1 个答案:

答案 0 :(得分:1)

我用UDP做了类似的事情。 TCP需要稍微不同的实现,但希望这为正确的方向提供了良好的推动力。

查看我的Android代码Here

UdpClient.java:

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

import android.util.Log;

public class UdpClient {
         String messageStr;
         DatagramSocket s;;
         int server_port;
         InetAddress local;
         int msg_length;
         byte[] message;

        public UdpClient (String ipAddress, int port){
                  server_port = port;
                  try {
                        local = InetAddress.getByName(ipAddress);
                        s = new DatagramSocket();
                } catch (Exception e) {
                        e.printStackTrace();
                        Log.d("Powerwheelino",e.getStackTrace() + "error");
//                      DatagramPacket rPacket = new DatagramPacket()
//                      s.receive(rPacket);

                }               
        }

        public boolean sendData(byte drive, byte steering){
                byte drvByte = (byte) (drive & 0xFF);
                byte steerByte = (byte) (steering & 0xFF);
                message = new byte[2];
                message[0] = drvByte;
                message[1] = steerByte;
                msg_length = message.length;
                //message = messageStr.getBytes();
                try {   
                     DatagramPacket p = new DatagramPacket(message, msg_length,local,server_port);
                     s.send(p);
                } catch (Exception e) {
                        Log.d("Powerwheelino", e.getStackTrace() +"ERROR ");
                        e.printStackTrace();
                        return false;
                }
                return true;
        }

        public boolean isConnected (){
                return s.isConnected();
        }

}