我正在尝试使用我的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并且不能完全按照说明进行操作:(
答案 0 :(得分:1)
我用UDP做了类似的事情。 TCP需要稍微不同的实现,但希望这为正确的方向提供了良好的推动力。
查看我的Android代码Here
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();
}
}