1

私はAndroidフォンを使用してArduinoUnoR3ボード+ WiFlyRN-131Cシールド制御しようとしています(つまり、ここに示されているものと似ていますが、その場合、Arduinoはイーサネットシールド)。

ArduinoはWiFlyシールドを介してローカルネットワークに接続でき、Androidフォンも同じネットワークに接続されています。

私は似たようなことをするチュートリアルを探していました(残念ながら上のビデオで与えられたチュートリアルのリンクが壊れています)、そして私はいくつかを見つけました、しかし私はからのコマンドを送る方法のステップで問題を抱えていますArduinoへのAndroid携帯。多くのチュートリアルでは、AndroidフォンとArduinoがBluetoothまたは2つのAndroidデバイスを使用して通信する方法を示していますが、私はWi-Fiローカルネットワークを介した通信を探しています。

たとえば、私はこれが4x4リモートコントロールカーで指導可能であることに気づきました、そしてその男は彼のAndroidアプリケーションのソースコードを提供するのに十分親切でした。ただし、実際の通信が行われる場所(つまり、コマンドが送信される場所)はコードに表示されません。

私が読んだことから、TCP接続を介してソケットを作成する必要がありますが、Androidでそれがどのように行われるのかわかりません...:-/ Arduinoは初めてですが、Androidプログラミングの経験があります。 。WebソケットとTCPでの作業を除いて!

AndroidフォンがTCPを介してArduinoと通信する方法に関する具体的なサンプルコードは何ですか?

PS: Androidと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 に答える