【问题标题】:Send data to Matlab from Android/Java从 Android/Java 向 Matlab 发送数据
【发布时间】:2016-02-17 21:09:25
【问题描述】:

我花了一些时间寻找一种将数据从 android 应用程序发送到 Matlab 的方法 - 没有办法。我更喜欢通过 Restful 网络服务使用 JSON。

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

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

“webread”之类的“RESTful Web 服务”似乎不会等待传入数据并为它们激活。


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

谁能给我一些提示?

【问题讨论】:

  • webread 是客户端,而不是服务器。您确实需要在 matlab 中添加一个 restful 服务器。但是你的一般问题是什么?也许有更好的方法。
  • 感谢您提供有关服务器的信息,我将尝试让 java spring 服务器运行,它将调用 matlab。
  • 如果您碰巧有 MATLAB Production Server,它可以帮助您吗?

标签: java android json matlab restful-architecture


【解决方案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 并打开一个服务器,这非常简单。您可以在后台运行应用程序,然后通过 Matlab-Mobile 连接到 Matlab,并通过您的 IP 地址访问它,通常是端口 8080。

方法二:

您可以使用此处实现的 WebSocket -Server:

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

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

WebSocket 服务器位于 OSI 模型https://en.wikipedia.org/wiki/OSI_model 的第 7 层(应用层)的最高层,并在第 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-Client 并使用您的 URI,您可以使用 ipconfig (windows) 或 ifconig (Linux) 找到它。在 Android 中,uri 应如下所示:

ws://192.168.1.102:30000 

IP地址可能会根据您的IP地址而改变

【讨论】:

    【解决方案2】:

    这是我的 2 美分。

    您的方法似乎是正确的。

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

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

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


    编辑: 附加问题说:

    Matlab 可以通过 TCP/IP 客户端接收数据,但是 android 站点需要如何做 POST/GET 算法,Matlab 又该如何响应呢?

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

    • 在 Android 中,您可以使用 AsyncTask (Android HttpURLConnection with AsyncTask Tutorial) 在后台线程中发出 POST 请求,或者如果您想正确执行此操作,您可以使用 Retrofit 库进行 POST/GET 调用 (Using Retrofit 2.x as REST client - Tutorial )。李>
    • 当使用前面链接中提到的WebServer 时,当.m 文件在POST 调用中执行时,您可以从那里发送对POST 请求的响应。在您发起呼叫的 Android 上,您可以收到回调。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      你试过Android Support Package for MATLAB吗?

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-24
        • 1970-01-01
        • 2022-08-24
        • 2017-11-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多