从 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 中,您可以使用 AsyncTask (Android HttpURLConnection with AsyncTask Tutorial) 在后台线程中发出 POST 请求,或者如果您想正确执行此操作,可以使用 Retrofit 库来执行POST/GET 调用(使用 Retrofit 2.x 作为 REST 客户端 - 教程
).
- 如前文 link 所述使用
WebServer
时,当 .m
文件在 POST 调用中执行时,您可以将响应发送至 POST 从那里请求。在 Android,您发起呼叫的地方,您可以收到回拨。
希望对您有所帮助。
你试过Android Support Package for MATLAB了吗?
虽然它不允许访问相机,但当与 MATLAB Mobile 一起使用时,它确实可以访问:
- 3 轴加速度
- 三轴磁场
- Angular 三轴速度
- 方位、横滚、俯仰
- 纬度、经度、高度、水平精度、速度和航向
我花了一些时间寻找将数据从 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 中,您可以使用 AsyncTask (Android HttpURLConnection with AsyncTask Tutorial) 在后台线程中发出 POST 请求,或者如果您想正确执行此操作,可以使用 Retrofit 库来执行POST/GET 调用(使用 Retrofit 2.x 作为 REST 客户端 - 教程 ).
- 如前文 link 所述使用
WebServer
时,当.m
文件在 POST 调用中执行时,您可以将响应发送至 POST 从那里请求。在 Android,您发起呼叫的地方,您可以收到回拨。
希望对您有所帮助。
你试过Android Support Package for MATLAB了吗?
虽然它不允许访问相机,但当与 MATLAB Mobile 一起使用时,它确实可以访问:
- 3 轴加速度
- 三轴磁场
- Angular 三轴速度
- 方位、横滚、俯仰
- 纬度、经度、高度、水平精度、速度和航向