Embedded linux systems are gaining in popularity in the maker/hacker communities. Platforms such as the BeagleBone and RaspberryPi have created new interest in systems which can interact with the physical world. However, interacting with the physical world can be a challenge. Luckily, we have Erlang to help us out. This talk covers new hardware platforms, embedded linux systems, why Erlang is a good fit, and how you can get started hardware hacking the world with Erlang.
WordPress Websites for Engineers: Elevate Your Brand
Using Erlang on the RaspberryPi to interact with the physical world
1. Have some Erlang
on your RaspberryPi
(Using Erlang in embedded linux systems)
Friday, June 21, 13
2. But first, some context
(i.e. Why running Erlang on the
RaspberryPi might be interesting...)
Friday, June 21, 13
3. nowyears agodecades agoa long time ago
(in a galaxy far, far away...)
The progression
mainframe
desktop
laptop
smart
phone
tablet
?
We all are aware of the inevitable progression towards more diverse, smaller, and
powerful software enabled devices. It is pretty obvious. In addition to this, it’s clear that
devices are designed around certain modes of interactions and interaction duration.
However, there is a new space in consumer devices which allows for entirely different
ways of interaction (and in some cases no interaction at all).
Friday, June 21, 13
4. The quantified self/
internet of things?
FitBit/Fuel Band
WiThings BodyScale
ScoutAlarm
SmartThings
Pebble Watch
Philips Hue/ Blink(1)
NinjaBlocks
Belkin WeMo
Switch
This new space is based on
the idea that devices can be
passive observers of human
behavior, the environment,
or other sources of data.
This is the central idea of
the quantified self/internet
of things. Initially devices are
focused around health and
activity.There will be an
increasing growth in other
areas.
Friday, June 21, 13
5. Games
Information
Environment
Security
Health
The quantified self is part of
the “Internet of Things”
There are more and more devices
entering the market every month.
To date, a large number have been
focused on health (e.g. FitBit,
Nike Fuel) and security (e.g.
ScoutAlarm). Over time these
devices will enter other aspects of
human activity. Some sense and
control the home environment
(e.g. Nest), others provide
information from internet
services (e.g. Philips Hue), and
some might be purely for
entertainment and a platform for
games.
Friday, June 21, 13
6. In addition to lots of interesting consumer products.
There are lots of new and interesting hardware
platforms. Almost all run embedded linux.
Friday, June 21, 13
10. Build your own Google Glass perhaps?...
Friday, June 21, 13
11. Ok, but what does this have to
do with Erlang?
Friday, June 21, 13
12. Small, cheap hardware
Linux
=
Lots of internet
connected, linux
powered, small, cheap,
embedded devices
+
Expensive, big hardware
Erlang
=
A massively scaleable,
fault tolerant system
which runs on embedded
systems
+
The Internet
+
The phone network
+
Well, there are some parallels between
these “internet of” devices and Erlang
Friday, June 21, 13
14. • Creating and destroying processes is very fast
• Sending messages between processes is very fast
• Processes behave the same way on all operating systems
• We can have very large numbers of processes (1,000’s to 100,000’s)
• Processes share no memory and are completely independent
• The ONLY way for processes to interact is through message passing
Like some languages are object oriented,
Erlang is “process oriented”. For example,
in Erlang:
Erlang is a general purpose concurrent programming
language and runtime system. It is a functional
language which has strict evaluation, single
assignment, and dynamic typing. Originally designed
by Ericsson to support distributed, fault-tolerant,
soft-real time, non-stop applications. [from wikipedia]
Friday, June 21, 13
15. This is a sample of code from the demo portion of this presentation. It defines a module
called “net_led” which controls an LED over the local network. Erlang code is composed
into modules which expose certain functions via the “export” directive. In this module, I
export methods to spawn the LED light process on one machine.Then have a switch
function which controls the light via a different process running on a separate machine. In
the sample below there are two functions defined,“decouple” and “switch.” These take
parameters about the LED light process and then send messages to that process.The “!” is
the message send operator.
Full source can be found here: https://gist.github.com/breakpointer/5799847
Friday, June 21, 13
23. Accessing the GPIO pins through Linux SysFs
OS mapping location of pins:
Exporting a pin for use:
Reading the value of a pin as that pin is toggled high/low:
Friday, June 21, 13
24. Imagine a product called
The Baconator*
How might this system be
modeled?
(*patent/trademark/startup pending...)
Friday, June 21, 13
31. How to get Erlang running
on the RaspberryPi?
(It’s incredibly easy, I swear)
Friday, June 21, 13
32. deb http://binaries.erlang-solutions.com/debian wheezy contrib
If you have the latest Raspbian distro...
add the package location to /etc/apt/sources.list
add the public key for apt-secure
Install the package
wget -O - http://binaries.erlang-solutions.com/debian/
erlang_solutions.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install esl-erlang
From the console, fire up the Erlang REPL
erl
Friday, June 21, 13