I'm trying to have my python application interface with an NFC device via USB.
The best option seems to be pyusb, but I can't get it to connect to the libusb backend.
I keep getting
ValueError: No backend available
I've looked at the stack trace, and found that usb/backend/libusb10.py
(which is part of pyusb) is trying to load libusb-1.0.dll
to use as the backend, but it can't find it. It's not that its not in my path, its not on my computer at all!
I have installed libusb-win32 (http://libusb.org/wiki/libusb-win32), but the resulting directory only seems to include libusb0.dll. Where is libusb-1.0.dll???!
I would love to know either where to get that dll, or even a different suggestion to get pyusb to work on Windows 7.
Download and install libusb-win32-devel-filter-1.2.6.0.exe. It should work.
I had a similar issue recently trying to talk to a USB device I am developing. I scoured the web looking for libusb-1.0.dll's and had no luck. I found source code, but nothing built and ready to install. I ended up installing the libusb-win32 binaries, which is the libusb0.dll.
PyUSB will search for libusb-1.0, libusb0, and openUSB backends.
libusb0.dll was already on my system, but something was still not set up right, do PyUSB was not working.
I followed the directions here to download and install the driver using the GUI tools provided to install the filter driver, and the INF wizard. Note, it didn't work until I ran the INF wizard.
I'm pretty new to programming and I've found the lack of clear documentation/examples to string this all together rather frustrating.
I am using Python 2.6.5, libusb-win32-device.bin-0.1.12.1
and pyusb-1.0.0-a0
on a windows XP system and kept receiving ValueError: No backend available
.
Since there wasn't any real help on the web for this problem I spent a lot of time finding that ctypes util.py
uses the Path
variable to find the library file. My path
did not include windows\system32
and PYUSB
didn't find the library. I updated the path
variable and now the USB is working.
"There are two versions of the libusb API: the current libusb-1.0
API, and its legacy predecessor libusb-0.1
." (http://www.libusb.org/) "libusb-win32
is a port of the USB library libusb-0.1
to the Microsoft Windows operating systems". "Download the latest release tarball" from the same page (1.0.9
is the current version) to have libusb-1.0
equivalent, you'll find a folder Win32
, where you'll find your libusb-1.0.dll
to play with! You can even build it: http://www.libusb.org/wiki/windows_backend.
EDIT
You have to build it (download from/ http://sourceforge.net/projects/libusb/files/libusb-1.0/) since the tarball is from 2012, while the latest sources are from 2014-06-15.
To connect to your NFC device via USB using PYUSB, you will need to install the backend for that device. I do not think there is any backend for any device other than a libusb device.
To build a backend. You will need to know the driver (.sys file) for your device, so you could write a wrapper DLL to expose functionalities in the device. Your DLL would have to have a method to find device based on PID & VID, another method to open device and another method to send data and so on...
Just in case:
I haven't tried this on Windows but I had to set DYLD_LIBRARY_PATH path to circumvent this error on the Macintosh.
export DYLD_LIBRARY_PATH=/opt/local/lib
Discussion on whether or not to set this variable is here.