首页 文章

Raspberry Pyusb让资源忙碌

提问于
浏览
2

我正在尝试通过USB将我的Raspberry PI连接到Pic4550 . (使用Windows c#程序,Pic功能正常!) . 所以我安装了rpi 2,pyusb,并尝试在[https://github.com/walac/pyusb/blob/master/docs/tutorial.rst][1]]的帮助下进行通信

我连接到USB设备,lsusb显示:

总线001器件006:ID 04d8:0080 Microchip Technology,Inc .

python prog找到了设备!获取正确的配置但无法写入消息:

usb.core.USBError:[Errno 16]资源忙

我尝试以sudo身份运行,我添加了规则:

SUBSYSTEM ==“usb”,ATTR ==“04d8”,ATTR ==“0080”,MODE =“666”

无论如何,我得到相同的资源忙

任何胶水帮助链接?

2 回答

  • 5

    我从这里找到了解决方案(不远...):

    Communication with the USB device in Python

    驱动程序应该像这样分离:

    if dev.is_kernel_driver_active(0):
        reattach = True
        dev.detach_kernel_driver(0)
    
  • 5

    对于像我这样的其他新手,我发布了我的解决方案 . 总结一下:仔细阅读文档 .

    Python:3.2

    PyUSB 1.0

    endpoints 是一个HID设备 .

    这是我的代码正常工作 .

    import usb.core
    import usb.util
    import sys
    from time import gmtime, strftime
    import time
    
    print ("Meteo kezdés",strftime("%Y-%m-%d %H:%M:%S", gmtime()))
    
    
    # find our device
    dev = usb.core.find(idVendor=0x04d8, idProduct=0x0080)
    
    # was it found?
    if dev is None:
        raise ValueError('Device not found')
    else:
        print ("meteo megvan!")
    
    reattach = False
    if dev.is_kernel_driver_active(0):
        reattach = True
        dev.detach_kernel_driver(0)
    
    endpoint_in = dev[0][(0,0)][0]
    endpoint_out = dev[0][(0,0)][1]
    #print ("endpoint_out",endpoint_out)
    #print ("endpoint_in",endpoint_in)
    
    # write the data
    msg = b'\x81'
    
    while 1:
        try:
            endpoint_out.write(msg)
    
            # reading
            #print ("Waiting to read...")
            #print (endpoint.bEndpointAddress)
            data = dev.read(endpoint_in.bEndpointAddress, 64, 1000)
            DHT11_H = data[0]   # a tobbi helyiertek kimaradt!!
            DHT11_R = data[4]
            BMP180_H = data[8]
            BMP180_P = (data[12]+data[13]*256+data[14]*65536)/100
    
            print (strftime("%Y-%m-%d %H:%M:%S", gmtime()),
            "DHT t=" , str(DHT11_H) , "C| ",
            "DHT r=", DHT11_R, "%| " ,
            "BMP t=", BMP180_H, "C| " ,
            "BMP p=", BMP180_P, "HPa"
            )
            #print (data)
            time.sleep(10)
        except usb.core.USBError:
            print ("USB error")
        except:
            print ("write failed")
    # end while
    
    # This is needed to release interface, otherwise attach_kernel_driver fails
    # due to "Resource busy"
    usb.util.dispose_resources(dev)
    
    # It may raise USBError if there's e.g. no kernel driver loaded at all
    if reattach:
        dev.attach_kernel_driver(0)
    

相关问题