Yet another USB RGB LED

ThingM, are launching a new product, the blink(1). It looks like it has gone well through the kickstarter goal with $42,535 pledged at the time of writing. There are no details of the design yet, but I would bet the design is pretty similar to my Mail Notifier cube. At $45 shipped its a bit expensive – particularly as my design is less than £2, even buying the components individually.

ThingM have another LED controller project, the BlinkM, that might make a cheaper alternative. It could easily be converted to USB controlled as it uses the same microcontroller (ATTiny) as my Mail Notifier. The firmware I made should be compatible and you only need three components: two zener diodes and a USB connector.

Wire the zener diodes in series to connect from USB V+ to V+ on the BlinkM. Connect the i2c data pin that goes to pin 7 to D+ and the other one to D-. Finally, connect the PWR – on the Blink M to the USB ground pin.

Upgrading Sheevaplug to Squeeze

I bought a cheap Wifi dongle (Edimax EW-7811UN) that I knew would work on the RaspberryPi and I had hoped that it would work on the Sheevaplug. Unfortunately, I couldn’t get it to install.

Instead of fighting it, I decided to upgrade. The drivers that the dongle needs are included in the linux kernel from 3.0. I decided to upgrade to Debian Squeeze, which is the same OS my Raspberry Pi uses.

Also, the OS, Ubuntu Jaunty, I’m currently using is long past its end of life.

I decided to upgrade using one of the NewIt images using these instructions.

Writing the image seems like its going to take hours. I found a method for checking the progress of dd on OS X: kill -SIGINFO <PID> will make the dd process print its progress.

Edit: This didn’t really work. I’m going to start again.

Raspberry Pi initial software install

I’ve finally received a Raspberry Pi. No doubt it will end with the other junk I don’t use.

I then downloaded Debian Squeeze, as that’s what I’m most familiar with. Installed that on a spare memory card and powered it via USB despite the warnings (I’ve found before that my laptop has over-current protection).

Tried to log in over ssh, and annoyingly discovered it is not running an SSH server. I had to get a keyboard and plug it in. Logged in, the best way to get new software is to install it via the package manager.

Instructions for wifi dongle

Update it:
sudo apt-get update
To search for the package:
apt-cache search ssh server | less
Buried in all that, I spotted:
openssh-server - secure shell (SSH) server, for secure access from remote machines
To Install it:
sudo apt-get install openssh-server
Need to sort out the users before putting this on the internet, probably change the certificates too.

Use startx to get the window manager running. The default web browser is Midori. I prefer Chrome, but there is no official build, so I install the Chromium open source version. The package is: chromium-browser and I then remove the default web browser icon.

I also want a web server, Apache is the most obvious choice (package apache2). It installed:

Starting web server: apache2apache2: bad group name www-data
Action 'start' failed.
The Apache error log may have more information.
invoke-rc.d: initscript apache2, action "start" failed.

Found others have had the same problems. To fix:

sudo groupadd www-data
sudo usermod -a -G www-data www-data

restart apache

sudo apache2ctl restart and now when you point your browser at it you should get the “It Works!” page.

I also disabled overscan to get rid of the big black borders and add the line disable_overscan=1 to /boot/config.txt


I bought myself a new toy for xmas from NewIt, a Sheevaplug. It’s a low power, ARM linux device. I plan to use it as a network attached storage maybe backup. The SheevaPlug has Ubuntu 9.04 pre-installed. Apparently its only draws 4 watts. I’m adding this to remind me of the basic setup I did if I ever have to do it again.

You can use the USB cable it comes with the get tty access, but I couldn’t be bothered, I’m happy enough to use the provided OS filesystems etc. Just plugged it in, waited a couple of minutes and use the standard root password.

The device was called UBUNTU on my routers config.

The forum at NewIt recommends regerating keys.

As I want to use it for a storage I attached my usb hard drive, typed in ls /dev/ expecting to see an entry for a hdd something like sda1. The drive was lighting up; I could hear it spinning up repeatedly.

Nothing there, so I swapped it for a memory stick, which seems to work fine. I’m guessing that the drive is drawing more than the 500ma that USB are supposed to draw. I installed lsusb and checked for the device, which didn’t appear. I added a hub, with external power supply, and attached the USB drive via that and it worked fine. Now its easy to mount the drive (my drive happens to be a WD Passport:

mkdir /media/WDPassport/
sudo mount /dev/disk/by-label/WD\\x20Passport /media/WDPassport/

Added a new user so that I don’t have to log in as root.

adduser daveh

and add to sudoers list to stop me from making stupid mistakes


annoyingly it uses vi, add the line with i

daveh ALL=(ALL) ALL

then :wq to write the file and exit

Do an apt-get update so that apt has the correct locations to get packages from.

I changed the MOTD for so I know I’m definitely booting from the SD card.

I’d also like to use it to serve my music up, so I’ve installed mt-daap. This was pretty straight forward.

Cube Hack part II (software)

I’ve created a Google code project with the snappy title of avr-usb-rgb-led. It is based on the hid-custom-rq example from AVR usb examples. I’ve added 3 new commands, one for each LED. It uses a software PWM to control the brightness of each LED based on the value set.

There is a coresponding program using libusb which allows you to send the commands, it simply allows you to set the colour of the cube with an RGB tuple on the command line.

To get the code you need to check out using subversion. To flash the chip you probably want to use the makefile.