Python library phyphox-py

Use phyphox-py package to get experimental data from your phyphox mobile app.

This library allows you to access sensor data from the Phyphox app (see www.phyphox.org) directly in Python.

What is Phyphox?

Phyphox is an open-source mobile application developed by RWTH Aachen University. Available on both Android and iOS, it provides access to the phone’s internal sensors for use in physics experiments.

Install

To install phyphox-py, run the following command in your terminal:

python3 -m pip install phyphox-py

or in Windows

python -m pip install phyphox-py

Usage

Basic Example

import phyphox
import time

my_phone = phyphox.Logger("192.168.0.12", 8080)
my_phone.get_meta()
print(my_phone)

Sample output (truncated):

accelerometer
Name : ICM20602 Accelerometer
Vendor : InvenSense
Range : 78.45346
Resolution : 0.0011901855
MinDelay : 5000
MaxDelay : 1000000
Power : 0.325
Version : 20170509
...

version : 1.2.0
build : 1020009
fileFormat : 1.19
...
camera2api : [{"id":"0","facing":"LENS_FACING_BACK","hardwareLevel":"HARDWARE_LEVEL_3","capabilities":["CAPABILIT ...
camera2apiFull : [{"id":"0","facing":"LENS_FACING_BACK","hardwareLevel":"HARDWARE_LEVEL_3","capabilities":["CAPABILIT ...

Getting Experiment Configuration

my_phone.get_config()
print(my_phone)

Sample output (truncated):

crc32 : 44c5dc97
title : Gyroscope (rotation rate)
localTitle : Gyroscope (vitesse angulaire)
category : Raw Sensors
localCategory : Capteurs
buffers : [{'name': 'gyrX', 'size': 0}, {'name': 'gyrY', 'size': 0}, {'name': 'gyrZ', 'size': 0}, {'name': 'gyr', 'size': 0}, {'name': 'gyr_time', 'size': 0}]
inputs : [{'source': 'gyroscope', 'outputs': [{'x': 'gyrX'}, {'y': 'gyrY'}, {'z': 'gyrZ'}, {'abs': 'gyr'}, {'t': 'gyr_time'}]}]
export : [{'set': 'Raw Data', 'sources': [{'label': 'Time (s)', 'buffer': 'gyr_time'}, {'label': 'Gyroscope x (rad/s)', 'buffer': 'gyrX'}, {'label': 'Gyroscope y (rad/s)', 'buffer': 'gyrY'}, {'label': 'Gyroscope z (rad/s)', 'buffer': 'gyrZ'}, {'label': 'Absolute (rad/s)', 'buffer': 'gyr'}]}]

accelerometer    Name : ICM20602 Accelerometer
...
camera2api : [{"id":"0","facing":"LENS_FACING_BACK","hardwareLevel":"HARDWARE_LEVEL_3","capabilities":["CAPABILIT ...
camera2apiFull : [{"id":"0","facing":"LENS_FACING_BACK","hardwareLevel":"HARDWARE_LEVEL_3","capabilities":["CAPABILIT ...

Selecting Buffers for an Experiment

Buffer order is based on the export key. To select gyr_time, gyrZ, and gyrX:

my_phone.buffer_needed([(0, (0, 3, 1))])

To check buffer selection:

my_phone.print_select_buffer()

Expected output:

Buffer  gyr_time
Buffer  gyrZ
Buffer  gyrX

Reading mobile sensor Data

Clear all buffer data, start data acquisition, wait for 2 seconds, then retrieve any data in a list:

my_phone.clear_data()
my_phone.start()
time.sleep(2)
my_phone.read_buffers(mode_data=phyphox.BufferMode.FULL)
last_tab = my_phone.get_last_buffer_read()
te=(-last_tab1[0][0][0]+ last_tab1[0][0][-1])/(len(last_tab1[0][1])-1)
print("data length {0} from Time {1} to {2}".format(len(last_tab1[0][1]), last_tab1[0][0][0], last_tab1[0][0][-1]))
print("Hope next time {0}.".format(last_tab1[0][0][-1]+te))

Now wait 0.5 seconds and retrieve any new data:

time.sleep(0.5)
my_phone.read_buffers()
last_tab1 = my_phone.get_last_buffer_read()
print("data length {0} from Time {1} to {2}".format(len(last_tab1[0][1]), last_tab1[0][0][0], last_tab1[0][0][-1]))
print("Hope next time {0}.".format(last_tab1[0][0][-1]+te))

Stop sampling

my_phone.stop()

Sample output

data length 380 from Time 0.095016596 to 1.9895734
Hope next time 1.9945722306174143.
data length 127 from Time 1.9945783 to 2.6244306
Hope next time 2.6294294306174146.

Credits

This library was developed by Laurent Berger with the help from phyphox forum and github issues.

Licence

This library is released under the GNU Lesser General Public Licence v3.0.

Contact

If you have questions or issues, feel free to open an issue on the GitHub repository.