Как передавать данные датчика реального времени Android на компьютер?
Я хочу передать данные датчика в реальном времени, собранные смартфоном Android, на мой компьютер и обработать сигнал на моем компьютере. Как я могу этого достичь? Любые полезные ссылки на учебники очень приветствуются.
Либо с помощью беспроводных средств или USB-кабелей приемлемо
Когда данные передаются, как компьютер может их обрабатывать?
Я знаком с Python, и поэтому лучше использовать Python для работы с поступающими данными.
Возможно ли для Python постоянно принимать вновь поступающие данные и обрабатывать их?
5 ответов
Некоторые приложения Android позволяют обмениваться датчиками по сети:
- PhonePi (с помощью веб-сокетов)
- Сенсорный узел (через MQTT)
- Веб-камера IP (может использоваться как веб-интерфейс при доступе
http://SMARTPHONE_IP:8080/sensors.json
) - Tasker издатель
Вы также можете прочитать датчики через ADB!
Существует несколько приложений Android для беспроводной передачи данных датчиков. Оформить заказ, например, "Смартфон IMU GPS" [1] с открытым исходным кодом [2]. Он передает данные через UDP. Фрагмент кода Python для получения потока данных приведен в описании приложения [1]. Убедитесь, что смартфон и принимающее устройство подключены к одной и той же сети Wi-Fi, и никакой брандмауэр не блокирует трафик.
[1] https://play.google.com/store/apps/details?id=de.lorenz_fenster.sensorstreamgps
[2] https://sourceforge.net/projects/smartphone-imu/
Вы можете использовать python-сокеты для получения данных и их обработки. Посмотрите: https://docs.python.org/2/howto/sockets.html некоторые идеи о том, как настроить серверный компьютер.
У Android есть совместимый сокет, который вы можете использовать для отправки своих данных: Посмотрите на: http://examples.javacodegeeks.com/android/core/socket-core/android-socket-example/ несколько идей о том, как его использовать.
Изменить: это будет работать для Wi-Fi и 3G / 4G.
Решения, предоставленные другими, достаточны, но все же для этого старого потока я хотел бы добавить свой ответ, чтобы любой, кто все еще ищет решение, мог найти его полностью полезным.
Вы можете использовать на Github, которое запускает сервер Websocket и отправляет данные датчиков в реальном времени клиентам WebSocket.
Чтобы получать данные датчика в реальном времени от Android, вам просто нужно подключиться к приложению, используя следующий URL-адрес
ws://ip:port/sensor/connect?type=<sensor-type>
куда
<sensor-type>
- это тип датчика, к которому вы подключаетесь. Например
Для акселерометра:
ws://192.168.0.102:8081:/sensor/connect?type=android.sensor.accelerometer
Для ориентации:
ws://192.168.0.102:8081:/sensor/connect?type=android.sensor.orientation
Для гироскопа:
ws://192.168.0.102:8081:/sensor/connect?type=android.sensor.gyroscope
и так далее...
Практически каждый язык предоставляет реализацию протокола Websocket. Для получения данных в реальном времени в скрипте Python вы можете использовать клиент WebSocket для Python.
import websocket
def on_message(ws, message):
print(message) # sensor data here in JSON format
def on_error(ws, error):
print(error)
def on_close(ws, close_status_code, close_msg):
print("### closed ###")
def on_open(ws):
# do something when connected
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://192.168.0.102:8081/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Приложение Sensor Server и клиент Websocket должны быть подключены к одной сети.
Я пытался получить аудиоданные в реальном времени с моего телефона на python. Приложения, упомянутые в других ответах, не могут читать микрофон, но фифокс может.
Сначала вы выбираете, что вы хотите измерить в фипоксе, я возьму в качестве примера необработанный звук, но, вероятно, он работает и для других датчиков и типов звука.
Сначала заходим в аудио автокорреляцию и переходим на вкладку необработанные данные. Когда вы нажимаете кнопку воспроизведения, вы можете увидеть график того, что будет получено на компьютере. Затем выберите «разрешить удаленный доступ» в меню в правом верхнем углу. В нижней части экрана появится URL-адрес.
Следующий код можно запустить на вашем компьютере, и он будет отображать график мгновенных измерений, но, конечно же, его можно настроить для постоянного получения данных:
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)
При просмотре других датчиков полный URL-адрес дляrequests.get()
можно найти, открыв URL-адрес, который дает phyphox в вашем браузере, затем используйте элемент проверки, и на вкладке «сеть» поступает много данных. Нажмите на один из них, и ссылка появится вверху страницы. заголовки.