Skip to main content

Little Wire: the compact USB multi-tool

A look at a simple yet highly versatile multi-purpose USB tool, and an insight into the experience of creating an open source hardware project.

The Little Wire hardware comprises of only a handful of components, but don't let that fool you as it can be put to many different uses including USB GPIO, ADC and SPI/I2C/UART interface.

In the great open source tradition Little Wire builds upon the work of others, and in particular the USBtiny software implementation of low-speed USB for Atmel ATtiny microcontrollers, Limor Fried's USBtinyISP hardware, and a V-USB ATtiny in-system programmer

Little Wire is an open source hardware design and the schematic, bill of materials and PCB layout are hosted at SolderPad, with open source software provided at GitHub.

It would be easy enough to construct Little Wire using perfboard, you could make your own PCB from the supplied layout and Seeedstudio also provide complete kits.

An unassembled Little Wire

An unassembled Little Wire

The ATtiny85 microcontroller used is only an 8-pin package but its 4 I/O pins are sufficient to allow use as an AVR programmer, dual channel ADC or PWM outputs, and I2C, SPI and UART interface.

Turnkey support

The AVRDUDE software can be used with Little Wire to program Atmel AVR devices, and an alternative firmware is provided that turns it into a USB-serial adapter.

Development libraries

Version 1.0 of the Little Wire software includes development libraries for C, C++, C# and Processing that enable use as an I2C and SPI etc. interface.

Example code is provided, and the main function of the C language example for taking ADC readings is shown below.

int main(int argc, char **argv)
{
 littleWire *myLittleWire = NULL;
 unsigned int adcValue;

 myLittleWire = littleWire_connect();

 if(myLittleWire == NULL){
 printf("Little Wire could not be found!\n");
 exit(EXIT_FAILURE);
 }

 version = readFirmwareVersion(myLittleWire);
 printf("Little Wire firmware version: %d.%d\n",((version & 0xF0)>>4),(version&0x0F));

 pinMode(myLittleWire,PIN2,INPUT);

 while(1){
 adcValue=analogRead(myLittleWire, ADC_PIN2);
 printf("Value: %d\tVoltage: %f volts\n", adcValue,(float)((adcValue*5.0)/1024.0));
 delay(100);
 }
}

It appears that C will be the only supported language from version 1.1 onwards unless there is sufficient demand for other libraries to be updated.

A first open source hardware project

Little Wire is the brainchild of M.Sc Electronic Engineering student, Ihsan Kehribar, and of his first ever open source hardware project he says: “The experience is unbelievable. People started building Little Wire for themselves even before I started selling them, and there are lots of derivatives and DIY builds our there. Apart from hardware, someone wrote a Basic interpreter for the C library, someone else adapted their USB bootloader to the Little Wire hardware configuration and there are many more 'forks' at GitHub.”

It sounds as though this experience is something that he is keen to build upon and Ihsan explained to me how he is currently working on a number of new designs, going on to say: “I love building and designing things and I hope one day to develop open source hardware for a living.”

Conclusion

Little Wire provides a highly useful tool by developing a simple circuit into a finished PCB and combining this with pre-existing and original open source software. In doing this it also clearly demonstrates how an open source project can build upon the work of others, integrating hardware and software to create additional value, and in turn enabling third parties to build upon this work.

Andrew Back

Disclosure: I'm a co-founder of the SolderPad platform that Ihsan used to host the Little Wire hardware design.

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.