1

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

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

我一直在尝试寻找一些做类似事情的教程(不幸的是,上面视频中给出的教程的链接已损坏),我找到了一些,但我在如何发送命令的步骤上遇到了麻烦Android 手机到 Arduino。许多教程展示了 Android 手机和 Arduino 如何通过蓝牙或使用两个 Android 设备进行通信,但我正在寻找通过Wi-Fi本地网络进行的通信。

例如,我在一辆4x4 遥控车上发现了这个很好的教程,这个人很友善地提供了他的 Android 应用程序的源代码。但是,我没有在代码中看到实际通信发生的位置(即发送命令的位置)。

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

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

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

4

1 回答 1

1

我用UDP做了类似的事情。TCP 将需要稍微不同的实现,但希望这能很好地推动正确的方向。

看看我的Android代码在这里

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();
        }

}
于 2012-10-01T21:05:30.010 回答