Have some Erlang on your RaspberryPi (Using Erlang in embedded linux systems) Friday, June 21, 13
But first, some context (i.e. Why running Erlang on the RaspberryPi might be interesting...) Friday, June 21, 13
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
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
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
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
What are people doing with these boards? Friday, June 21, 13
Friday, June 21, 13
Friday, June 21, 13
Build your own Google Glass perhaps?... Friday, June 21, 13
Ok, but what does this have to do with Erlang? Friday, June 21, 13
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
What is Erlang? (hint: It’s pronounced “Air-lang” not “Errr-lang”) Friday, June 21, 13
• 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
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
What does Erlang look like? Friday, June 21, 13
Object Oriented Process Oriented Ruby Erlang class Foo def bar puts “hello!” end end Definition -module(foo). -export([bar/0]). bar() -> io:format(‘hello!~n’,[]). Instantiation >f = Foo.new >f.bar #=> hello! >foo:bar(). hello! >F = spawn(foo, bar, []). hello! <0.34.0> Simple comparison of Ruby to Erlang Orientation Friday, June 21, 13
How does one use Erlang? Friday, June 21, 13
process process spawn receive ErlangVM process process spawn spawn {messages} receive A typical application will use many processes, and message passing for inter-process communications Friday, June 21, 13
How is Erlang used on the RaspberryPi? Friday, June 21, 13
The components of the RaspberryPi Your interface to the world! Friday, June 21, 13
Friday, June 21, 13
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
Imagine a product called The Baconator* How might this system be modeled? (*patent/trademark/startup pending...) Friday, June 21, 13
SysFs Dispense process {messages} receive Make Bacon process Button process{messages} receive GPIO io:Read io:Write The Baconator! A.K.A. the most awesome bacon dispensing machine in the world! Bacon supervisor Instructions: Step 1) Push button Step 2) Receive bacon Step 3) NomNomNom software hardware Friday, June 21, 13
Demo: Erlang powered LED light and “switch” (Sorry, no bacon will be auto-dispensed tonight) Friday, June 21, 13
erl shell process switch process spawn receive ErlangVM erl shell process LED light process spawn receive ErlangVM {messages} {messages} Laptop RaspberryPi { { local network Friday, June 21, 13
Next steps for the Erlang and embedded systems Friday, June 21, 13
A website to watch for progress on embedded erlang Friday, June 21, 13
Side Project: Dash-dot-com (a sass-talking web controlled animatronic puppet) Friday, June 21, 13
How to get Erlang running on the RaspberryPi? (It’s incredibly easy, I swear) Friday, June 21, 13
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
Resources Friday, June 21, 13
• http://www.adafruit.com or http://www.sparkfun.com • http://www.erlang-embedded.com/ • http://www.erlang-solutions.com/section/132/download-erlang-otp • https://github.com/omerk/erl-hw/ • http://www.infoq.com/interviews/kilic-erlang-embedded • http://www.erlang-factory.com/upload/presentations/451/Wiger- erlangforembedded.pdf • http://www.1011ltd.com/web/blog/post/embedded_erlang Friday, June 21, 13
Questions?! Brian Chamberlain blchamberlain@gmail.com @breakpointer http://breakpointer.co Friday, June 21, 13

Using Erlang on the RaspberryPi to interact with the physical world

  • 1.
    Have some Erlang onyour RaspberryPi (Using Erlang in embedded linux systems) Friday, June 21, 13
  • 2.
    But first, somecontext (i.e. Why running Erlang on the RaspberryPi might be interesting...) Friday, June 21, 13
  • 3.
    nowyears agodecades agoalong 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/ internetof 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 selfis 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 tolots of interesting consumer products. There are lots of new and interesting hardware platforms. Almost all run embedded linux. Friday, June 21, 13
  • 7.
    What are peopledoing with these boards? Friday, June 21, 13
  • 8.
  • 9.
  • 10.
    Build your ownGoogle Glass perhaps?... Friday, June 21, 13
  • 11.
    Ok, but whatdoes this have to do with Erlang? Friday, June 21, 13
  • 12.
    Small, cheap hardware Linux = Lotsof 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
  • 13.
    What is Erlang? (hint:It’s pronounced “Air-lang” not “Errr-lang”) Friday, June 21, 13
  • 14.
    • Creating anddestroying 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 asample 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
  • 16.
    What does Erlanglook like? Friday, June 21, 13
  • 17.
    Object Oriented ProcessOriented Ruby Erlang class Foo def bar puts “hello!” end end Definition -module(foo). -export([bar/0]). bar() -> io:format(‘hello!~n’,[]). Instantiation >f = Foo.new >f.bar #=> hello! >foo:bar(). hello! >F = spawn(foo, bar, []). hello! <0.34.0> Simple comparison of Ruby to Erlang Orientation Friday, June 21, 13
  • 18.
    How does oneuse Erlang? Friday, June 21, 13
  • 19.
    process process spawn receive ErlangVM process process spawn spawn {messages} receive A typicalapplication will use many processes, and message passing for inter-process communications Friday, June 21, 13
  • 20.
    How is Erlangused on the RaspberryPi? Friday, June 21, 13
  • 21.
    The components ofthe RaspberryPi Your interface to the world! Friday, June 21, 13
  • 22.
  • 23.
    Accessing the GPIOpins 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 productcalled The Baconator* How might this system be modeled? (*patent/trademark/startup pending...) Friday, June 21, 13
  • 25.
    SysFs Dispense process {messages} receive Make Bacon process Button process{messages} receive GPIO io:Read io:Write The Baconator! A.K.A. themost awesome bacon dispensing machine in the world! Bacon supervisor Instructions: Step 1) Push button Step 2) Receive bacon Step 3) NomNomNom software hardware Friday, June 21, 13
  • 26.
    Demo: Erlang powered LEDlight and “switch” (Sorry, no bacon will be auto-dispensed tonight) Friday, June 21, 13
  • 27.
  • 28.
    Next steps forthe Erlang and embedded systems Friday, June 21, 13
  • 29.
    A website towatch for progress on embedded erlang Friday, June 21, 13
  • 30.
    Side Project: Dash-dot-com (asass-talking web controlled animatronic puppet) Friday, June 21, 13
  • 31.
    How to getErlang running on the RaspberryPi? (It’s incredibly easy, I swear) Friday, June 21, 13
  • 32.
    deb http://binaries.erlang-solutions.com/debian wheezycontrib 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
  • 33.
  • 34.
    • http://www.adafruit.com orhttp://www.sparkfun.com • http://www.erlang-embedded.com/ • http://www.erlang-solutions.com/section/132/download-erlang-otp • https://github.com/omerk/erl-hw/ • http://www.infoq.com/interviews/kilic-erlang-embedded • http://www.erlang-factory.com/upload/presentations/451/Wiger- erlangforembedded.pdf • http://www.1011ltd.com/web/blog/post/embedded_erlang Friday, June 21, 13
  • 35.