Как передавать данные датчика реального времени Android на компьютер?

Я хочу передать данные датчика в реальном времени, собранные смартфоном Android, на мой компьютер и обработать сигнал на моем компьютере. Как я могу этого достичь? Любые полезные ссылки на учебники очень приветствуются.

Либо с помощью беспроводных средств или USB-кабелей приемлемо

Когда данные передаются, как компьютер может их обрабатывать?

Я знаком с Python, и поэтому лучше использовать Python для работы с поступающими данными.

Возможно ли для Python постоянно принимать вновь поступающие данные и обрабатывать их?

5 ответов

Некоторые приложения Android позволяют обмениваться датчиками по сети:

Вы также можете прочитать датчики через 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 в вашем браузере, затем используйте элемент проверки, и на вкладке «сеть» поступает много данных. Нажмите на один из них, и ссылка появится вверху страницы. заголовки.

Другие вопросы по тегам