smartphone-connector

Talk to a socketio server


License
MIT
Install
pip install smartphone-connector==0.0.115

Documentation

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')

# draw a 3x3 checker board
phone.set_grid([
    ['black','white','black'],
    ['white','black','white'],
    ['black','white','black']
], broadcast=True)

# print the letter A
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.

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. Gyroscope-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:
    # single movement
    device.apply_movement(id='circle', direction=[1, 1], time_span=1, speed=3)
    # movement sequence
    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