Friday, January 20, 2017

Connecting Phidgets on Linux

To get up and running Artisan under Linux using Phidgets is not completely trivial (but doable). While the installation of Artisan should not pose any problem if the installation instructions are followed, getting Artisan to read data from connected Phidgets needs some preparation.

To allow an app to accessing data from a Phidget requires the installation of a device driver on for the corresponding OS platform. Additionally, most modern Linux configurations restrict the access to USB devices to the root user by default. Here are instructions on how to install the Phidgets device driver and allow any user to access Phidgets connected via USB.

Phidgets driver installation

On Linux the phidgets driver has to be installed from source code. The compilation of this source requires the libusb-1.0 development libraries to be installed.

Install the libusb development package

Type the commands after the sharp sign into a terminal shell.

  • on CentOS/Redhat
# sudo yum install libusbx-devl
  • Ubuntu/Rasbian/Debian
# sudo apt-get install libusb-1.0-0-dev

Install the Phidgets libs 

Download the libs from

# cd /tmp 

Compile and install the libs

# tar zxvf libphidget22.tar.gz
# cd libphidget-*
# ./configure
# make
# sudo make install

By default the phidget libs are installed in /usr/local/lib. However, some system like Raspbian do not search that path for libraries by default. In that case you either ask configure to install the libraries in /usr/lib using the following command instead of the above sequence

./configure --prefix=/usr && make && sudo make install

or you add  /usr/local/lib to the system-wide library path

echo /usr/local/lib >> /etc/ && sudo ldconfig

or you add /usr/local/lib in your local shell every time

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

See Phidgets on OS - Linux for further details.

Extend the USB access rules

Next we install the udev rules file for Phidgets to allow access to USB devices for non-root user. Note that this is documented in some detail in the Phidgets documentation for Linux under Advanced Uses.

# cd /tmp/libphidget22-*
# sudo cp plat/linux/udev/99-libphidget22.rules /etc/udev/rules.d

for the legacy Phidgets21 driver the path in the above line is:
# sudo cp udev/99-phidgets.rules /etc/udev/rules.d

Now we have to either reboot or enter the following commands to restart the udev system respecting those new rules.

# sudo udevadm control --reload

EDIT: on some systems (e.g. Raspbian) the udevadm command seems not to be enough to establish the new rules. A reboot should work in any case.

Testing the Driver

To test the driver installation you can download the HelloWolrd Phidgets test

# cd /tmp
# wget
# unzip
# cd HelloWorld_Example
# gcc HelloWorld.c -o HelloWorld -lphidget22
# ./HelloWorld

if the above fails to list your connected Phidgets and only

# sudo ./HelloWorld

list them correctly,  you need to install the udev rules (or reboot after installation).

If the Phidgets HelloWorld does not list your Phidgets, Artisan will not be able to attach to them.

Configure Artisan

Finally, we need to select the Phidget type (here a 1048 module) as main device in Artisan via the Device Assignment dialog (menu Config >> Devices).

Thanks to Rob Gardner for his support on this!