Monday 18 November 2013

20 months later, a new project..

So er, it's been 20 months since my last blog post. Where the hell did that go? A few LAN parties, many new game releases, a few books read etc, but more recently a new project!..

You may or may not have heard about something called the Raspberry Pi . A bit of a daft name, yes. But the Raspberry Pi, or RPi as it's known, is a complete computer on a credit card sized circuit board. And it's cheap. Like £30 cheap. Not bad for a fully functional computer!

This little device is very capable, given it's price. People are using it as a media centre running a version of XBMC (it can render 1080p video over HDMI) , a lot of people are using it as an aid to learning to code, some for gaming - this thing even runs Quake 3 Arena!, and some are using it to tinker around with "other" things. And I fall into that group.

Having delved into various forms of coding over the years, from Assembler(Yuck!) to BASIC to C++ to DarkBASIC to JAVA (omg NO THANKS!) I believe the time has come for me to have a play with the hardware side of things. The RPi doesn't come with a pre-installed operating system as such, but is based on LINUX, and a number of tools are freely available for it. One language that looks easy enough to learn is Python , and this apparently works very well with the RPi. So I headed over to Codecademy and worked my way through a few basic Python lessons. Sure enough it is quite simple. At least the first few lessons are, I haven't got very far yet :)

As I said, I want to learn a little about hardware, and more specifically how it interacts and interfaces with software. The fact that a program can run within a computer and directly control real-world tangible devices fascinates me. So armed with my RPi and a few electronic bits and bobs gleaned from ebay, I set my sights on intergalactic robotic domination. But I thought I'd better start off small, so I present to you my "Python-based RPi controlled Flashing LED" project..

The bits.

Here we have the RPi itself, a 'breadboard' (for easy circuit prototyping), a few random electronic components, and a selection of 'male to female' jumper leads. As you can see, the RPi has an SD Card plugged in one end (this holds the software). Also connected here are two USB devices (mouse and keyboard), a HDMI device (monitor) and the Ethernet for Internet/Network access. If you enlarge the image (by clicking on it) you will see a row of pins to the bottom-right of the board. These are the GPIO pins (General Purpose Input Output) and these are what we use to interface to external hardware.

The circuit.

This is about as basic as an electronic circuit will get.The brown jumper is linking a GPIO pin on the RPi to the Positive leg (otherwise known as the Anode) on the LED. I have then connected a resistor to the Negative leg (Cathode) in series (more about electronic circuits in future posts unless I burn the house down first) and then close the circuit back to the RPi by connecting the black jumper to the Ground GPIO pin. The resistor is there to protect the LED because the RPi logic runs at 3.3Volts, and the LED is only 1.7V, but that's a bit technical and not for this particular post :)

So that's the hardware wired up, now onto the software. Using the free Python editor that comes with the RPi software suite, I created this program...

Apologies for the picture, I haven't learned how to do screen grabs on the RPi yet.

I've commented every line to explain what the program is doing. The part before the 'While' loop is a bit geeky, but basically I have imported a pre-defined library so that I have direct access to the GPIO pins on the board. Thank you to whoever wrote that library :)

So after some administration rights issues which I won't bore you with here, I ran the program and here's what happened...



Not exactly mind blowing I agree, but it's the first experiment of what I hope to be many. In future blogs I intend to include circuit diagrams and better screen captures. Unless something else comes along in the meantime, I'm easily distracte...oooooh, Top Gear is on...