如何将Android实时传感器数据传输到计算机?

Posted

技术标签:

【中文标题】如何将Android实时传感器数据传输到计算机?【英文标题】:How to transmit Android real-time sensor data to computer? 【发布时间】:2013-08-17 05:43:58 【问题描述】:

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

可以通过无线方式或 USB 电缆。

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

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

Python 是否可以不断接受新来的数据并进行处理?

【问题讨论】:

@RotaryHeart 我真的不知道如何开始。这篇文章是为了寻找一些教程来帮助我入门。 @RotaryHeart 甚至电缆连接都可以工作 我可以帮你用 wifi 做(我已经做过),但它用 C#。 我也需要..怎么做? 【参考方案1】:

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

PhonePi(使用 websockets) Sensor Node(来自MQTT) IP Webcam(可作为webapi访问http://SMARTPHONE_IP:8080/sensors.json) Tasker publisher

你也可以read the sensors via ADB!

【讨论】:

【参考方案2】:

您可以使用 python 套接字来接收数据并进行处理。 看:https://docs.python.org/2/howto/sockets.html 了解如何设置服务器机器。

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

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

【讨论】:

找到了我的这个旧代码,你可以看看:github.com/ninc/pi-vinterljus/blob/master/pialive/pialive.py 它基本上发送一个“我还活着”的消息,然后关闭套接字。但是,您应该保持套接字处于活动状态以继续实时数据流。【参考方案3】:

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

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

【讨论】:

smartphone-imu 对我来说效果很好,可以让您控制数据速率并且是 FOSS【参考方案4】:

您可以使用 Github 中的 Sensor Server app,它将实时传感器数据流式传输到 WebSocket 客户端。

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

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

其中&lt;sensor-type&gt; 是您要连接的传感器类型。例如

对于加速度计:/sensor/connect?type=android.sensor.accelerometer

定向:/sensor/connect?type=android.sensor.orientation

陀螺仪:/sensor/connect?type=android.sensor.gyroscope

等等……

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

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()

Sensor Server app和Websocket客户端必须连接到同一个网络

【讨论】:

以上是关于如何将Android实时传感器数据传输到计算机?的主要内容,如果未能解决你的问题,请参考以下文章

Android 音视频技术之录音获取实时音量

Android 如何获取传感器的数据

深度学习核心技术精讲100篇(三十二)-网易实时数仓实战应用

如何使用websocket在网页上动态示实时数据的折线图

HBase在G7的应用与实践

模拟 Android 相机