Multiple Keyboards with RaspberryPi and OSC: Unterschied zwischen den Versionen

Aus hyperdramatik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:


*'''Installation:'''
==Installation==
*erstmal immer apt-get updaten mit
''sudo apt-get update''
*dann eigentlich wie in diesem doc beschrieben:
http://python-evdev.readthedocs.io/en/latest/index.html


''$ sudo apt-get install python3-dev python3-pip gcc''
===Python3===
<code>$ sudo apt-get update</code><br/><code>$ sudo apt-get install python3 python3-dev python3-pip gcc</code>


nur die Linux Headers installiert man auf dem Raspi mit
===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>


''$ sudo apt-get install raspberrypi-kernel-headers''
===Python OSC===
<code>$ sudo pip install python-osc</code>


(anstatt mit ''apt-get install linux-headers-$(uname -r)'')
===Code===
<nowiki>
import sys
import evdev
import argparse
import time
import os


''$ sudo pip install evdev''
from pythonosc import osc_message_builder
from pythonosc import udp_client
from threading import Thread


* osc muss man auch noch für python installieren:
''$sudo apt-get install python-osc''


*Quelltext: hier noch rein kopieren
ip = "192.168.234.102"
port = 12345
station = "crisprlogin"


*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...


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]


*'''Script beim Start des Raspis ausführen:'''
http://www.instructables.com/id/Raspberry-Pi-Launch-Python-script-on-startup/


 
if __name__ == "__main__":
*'''Das Raspi soll natürlich auch nicht in Ruhezustand gehen... Die Lösung:'''
    devices = [evdev.InputDevice(fn) for fn in evdev.list_devices()]
 
    for device in devices:
Open a root terminal in raspberry Pi. Now you need to edit your script that's starting X. In the default build with lightdm.
        mythread = MyThread(evdev.InputDevice(device.fn))
 
        mythread.start()
Open "lightdm.conf" file located in,
        time.sleep(0.1)
 
</nowiki>
/etc/lightdm/lightdm.conf
*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]]
Add below line in to SeatDefault section.
 
[SeatDefaults]
 
xserver-command=X -s 0 -dpms
 
Restart your Raspberry Pi.

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