2015-11-16 3 views
10

Я потратил некоторое время на поиск способа отправки данных из приложения Android в Matlab - без подхода. Я бы предпочел сделать это с JSON через Restful webservice.Отправить данные в Matlab с Android/Java

Возможно, у меня есть неправильная концепция, как это будет работать.

Matlab должен запускать/ждать POST-запросы от моего устройства Android для получения данных, вносить их в форму matlab из json, прокладывать ее и отправлять обратно - чем ждать снова новых запросов.

«Веб-служба RESTful», такая как «webread», кажется, не ждет входящих данных и активно работает для них.


Как передать Matlab для приема входящих данных с помощью json? или как передать Matlab данные из Android/java-программ? Мне нужны другие фреймворки, api или даже сервер с базой данных, чтобы это сделать?

Может ли кто-нибудь дать мне несколько советов?

+1

webread - это клиент, а не сервер. Вам действительно нужно добавить спокойный сервер в Matlab. Но какова ваша общая проблема? Возможно, есть лучший подход. – zapl

+0

Благодарим вас за информацию с сервером, я постараюсь получить сервер Spring java, который будет вызывать matlab. – Ghalion

+0

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

ответ

5

Подход 1:

Matlab также Matlab Mobile https://de.mathworks.com/products/matlab-mobile.html, который способен выполнять Matlab код с вашего устройства, однако это не представляется возможным передавать изображения в Matlab.

Однако вы можете использовать WebCam https://play.google.com/store/apps/details?id=com.pas.webcam&hl=en и открыть сервер, который довольно прямолинейный. Вы можете запустить приложение в фоновом режиме, а затем conencto в Matlab с помощью Matlab-Mobile, и доступ к нему через ваш IP-адрес и порт, как правило, 8080.

подход 2:

Вы можете использовать WebSocket -Server которая реализуется здесь:

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

для получения дополнительной информации о том, как заставить его работать вы можете следовать указаниям на GitHub ридми, здесь: https://github.com/jebej/MatlabWebSocket

Сервер Websocket находится на самом высоком уровне 7-го уровня (прикладного уровня) модели OSI https://en.wikipedia.org/wiki/OSI_model и создает op на 4-м уровне (TCP). Однако вам не нужно указывать такие вещи, как размер буфера и т. Д.

Следующий примерный код непосредственно берется из кода примера из проекта github. Чтобы полностью выполнить желаемый результат в приложении Android, это лучший подход к восстановлению клиентского приложения на Android.

Echo сервер:

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 

Чтобы запустить его в типе MATLAB:

s = EchoServer(30000); 

Это будет использовать 30000 порт на локальном компьютере.

На Android просто создайте WebSocket-Client и используйте свой URI, который вы можете узнать, используя ipconfig (windows) или ifconig (Linux). В Android в Ури хотел следующее:

ws://192.168.1.102:30000 

Если IP-адрес может меняться в зависимости от вашего IP-адреса

4

Вот мои 2 цента.

Ваш подход кажется правильным.

Шаг 1: Вам необходимо запустить веб-сервер, используя MATLAB на вашем устройстве. Пройдя через Web Server, похоже, что вы можете использовать его для запуска webserver и выполнить файл .m, когда на ваш сервер отправляется запрос POST или GET.

Шаг 2: Допустим, что сервер принимает запросы на порт 8080. С вашего Android устройства, если вы находитесь на той же сети, то вы можете сделать запрос HTTP POST для http://your.ip.address:8080 и извлечения данных и выполнить свой код в файле .m.

Примечание: Вы также можете получить общедоступный URL-адрес своего локального сервера, работающего на устройстве, с помощью утилиты ngrok. Затем сделайте POST-запрос этому общедоступному URL-адресу. Вам не обязательно быть в той же сети, чтобы сделать запрос. Вот несколько объяснений: Accessing localhost from android over wifi.


Edit: Дополнительный вопрос говорит:

Matlab можно получать данные с помощью клиента TCP/IP, но как андроид сайт нужно сделать POST/GET алгоритм и как может ли ответ ответит Matlab?

Позвольте мне перефразировать то, что я понимаю. Во-первых, вы хотите знать, как из Android-кода можно выполнить запрос POST/GET, а во-вторых, как Matlab ответит на запрос?

  • В Android вы можете сделать запрос POST в фоновом потоке либо с помощью AsyncTask (Android HttpURLConnection with AsyncTask Tutorial), или если вы хотите, чтобы сделать это правильно, вы можете использовать библиотеку Дооснащаемый делать POST/GET вызовов (Using Retrofit 2.x as REST client - Tutorial ).
  • При использовании WebServer, как упоминалось ранее в ссылке, когда файл .m выполняется при вызове POST, вы можете отправить ответ на запрос POST оттуда. На Android, где вы инициировали вызов, вы можете получить обратный вызов.

Надеюсь, это поможет.

2

Вы пробовали Android Support Package for MATLAB?

Хотя это не позволяет получать доступ к камере, при использовании MATLAB Mobile он обеспечивает доступ к:

  • Ускорение на 3-оси
  • магнитного поля по 3 осям
  • Угловое скорость на 3-х осей
  • Азимут, крен, тангаж
  • широта, долгота, высота, горизонтальная точность, скорость, и конечно

a link with more detailed information о том, как начать работу.

Смежные вопросы