从 Android/Java 向 Matlab 发送数据

Send data to Matlab from Android/Java

我花了一些时间寻找将数据从 android 应用程序发送到 Matlab 的方法 - 没有任何方法。我更愿意通过 Restful 网络服务使用 JSON 来完成。

我可能对这将如何工作有错误的概念。

Matlab 应该是 running/waiting 对于来自我的 android 设备的 POST 请求接收数据,将其从 json 转换为 matlab 格式,进行处理并发送返回 - 而不是再次等待新请求。

"RESTful web service" 像 "webread" 似乎不等待传入数据并为它们激活。


如何让 Matlab 使用 json 监听传入的数据? 或者如何让 Matlab 从基于 Android/java 的程序接收数据? 我是否需要其他框架,api,甚至是带有数据库的服务器来完成这项工作?

谁能给我一些提示?

方法一:

Matlab 还提供 Matlab Mobile https://de.mathworks.com/products/matlab-mobile.html,它能够从您的设备执行 Matlab 代码,但是,无法将图像发送到 Matlab。

不过,您可以使用网络摄像头 https://play.google.com/store/apps/details?id=com.pas.webcam&hl=en 并打开一个服务器,这非常简单。你可以在后台运行应用程序,然后通过Matlab-Mobile连接到Matlab,通过你的IP地址访问它,通常是8080端口。

方法二:

您可以使用此处实现的 WebSocket 服务器:

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

有关如何获得 运行 的更多信息,您可以按照 GitHub 自述文件中给出的说明进行操作,此处:https://github.com/jebej/MatlabWebSocket

一个WebSocket Server在OSI模型的第7层(应用层)的最高层https://en.wikipedia.org/wiki/OSI_model,在第4层(TCP)构建op。但是,您不需要指定缓冲区大小等内容。

以下示例代码直接取自GitHub项目的示例代码。要在 Android 应用程序中实现预期结果,最好的方法是在 Android.

上重建客户端应用程序

回显服务器:

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

    properties
    end

    methods
        function obj = EchoServer(varargin)
            %Constructor
            obj@WebSocketServer(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 客户端并使用您的 URI,您可以使用 ipconfig (windows) 或 ifconig (Linux).在 Android 中,uri 应该如下所示:

ws://192.168.1.102:30000 

其中 IP 地址可能会根据您的 IP 地址发生变化

这是我的 2 美分。

你的做法似乎是正确的。

第 1 步:您需要 运行 在您的设备上使用 MATLAB 的 Web 服务器。通过 Web Server,看起来您可以将它用于 运行 webserver,并在向 POST 或 GET 请求时执行 .m 文件你的服务器。

第 2 步:假设您的服务器正在接受端口 8080 上的请求。从您的 Android 设备,如果您在同一网络上,那么您可以创建一个HTTP POST 请求 http://your.ip.address:8080 并提取数据并在 .m 文件中执行您的代码。

注意:您还可以在设备上使用 ngrok 为您的本地服务器 运行ning 获取 public URL ] 公用事业。然后向 public URL 发出 POST 请求。您无需在同一网络上即可发出请求。这里有一些解释:Accessing localhost from android over wifi.


编辑: 附加问题说:

Matlab is possible of receiving data via TCP/IP client, but how does the android site need to do the POST/GET algorithm and how can response Matlab responsible to it?

让我重新表述一下我的理解。首先,您想知道如何从 Android 代码中执行 POST/GET 请求,其次 Matlab 将如何响应请求?

希望对您有所帮助。

你试过Android Support Package for MATLAB了吗?

虽然它不允许访问相机,但当与 MATLAB Mobile 一起使用时,它确实可以访问:

  • 3 轴加速度
  • 三轴磁场
  • Angular 三轴速度
  • 方位、横滚、俯仰
  • 纬度、经度、高度、水平精度、速度和航向

这里是a link with more detailed information如何开始。