如何将Android实时传感器数据传输到电脑?

问题描述 投票:0回答:5

我希望将Android智能手机收集的实时传感器数据传输到我的电脑,并在我的电脑上进行信号处理。 我怎样才能实现这个目标?非常欢迎任何有用的教程链接。

无线方式或 USB 电缆均可。

数据传输后,计算机如何处理?

我熟悉Python,所以最好使用Python来处理即将到来的数据。

Python有可能不断接受新来的数据并处理它们吗?

android python data-transfer transmission
5个回答
15
投票

一些 Android 应用程序允许您通过网络共享传感器:

您还可以通过 ADB 读取传感器


5
投票

有多个 Android 应用程序可以无线传输传感器数据。结帐例如“智能手机 IMU GPS”[1],它是开源的 [2]。它通过UDP传输数据。应用程序描述 [1] 中给出了用于接收数据流的 Python 代码片段。确保智能手机和接收设备连接到同一 WiFi 网络,并且没有防火墙阻止流量。

[1] https://play.google.com/store/apps/details?id=de.lorenz_fenster.sensorstreamgps
[2] https://sourceforge.net/projects/smartphone-imu/


4
投票

您可以使用Python套接字来接收数据并处理它。 请参阅:https://docs.python.org/2/howto/sockets.html 了解如何设置服务器计算机的一些想法。

Android 有一个兼容的套接字,您可以使用它来发送数据: 看看:http://examples.javacodegeeks.com/android/core/socket-core/android-socket-example/ 有关如何使用它的一些想法。

编辑:这适用于 wifi 和 3g/4g。


1
投票
我试图将实时音频数据从我的手机获取到Python。其他答案中提到的应用程序无法读取麦克风,但

phyphox可以。

首先,您选择要在 phypox 中测量的内容,我将以原始音频为例,但它可能也适用于其他传感器和音频类型。

首先进入音频自相关并进入原始数据选项卡。当您按下播放键时,您可以看到电脑上将收到的内容的图表。然后从右上角的菜单中选择“允许远程访问”。屏幕底部会出现一个网址。

以下代码可以在您的电脑上运行,并显示瞬时测量结果的图表,但当然可以对其进行调整以连续接收数据:

import requests import json import matplotlib.pyplot as plt def send_request(): try: response = requests.get( url=f"{url}/get?recording=full&time=full" # this can be changed for other audio types ) print(f'Response HTTP Status Code: {response.status_code}') # print(f'Response HTTP Response Body: {response.content}') return response.content except requests.exceptions.RequestException: print('HTTP Request failed') def graph(raw): data = json.loads(raw.decode('utf-8')) # Turns data into a large dictionary amplitude = data["buffer"]["recording"]["buffer"] # This location depends on the sensor type t = data["buffer"]["time"]["buffer"] print(amplitude) plt.plot(t, amplitude) plt.show() url = "url" # insert url from phyphox here raw_data = send_request() if raw_data: graph(raw_data)
查看其他传感器时,可以通过在浏览器中打开 phyphox 提供的 url 找到 

requests.get()

 的完整 url,然后使用检查元素,在“网络”选项卡下会传入大量数据。单击其中之一和链接将显示在标题顶部。


1
投票
您可以使用 Github 上的

Sensor Server 应用程序,它将实时传感器数据传输到 WebSocket 客户端。

要从 Android 接收实时传感器数据,您只需使用以下 URL 连接到应用程序

ws://ip:port/sensor/connect?type=<sensor-type>
其中 

<sensor-type>

 是您要连接的传感器类型。例如

对于加速度计:

/sensor/connect?type=android.sensor.accelerometer


定向:

/sensor/connect?type=android.sensor.orientation


对于陀螺仪:

/sensor/connect?type=android.sensor.gyroscope


等等...

几乎每种语言都提供了Websocket协议的实现。要在 Python 脚本中接收实时数据,您可以使用

Python 的 WebSocket 客户端

import websocket def on_message(ws, message): print(message) # sensor data here in JSON format def on_error(ws, error): print("### error ###") print(error) def on_close(ws, close_code, reason): print("### closed ###") print("close code : ", close_code) print("reason : ", reason ) def on_open(ws): print("connection opened") if __name__ == "__main__": ws = websocket.WebSocketApp("ws://192.168.0.102:8082/sensor/connect?type=android.sensor.accelerometer", on_open=on_open, on_message=on_message, on_error=on_error, on_close=on_close) ws.run_forever()

传感器服务器应用程序和Websocket客户端必须连接到同一网络

对于基于 UDP 的通信,您可以使用

SensaGram 应用程序。要接收传感器数据,您需要建立 UDP 服务器并侦听来自应用程序的传入数据

from udpserver import UDPServer import json def onData(data): jsonData = json.loads(data) sensorType = jsonData["type"] timestamp = jsonData.get("timestamp") values = jsonData.get("values") if sensorType == "android.sensor.accelerometer": x, y, z = values print(f"accelerometer : x = {x}, y = {y}, z = {z} timestamp = {timestamp} ") if sensorType == "android.sensor.gyroscope": x, y, z = values print(f"gyroscope : x = {x}, y = {y}, z = {z} timestamp = {timestamp} ") if sensorType == "android.gps": print(jsonData) # Initialize the server to listen on all network interfaces (0.0.0.0) and port 8080 server = UDPServer(address=("0.0.0.0", 8080)) server.setDataCallBack(onData) server.start()
    
© www.soinside.com 2019 - 2024. All rights reserved.