STATUS March 2012: Working Blink, Partially working Analog and Serial

I spend lots of time writing embedded code. Mostly in C. Beagle Board and Beagle Bone have done some great stuff, and although I still write my code in C to run there, I often want to do something small to the hardware in Perl.

Bonescript is a system using NodeJS that is similar to Arduino. You can use commands like "digitalWrite(pin, HIGH);". But it is in Javascript and NodeJS - which is very cool.

So here is my first attempt at PerlBone.

use PerlBone;

my $ledPin = mapPin('P8_3');

pinMode($ledPin, OUTPUT);

while(1) {
  digitalWrite($ledPin, HIGH);
  delay(1000);
  digitalWrite($ledPin, LOW);
  delay(1000);
}

You can even do it the setup/lopp way...

use PerlBone;

my $ledPin = mapPin('P8_3');

sub setup {
  pinMode($ledPin, OUTPUT);
}

sub loop {
  digitalWrite($ledPin, HIGH);
  delay(1000);
  digitalWrite($ledPin, LOW);
  delay(1000);
}

run();

How does it work:

  • Firstly... sorry but it pollutes your name space - to be worked on.
  • Exports useful functions (delay is just usleep from Timer::HiRes)
  • Writes the necessary commands to /sys/ to update the pins.

Obviously there is a lot more I can do... but considering this has taken less than an hour, it's a good start.

Installation

Zip

GIT

git clone git://github.com/scottp/PerlBone.git

CPAN

(not yet released)

opkg

(not yet released)

The Plan

Part 1 - Release basic system

Using the file writes of the GPIO Linux kernel module, write a basic output and reproduce some of the examples from Arduino, working on a BeagleBone.

Part 2 - Integrate to Beagle Bone

  • Create the package, get it distributed
  • Integrate into Cloud 9

Part 3 - More advanced code

  • Interrupts. There are a few ways to make this better
  • Direct Kernel code - bypass the GPIO file interface, which is very slow (a couple of ways to do this already).

See Also

  • Cloud9 for embedded Run and Debug from within Cloud9