2016-05-10 17 views
1

私はPythonでPyUSBを使用しています。電子カードからデータを取得するためにUSBポートを聴かなければならないためです。今はラズベリーパイに接続された小さなキーボード(USB接続)からの直接入力を読み込んで自分自身を鍛える必要があります。もちろん、私は型付きのStringを読みたいとは思っていません。私はASCIIコードを得ることを期待しています。私はちょうど私のUSBキーボードからの入力を読み取ることができない。 Pythonでraw USBキーボードデータを取得するにはどうすればよいですか?

は、私はすでにいくつかのスニペットが見つかりました:「デバイスの原因のどちらか、私は16「デバイスがビジー状態ではない」か、まったく私は次の行のコメントを解除した場合、何もエラーが出る

import usb.core 
import usb.util 

VENDOR_ID = 0x0922 
PRODUCT_ID = 0x8003 

# find the USB device 
device = usb.core.find(idVendor=VENDOR_ID, 
         idProduct=PRODUCT_ID) 

# use the first/default configuration 
device.set_configuration() 
# first endpoint 
endpoint = device[0][(0,0)][0] 

# read a data packet 
attempts = 10 
data = None 
while data is None and attempts > 0: 
    try: 
     data = device.read(endpoint.bEndpointAddress, 
          endpoint.wMaxPacketSize) 
    except usb.core.USBError as e: 
     data = None 
     if e.args == ('Operation timed out',): 
      attempts -= 1 
      continue 

print data 

「をdevice.set_configuration()」あなたはキーボードのIDでVENDOR_IDとPRODUCT_IDを置き換えました。

+0

デバイスが入力装置としてOSによって使用されます。あなたはそれを直接使うことはできません。あなたはOSの情報を一切与えなかった。 –

+0

Pythonアプリケーションで使用するために、カーネルを一時的にデタッチする方法はありますか? –

+0

usbデバイスクラスの 'is_kernel_driver_active'と' detach_kernel_driver'メソッドを参照してください。 libusbのドキュメントでこれについて少し説明しています。 – patthoyts

答えて

2

私は、あなたがRaspberry Piを言及したようにLinuxを使用していると仮定しています。 python-evdevを使用して、/dev/input/のイベントデバイスからデータを読み取ることができます。例えば

from evdev import InputDevice, categorize, ecodes 

device = InputDevice("/dev/input/event3") # my keyboard 
for event in device.read_loop(): 
    if event.type == ecodes.EV_KEY: 
     print(categorize(event)) 

出力:

key event at 1462881252.506405, 30 (KEY_A), up 
key event at 1462881252.541371, 31 (KEY_S), up 
key event at 1462881252.616399, 31 (KEY_S), down 
key event at 1462881252.674422, 22 (KEY_U), down 
key event at 1462881252.730418, 31 (KEY_S), up 
key event at 1462881252.745558, 22 (KEY_U), up 
key event at 1462881252.808419, 50 (KEY_M), down 
key event at 1462881252.914552, 23 (KEY_I), down 
key event at 1462881252.925388, 50 (KEY_M), up 
key event at 1462881253.003579, 49 (KEY_N), down 
key event at 1462881253.066418, 34 (KEY_G), down 
+0

実際に私のキーボードでevent0として動作します、ありがとう、魅力的なように働いていました! :D –

+0

いいえ問題は、うれしい私が助けることができる:) –

関連する問題