2015-11-16 16 views
10

Ich verbrachte einige Zeit auf der Suche nach einer Möglichkeit, Daten von einer Android-Anwendung an Matlab zu senden - ohne Ansatz. Ich würde es am liebsten mit JSON über einen Restful Webservice machen.Senden von Daten an Matlab von Android/Java

Ich habe wahrscheinlich das falsche Konzept im Kopf, wie das funktionieren wird.

Matlab sollte laufen/warten auf POST-Anfragen von meinem Android-Gerät, um die Daten zu erhalten, bringen Sie es in Matlab Form von JSON, Fortschritt und senden Sie es zurück - als warten Sie erneut auf neue Anfragen.

Der "RESTful Web Service" wie "webread" scheint nicht auf eingehende Daten zu warten und für sie aktiv zu werden.


Wie kann Matlab mit json auf eingehende Daten warten? oder wie Matlab Daten von Android/Java-basierten Programmen erhalten? Brauche ich ein anderes Framework, API oder sogar einen Server mit Datenbank, um das zu erledigen?

Kann mir jemand ein paar Hinweise geben?

+1

Webread ist ein Client, kein Server. Sie müssen Matlab wirklich einen erholsamen Server hinzufügen. Aber was ist dein allgemeines Problem? Vielleicht gibt es einen besseren Ansatz. – zapl

+0

Vielen Dank für Ihre Informationen mit einem Server, ich werde versuchen, einen Java-Spring-Server laufen zu bekommen, der Matlab aufrufen wird. – Ghalion

+0

https://www.mathworks.com/matlabcentral/answers/326764-how-can-i-read-a-json-file?requestedDomain=www.mathworks.com – Ibrahim

Antwort

5

Ansatz 1:

Matlab bietet auch Matlab Mobil https://de.mathworks.com/products/matlab-mobile.html, die die Ausführung Matlab-Code von Ihrem Gerät fähig ist, jedoch ist es nicht möglich, Bilder in Matlab zu senden.

Sie können jedoch WebCam https://play.google.com/store/apps/details?id=com.pas.webcam&hl=en verwenden und einen Server öffnen, der ziemlich einfach ist. Sie können die App im Hintergrund laufen und dann conencto in Matlab über Matlab-Mobile, und greifen Sie über Ihre IP-Adresse und in der Regel Port 8080

Ansatz 2:

Sie können ein verwenden Websocket -Server die hier umgesetzt:

https://de.mathworks.com/matlabcentral/fileexchange/50040-jebej-matlabwebsocket

weitere Informationen darüber, wie es zu bekommen zu laufen, um die auf der gitHub readme gegebenen Anweisungen folgen können, bitte hier: https://github.com/jebej/MatlabWebSocket

Ein Websocket-Server befindet sich auf der obersten Schicht der 7. Schicht (Anwendungsschicht) des OSI-Modells https://en.wikipedia.org/wiki/OSI_model und baut auf der 4. Schicht (TCP) auf. Sie müssen jedoch keine Dinge wie Puffergröße usw. angeben.

Der folgende Beispielcode stammt direkt aus dem Beispielcode aus dem github-Projekt. Um das gewünschte Ergebnis in der Android-Anwendung zu erreichen, ist es der beste Ansatz, die Client-Anwendung auf Android neu zu erstellen.

Echo Server:

classdef EchoServer < WebSocketServer 
    %ECHOSERVER Summary of this class goes here 
    % Detailed explanation goes here 

    properties 
    end 

    methods 
     function obj = EchoServer(varargin) 
      %Constructor 
      [email protected](varargin{:}); 
     end 
    end 

    methods (Access = protected) 
     function onOpen(obj,conn,message) 
      fprintf('%s\n',message) 
     end 

     function onTextMessage(obj,conn,message) 
      % This function sends an echo back to the client 
      conn.send(message); % Echo 
     end 

     function onBinaryMessage(obj,conn,bytearray) 
      % This function sends an echo back to the client 
      conn.send(bytearray); % Echo 
     end 

     function onError(obj,conn,message) 
      fprintf('%s\n',message) 
     end 

     function onClose(obj,conn,message) 
      fprintf('%s\n',message) 
     end 
    end 
end 

Um es in MATLAB Art auszuführen:

s = EchoServer(30000); 

Dies wird dann den Port 30000 auf dem lokalen Computer nutzen.

Erstellen Sie auf Android einfach einen WebSocket-Client und verwenden Sie Ihren URI, den Sie mit ipconfig (Windows) oder ifconig (Linux) herausfinden können. In Android sollten die die uri wie folgt aus:

ws://192.168.1.102:30000 

Wenn die IP-Adresse nach Ihrer IP-Adresse ändern können

4

Hier sind meine 2 Cent.

Ihr Ansatz scheint richtig.

Schritt 1: Sie müssen einen Webserver mit MATLAB auf Ihrem Gerät ausführen. Wenn Sie Web Server durchlaufen, sieht es so aus, als könnten Sie damit webserver ausführen und eine .m Datei ausführen, wenn eine POST- oder GET-Anfrage an Ihren Server gestellt wird.

Schritt 2: Lassen Sie uns sagen, dass der Server-Anfragen auf Port 8080. Von Ihrem Android-Gerät akzeptiert, wenn Sie auf demselben Netzwerk befinden, dann können Sie eine HTTP-POST-Anforderung an http://your.ip.address:8080 machen und die Daten extrahieren und Ihren Code ausführen in .m Datei.

Hinweis: Sie können auch eine öffentliche URL für Ihren lokalen Server abrufen, der auf dem Gerät mit dem Dienstprogramm ngrok ausgeführt wird. Dann machen Sie eine POST-Anfrage an diese öffentliche URL. Sie müssen nicht im selben Netzwerk sein, um eine Anfrage zu stellen. Hier ist eine Erklärung: Accessing localhost from android over wifi.


Edit: Zusätzliche Frage sagt:

Matlab möglich ist, Daten über TCP/IP-Client empfangen, aber wie kommt der Android-Website benötigen die POST/GET-Algorithmus zu tun und wie Kann Antwort Matlab dafür verantwortlich sein?

Lassen Sie mich neu formulieren, was ich verstehe. Erstens möchten Sie wissen, wie man von Android-Code aus eine POST/GET-Anfrage machen kann und wie Matlab auf die Anfrage reagiert.

  • In Android Sie eine POST-Anforderung im Hintergrund-Thread machen können entweder mit AsyncTask (Android HttpURLConnection with AsyncTask Tutorial) oder wenn Sie es richtig machen wollen, können Sie Retrofit-Bibliothek zu tun POST/GET-Anrufe (Using Retrofit 2.x as REST client - Tutorial ) verwenden.
  • Bei der Verwendung WebServer wie in der Verbindung zuvor erwähnt, wenn die .m Datei ausgeführt wird auf den POST-Aufruf, können Sie die Antwort auf die POST-Anfrage von dort senden. Auf Android, wo Sie den Anruf initiiert haben, können Sie den Rückruf empfangen.

Hoffe das hilft ein bisschen.

2

Haben Sie versucht, die Android Support Package for MATLAB?

Während es keinen Zugriff auf die Kamera erlaubt es, wenn sie mit MATLAB Mobile anschauen hat es Zugang zu bieten:

  • Beschleunigung auf 3-Achsen
  • Magnetfeld auf 3-Achsen
  • Angular Geschwindigkeit auf 3-Achsen
  • Azimuth, Roll-, Nick-
  • Breitengrad, Längengrad, Höhe, horizontale Genauigkeit, Geschwindigkeit und Kurs

Hier ist a link with more detailed information wie Sie beginnen.