如何将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>
其中<sensor-type>
是您要连接的传感器类型。例如
对于加速度计:/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实时传感器数据传输到计算机?的主要内容,如果未能解决你的问题,请参考以下文章