Smartphone Connector
This simple package exposes methods to interact with smartphones connected to a socket.io server instance.
Examples
All examples and scripts on GitHub
Draw 3x3 checker board
from smartphone_connector import Connector
phone = Connector('https://io.lebalz.ch', 'FooBar')
phone.set_grid([
['black','white','black'],
['white','black','white'],
['black','white','black']
], broadcast=True)
phone.set_grid([
[9,9,9,9],
[9,0,0,9],
[9,9,9,9],
[9,0,0,9],
[9,0,0,9],
])
results on all devices in the following screen.
When broadcast
is set to False
(default), only the FooBar
devices display the checker board.

Stream & display gyroscope data
from smartphone_connector import Connector, GyroMsg
import matplotlib.pyplot as plt
phone = Connector('https://io.lebalz.ch', 'FooBar')
MAX_SAMPLES = 300
y = []
x = []
plt.show()
def on_gyro(data: GyroMsg):
if len(x) > MAX_SAMPLES:
x.pop(0)
y.pop(0)
x.append(data.time_stamp)
y.append([data.alpha, data.beta, data.gamma])
def on_intervall():
plt.clf()
plt.plot(x, y)
plt.pause(0.01)
phone.on_gyro = on_gyro
phone.subscribe(on_intervall, interval=0)
Displays gyroscope data from the smartphone on a Matplotlib-Plot.

Package and upload to pip
@see this tutorial
rm -rf build/ dist/ smartphone_connector.egg-info/ && \
python3 setup.py sdist bdist_wheel && \
python3 -m twine upload dist/*
Changelog
- 0.0.115: fix audio path checking
- 0.0.113: fix reporting of
pos_x
and pos_y
on collisions - 0.0.111: support
timer
events from socketio_server - 0.0.110: add method
report(value: int | float, report_type: str, to: '__GAME_RUNNER__')
- 0.0.109: fix typo in
update_ellipse
- 0.0.108: introduce
clean_playground
method to remove all sprites and lines from the current playground, but keep the playground config as is. And minor bug fixes. - 0.0.107: can mix absolute and relative movements with
apply_movements
and apply_movement
- 0.0.106: add possibility to control movement distances
- 0.0.105: control repeats of movement sequences
- 0.0.104: add methods to apply movements to objects:
device.apply_movement(id='circle', direction=[1, 1], time_span=1, speed=3)
with device.apply_movements(id='circle') as movement:
movement(direction=[1, 0], time_span=1, speed=2)
movement(direction=[-1, 0], time_span=1, speed=2)
- 0.0.103: change function annotation of
set_timeout(callback, time, repeat=1)
instead of set_timeout(callback, interval, iteration_count=inf)
- 0.0.102: add alias methods for
subscribe_async
: set_timeout
, schedule
, execute_in
- 0.0.101: introduce
move_to(id: str, pos: [x, y], via: [x, y])
method to make jumps easyier. Event auto_movement_pos
is triggered when an auto movement within a sequence finished. - 0.0.100: support image formats
.gif
, .bmp
, .webp
- 0.0.99: introduce method
add_svg_to_playground(name: str, raw_svg: str)
to upload plain svg source text - 0.0.98 fix iteration count
- 0.0.97: introduce sound - provide a
audio_tracks
source directory in configure_playground
and start/stop sounds with play_sound(name: str, id: Optional[str])
/ stop_sound(name: Optional[str], id: Optional[str])
- 0.0.96 register multiple callback functions with
on(event, clbk)
- 0.0.95 support
border_style
and border_width
for sprites