kivy_oscpy
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
kivy_oscpy [2020/10/30 09:41] – Tag0 Added: kivy,protocole_reseau,python,sb serge | kivy_oscpy [2021/08/05 07:30] (Version actuelle) – [Envoi d'un bundle avec un Client] serge | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Kivy oscpy ====== | + | ====== Kivy: oscpy ====== |
+ | <WRAP center round box 60% centeralign> | ||
+ | **{{tagpage> | ||
+ | **[[http:// | ||
- | {{tag> | + | **[[les_pages_kivy_en_details|Les pages Kivy en détails]]** |
+ | </ | ||
+ | <WRAP center round box 60% centeralign> | ||
+ | **A modern implementation of OSC for python 3**\\ | ||
+ | **C' | ||
+ | </ | ||
+ | |||
+ | Ce package python fait partie du projet Kivy, mais il peut être utilisé indépendamment. | ||
+ | |||
+ | ===== Ressources ===== | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | ===== Installation ===== | ||
+ | |||
+ | sudo pip3 install oscpy | ||
+ | |||
+ | =====Exemple tiré de ===== | ||
+ | * **[[https:// | ||
+ | |||
+ | ====Extraits==== | ||
+ | Il n'est pas possible d' | ||
+ | |||
+ | J'ai écrit quelque part que l'OSC ne supporte pas l' | ||
+ | <code python> | ||
+ | |||
+ | ===main.py=== | ||
+ | [[https:// | ||
+ | |||
+ | <code python> | ||
+ | class Accelerometer(BoxLayout): | ||
+ | |||
+ | def __init__(self, | ||
+ | super().__init__() | ||
+ | self.app = app | ||
+ | Clock.schedule_interval(self.update_display, | ||
+ | ... | ||
+ | |||
+ | def update_display(self, | ||
+ | root = self.app.get_running_app() | ||
+ | self.ids.activ_sensor.text = f" | ||
+ | |||
+ | def on_activity(self, | ||
+ | """ | ||
+ | |||
+ | r = self.app.get_running_app() | ||
+ | r.client.send_message(b'/ | ||
+ | |||
+ | class AccelerometerApp(App): | ||
+ | |||
+ | def build(self): | ||
+ | ... | ||
+ | self.server = OSCThreadServer() | ||
+ | self.server.listen( address=b' | ||
+ | port=3003, | ||
+ | default=True) | ||
+ | ... | ||
+ | self.server.bind(b'/ | ||
+ | self.client = OSCClient(b' | ||
+ | |||
+ | def on_sensor(self, | ||
+ | self.sensor = sens.decode(' | ||
+ | </ | ||
+ | |||
+ | ===service.py=== | ||
+ | [[https:// | ||
+ | |||
+ | <code python> | ||
+ | ... | ||
+ | from oscpy.client import OSCClient | ||
+ | from oscpy.server import OSCThreadServer | ||
+ | ... | ||
+ | class AccelerometerService: | ||
+ | ... | ||
+ | def init_osc(self): | ||
+ | """ | ||
+ | mais impossible d' | ||
+ | """ | ||
+ | self.server = OSCThreadServer() | ||
+ | self.server.listen(' | ||
+ | # Les callbacks du serveur | ||
+ | self.server.bind(b'/ | ||
+ | self.server.bind(b'/ | ||
+ | self.server.bind(b'/ | ||
+ | # Un simple client | ||
+ | self.client = OSCClient(b' | ||
+ | ... | ||
+ | def on_activity(self, | ||
+ | print(" | ||
+ | self.activity = int(msg) | ||
+ | ... | ||
+ | def get_acceleration(self): | ||
+ | if self.status: | ||
+ | a, b, c = 0,0,0 | ||
+ | ... | ||
+ | if self.sensor_enabled != 0: | ||
+ | # Set dans les arrays | ||
+ | self.acc_x[self.num] = a | ||
+ | self.acc_y[self.num] = b | ||
+ | self.acc_z[self.num] = c | ||
+ | self.acc_act[self.num] = self.activity | ||
+ | acc_message = [a, b, c, self.activity, | ||
+ | self.client.send_message(b'/ | ||
+ | ... | ||
+ | def run(self): | ||
+ | while self.loop: | ||
+ | self.get_acceleration() | ||
+ | sleep(0.02) | ||
+ | |||
+ | if __name__ == ' | ||
+ | ACCELEROMETER = AccelerometerService() | ||
+ | ACCELEROMETER.run() | ||
+ | </ | ||
+ | |||
+ | =====Bundle===== | ||
+ | |||
+ | ====Envoi d'un bundle avec un Client==== | ||
+ | <code python osc.py> | ||
+ | from oscpy.client import OSCClient | ||
+ | |||
+ | class OscClient: | ||
+ | |||
+ | def __init__(self, | ||
+ | |||
+ | self.ip = kwargs.get(' | ||
+ | self.port = kwargs.get(' | ||
+ | |||
+ | self.client = OSCClient(self.ip, | ||
+ | |||
+ | def send_depth(self, | ||
+ | self.client.send_message(b'/ | ||
+ | |||
+ | def send_bundle(self, | ||
+ | bund = [] | ||
+ | |||
+ | for i, msg in enumerate(messages): | ||
+ | tag = ('/' | ||
+ | print(tag, msg) | ||
+ | bund.append([tag, | ||
+ | |||
+ | self.client.send_bundle(bund) | ||
+ | |||
+ | |||
+ | if __name__ == " | ||
+ | |||
+ | messages = [[3.2, 3, 4], [55.6, 12, 80]] | ||
+ | cli = OscClient(**{' | ||
+ | cli.send_bundle(messages) | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | b'/ | ||
+ | b'/ | ||
+ | </ | ||
+ | ====Réception d'un bundle sur un Server==== | ||
+ | <code python osc_server_test.py> | ||
+ | from time import sleep | ||
+ | from oscpy.server import OSCThreadServer | ||
+ | |||
+ | dico = {} | ||
+ | def on_tag(*args): | ||
+ | print(args) | ||
+ | tag = int(args[0].decode(' | ||
+ | print(tag) | ||
+ | dico[tag] = args[1:] | ||
+ | print(dico) | ||
+ | |||
+ | def default_handler(*args): | ||
+ | print(" | ||
+ | |||
+ | server = OSCThreadServer() | ||
+ | server.listen(b' | ||
+ | server.default_handler = default_handler | ||
+ | |||
+ | for i in range(10): | ||
+ | tag = ('/' | ||
+ | server.bind(tag, | ||
+ | |||
+ | while 1: | ||
+ | sleep(0.1) | ||
+ | |||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | (b'/ | ||
+ | 0 | ||
+ | {0: (3.200000047683716, | ||
+ | (b'/ | ||
+ | 1 | ||
+ | {0: (3.200000047683716, | ||
+ | </ | ||
+ | |||
+ | {{tag> |
kivy_oscpy.1604050910.txt.gz · Dernière modification : 2020/10/30 09:41 de serge