Raspberry Pi is all the rage as we speak and I can’t see why not. Here we have a cheap and small computer, perfectly suited for your next embedded system experiment. I remember how excited I was at the time it was publicly announced and still wasn’t available at that time. However, I didn’t know how I would use it to suit my needs in developing interactive installation (which still is pretty much how I supply myself with monetary income).
I still didn’t know until I got Raspberry Pi in my hands couple of weeks ago.
Before I go into the bloody details of Raspberry Pi, I want to introduce you to the current platforms available for my work. No matter what software or programming environment I use, the base platform is always boiled down to two extremes, one is a computer (any form, PC, MacBook, you name it) and the other one is a microcontroller (most of the time this means Arduino). With the computer, I can create advance graphics that interact with different kind of input, such as movement or sound, using sensor such as webcam, Kinect or microphone. The output however is constrained to either a big screen (I count projection as a screen too) or sound, via speaker. Whenever I want to create a more physical output via daily objects, I resort to Arduino to do the job. With it, I can create blinking lights or rotating objects using input from the computer. Having said that, I’ve relied with the combination of computer -> Arduino -> Output or arduino -> computer -> output for years now. Obviously, with that configuration a big space (and cost) is required, even for a project that could’ve been simpler. That’s where I thought RPi can kick in and be a part of.
Are you still with me? Good. Sorry for the long intro, because the rest of the article seems pointless without it.
So, long story short, I ordered Raspberry Pi via Ngooprek, an Indonesian based online electronic components distributor. I think is the only place to get RPi here in Indonesia, CMIIW. After I got it, I was amazed by the small size of it, I thought this was cool. However, it took me a while to supply myself with the required accessories needed to start with RPi. At the end of the day, I got myself an SD card, HDMI cable and a card reader. Enough to start playing with RPi, since I can use my LED TV for RPi’s video output via HDMI and I can use my Android phone charger as its power supply. All set.
First, I downloaded the Debian ISO for the OS. I chose Debian instead of the Raspbian since I thought that there will be more software available for Debian. Burn the ISO to my SD card in Windows using Win32ImageWriter application. Plug the card to RPi, connect the power supply and HDMI cable and voila, I have it all running with no hassle. Can’t remember the last time I had a Linux machine running in such small time, really. Tested couple of built in app inside the OS, everything run smoothly, I thought this is good for daily computing activity such as internet surfing. Hey, for 700 MHz and 256 RAM, I had smaller PC spec back in the day and I could play game and browse, so this didn’t really surprise me. Not the end of the story though as this isn’t why I bought RPi the first time. It’s for the programming and its galore.
Having said that, I tried to test how will I develop in RPi by installing two of my favorite programming IDE for developing interactive installation, Pure Data and Processing. I counted C++ library such as openFrameworks or Cinder out because it took me a while to compile them in my MacBook, can’t imagine how long it will take me to do so in RPi. Installing Pure Data was easy breezy. It’s there on the Debian repo (see, choosing Debian wasn’t a bad idea), so some routine apt-get did the job. Opened Pure Data and surprisingly it feels pretty light. Weird, because it’s quite slow on my MacBook. Did some patching and it feels acceptable. Haven’t made any complex patches though. Anyway, patching is the name of programming in Pure Data, since you basically patch together lines from different boxes in order to create something.
What’s tricky was actually getting the sound to work. Pure Data is bread and butter a sound generator, so it’s pointless having it installed in a platform that can’t play sound. Theoretically, RPi can play sound via its headphone jack output or from its HDMI port, which will then be played back on the TV. The thing is, the output from the headphone port is nowhere near acceptable. I had horrible noises coming out when playing the Pure Data test sound patch. That’s even better than the HDMI counterpart who couldn’t play any sound at all. I’ve investigated ways to make this work in an acceptable way but so far I’ve failed. I suspect I have to do either configuring RPi and my TV to play sound via HDMI, or get a USB soundcard for the same purpose. Both way, I’m still intrigued and I’ll keep you guys updated.
On the other hand, installing Processing involved a bit of more work. Processing runs on top of Java, so obviously I need to install Java VM some way or another. I used OpenJDK 6 because I read that it was supported in ARM, the RPI’s processor. I then removed Processing’s built in Java library and linked OpenJDK to replace it. Voila, I had Processing running. Though, in the beginning Processing displayed a message saying that it didn’t like the Java VM I have. That’s the only peculiar thing happens, but Processing runs like normal anyway. What’s abnormal is the speed of it. Processing feels pretty heavy and slow during start up and preparing to run sketches. The memory indicator shows a full utilization of it and it took me like 2-3 minutes between pressing the play button and having the sketch running. Certainly with this condition it’s not efficient to have yourself doing code-test-code-test routine. As it will take some time to compile the program. I guess I have to go old school and code everything properly so I don’t have to run the sketch frequently. This is The Pi running simple Processing sketch, rectangle moving, nothing fancy.
However, it’s not all bad news. I realized that the RPi can be used as a more powerful and rich-featured Arduino. A small research in the internet provides me with many information to utilize RPi’s GPIO pins similar to Arduino’s input/output pins. Some companies like Adafruit and Element14 even produce their own RPi accessories to ease electronic prototyping and development using this board. Even better news is the fact that RPi has its own Ethernet port and capability to use WiFi so you can have Arduino+Ethernet/WiFi shield capability (even more) with half or even third of the price of that combination.
Having said that, I can see RPi being used in many more use case, either as a nostalgic standalone computer that requires not much processing power (no pun intended) or, as a more powerful version of Arduino. I just have to make peace with myself that for the time being, this board isn’t suitable to make a full-fledged DIY VJ box that I dreamed of in the first place. Maybe I should change my visual style for this tiny machine.