Multiple Keyboards with RaspberryPi and OSC: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Julian (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Julian (Diskussion | Beiträge) K (→Python OSC) |
||
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
==Installation== | |||
===Python3=== | |||
<code>$ sudo apt-get update</code><br/><code>$ sudo apt-get install python3 python3-dev python3-pip gcc</code> | |||
===Python EvDev=== | |||
Über das [http://python-evdev.readthedocs.io/en/latest/index.html Python EvDev] Package können wir auf Linux' [https://en.wikipedia.org/wiki/Evdev input event interface] zugreifen.<br /> | |||
<code>$ sudo apt-get install raspberrypi-kernel-headers</code><br /><code>$ sudo pip install evdev</code> | |||
===Python OSC=== | |||
<code>$ sudo pip install python-osc</code> | |||
===Code=== | |||
<nowiki> | |||
import sys | |||
import evdev | |||
import argparse | |||
import time | |||
import os | |||
from pythonosc import osc_message_builder | |||
from pythonosc import udp_client | |||
from threading import Thread | |||
ip = "192.168.234.102" | |||
port = 12345 | |||
station = "crisprlogin" | |||
class MyThread(Thread): | |||
def __init__(self, val): | |||
Thread.__init__(self) | |||
self.val = val | |||
self.s = "" | |||
def run(self): | |||
print("starting thread:") | |||
print(self.val.fn) | |||
while(1): | |||
for event in self.val.read_loop(): | |||
if event.type == evdev.ecodes.EV_KEY: | |||
if(evdev.categorize(event).keystate): | |||
if(evdev.categorize(event).keycode == "KEY_ENTER"): | |||
client = udp_client.SimpleUDPClient(ip, port) | |||
client.send_message("/"+station+self.val.fn[self.va$ | |||
print ("send osc message id#", end='') | |||
print (self.s) | |||
self.s="" | |||
else: | |||
self.s = self.s + evdev.categorize(event).keycode[4] | |||
if __name__ == "__main__": | |||
devices = [evdev.InputDevice(fn) for fn in evdev.list_devices()] | |||
for device in devices: | |||
mythread = MyThread(evdev.InputDevice(device.fn)) | |||
mythread.start() | |||
time.sleep(0.1) | |||
</nowiki> | |||
*Noch herausfinden: Python findet die Headers nicht, wenn man das Script auf dem Desktop speichert. Speichert man sein Script in Documents, läuft es problemlos... | |||
*Wie man das Script automatisch beim einschalten des Raspis startet, findest du unter [[Raspberry Pi - Helfende Befehle]] | |||
[ | |||
Aktuelle Version vom 26. März 2018, 08:28 Uhr
Installation
Python3
$ sudo apt-get update
$ sudo apt-get install python3 python3-dev python3-pip gcc
Python EvDev
Über das Python EvDev Package können wir auf Linux' input event interface zugreifen.
$ sudo apt-get install raspberrypi-kernel-headers
$ sudo pip install evdev
Python OSC
$ sudo pip install python-osc
Code
import sys import evdev import argparse import time import os from pythonosc import osc_message_builder from pythonosc import udp_client from threading import Thread ip = "192.168.234.102" port = 12345 station = "crisprlogin" class MyThread(Thread): def __init__(self, val): Thread.__init__(self) self.val = val self.s = "" def run(self): print("starting thread:") print(self.val.fn) while(1): for event in self.val.read_loop(): if event.type == evdev.ecodes.EV_KEY: if(evdev.categorize(event).keystate): if(evdev.categorize(event).keycode == "KEY_ENTER"): client = udp_client.SimpleUDPClient(ip, port) client.send_message("/"+station+self.val.fn[self.va$ print ("send osc message id#", end='') print (self.s) self.s="" else: self.s = self.s + evdev.categorize(event).keycode[4] if __name__ == "__main__": devices = [evdev.InputDevice(fn) for fn in evdev.list_devices()] for device in devices: mythread = MyThread(evdev.InputDevice(device.fn)) mythread.start() time.sleep(0.1)
- Noch herausfinden: Python findet die Headers nicht, wenn man das Script auf dem Desktop speichert. Speichert man sein Script in Documents, läuft es problemlos...
- Wie man das Script automatisch beim einschalten des Raspis startet, findest du unter Raspberry Pi - Helfende Befehle