How	
  I	
  Got	
  Back	
  my	
  Coding	
  Mojo!	
  
Mark	
  West	
  
Safe	
  Harbour	
  
What	
  is	
  Mojo?	
  
 
	
   “Any	
  applica+on	
  that	
  can	
  be	
  
wri3en	
  in	
  JavaScript,	
  will	
  
eventually	
  be	
  wri3en	
  in	
  
JavaScript”	
  
James	
  Atwood	
  (founder,	
  	
  stackoverflow.com)	
  
NodeBot	
  Rover	
  
NodeBot	
  Rover	
  Demo	
  
NodeBot	
  Rover	
  Component	
  Overview	
  
Hardware	
  
Computer	
  
Micro	
  
Controller	
  
Camera	
  
Chassis	
  
Pan	
  &	
  Tilt	
  
SoAware	
  
Speech	
  
Robot	
  
Control	
  
Web	
  
Server	
  
IntegraFon	
  
Other	
  
The	
  Arduino	
  Ecosystem	
  
•  MicroController	
  plaLorm.	
  
•  Many	
  different	
  Arduino	
  
models.	
  
•  Open	
  Source	
  design.	
  
•  MicroControllers	
  extensible	
  
via	
  “Shields”.	
  
PuSng	
  the	
  Hardware	
  Together	
  
Two	
  Servos	
  
for	
  Camera	
  
Pan	
  &	
  Tilt	
  
Servos	
  wired	
  
to	
  Arduino	
  
Chassis	
  
Raspberry	
  PI	
  	
  
In	
  PlasFc	
  Case	
  
WIFI	
  Dongle	
  
Raspberry	
  PI	
  
Camera	
  
Wired	
  directly	
  
to	
  the	
  
Raspberry	
  PI	
  
 
	
  
	
  
	
  
	
  
	
  
Actuators	
  
Sensors	
  
Nervous	
  System	
  
Raspberry	
  PI	
  2	
  Raspberry	
  PI	
  Cam	
  
Arduberry	
  Microcontroller	
   Arduino	
  Chassis	
   Servo	
  
Servo	
  
Brain	
  
NodeBot	
  Rover	
  Hardware	
  
Combining	
  the	
  Raspberry	
  PI	
  &	
  Arduino	
  
Raspberry	
  PI	
  
•  Linux	
  PC.	
  
•  Supports	
  USB	
  peripherals.	
  
•  Programming.	
  
Arduino	
  PlaNorm	
  
•  MicroController.	
  
•  Robust.	
  
•  Flexibility	
  (input/output).	
  
The	
  whole	
  is	
  greater	
  than	
  the	
  sum	
  of	
  parts!	
  
 
	
  
	
  
	
  
	
  
	
  
Actuators	
  
Sensors	
  
Nervous	
  System	
  
Raspberry	
  PI	
  2	
  Raspberry	
  PI	
  Cam	
  
Arduberry	
  Microcontroller	
   Arduino	
  Chassis	
   Servo	
  
Servo	
  
Brain	
  
NodeBot	
  Rover	
  Hardware	
  
NodeBot	
  Rover	
  Component	
  Overview	
  
Hardware	
  
Raspberry	
  	
  
PI	
  
Arduberry	
  
(Arduino)	
  
Pi	
  Cam	
  
Zumo	
  
Chassis	
  
Servos	
  
SoAware	
  
Speech	
  
Robot	
  
Control	
  
Web	
  
Server	
  
IntegraFon	
  
Other	
  
 
	
  
	
  
	
  
	
  
	
  
Raspberry	
  PI	
  2	
  
Arduberry	
  
Servo	
  
Soware	
  Communica]on	
  across	
  
Hardware	
  Layers	
  
Servo	
  
Raspberry	
  PI	
  	
   Chassis	
  
JavaScriptPI	
  	
   Binary	
  (Compiled	
  C	
  /	
  C++)	
  	
  
The	
  NodeBots	
  Movement	
  
Source	
  :	
  nodebots.io	
  
1.  Maturity	
  
2.  Community	
  
3.  DSL	
  
4.  Portability	
  
5.  Open	
  Source	
  
6.  Node.js	
  ecosystem	
  
7.  REPL	
  
Benefits	
  of	
  using	
  Johnny-­‐Five	
  
var five = require("johnny-five");
var myBoard = new five.Board();
myBoard.on("ready", function() {
var myLed = new five.Led(13);
myLed.blink(500);
this.repl.inject({
replLed: myLed
});
});
Imports	
  J5	
  Dependancy	
  
Adds	
  LED	
  instance	
  to	
  REPL	
  
Declares	
  LED	
  as	
  connected	
  to	
  UNO	
  Pin	
  13	
  
Blinks	
  LED	
  every	
  500	
  milliseconds	
  
Code	
  block	
  triggered	
  by	
  UNO	
  ”Ready”	
  Event	
  
Ini]alises	
  UNO	
  
Johnny-­‐Five	
  Code	
  Example	
  
hhps://vimeo.com/134953425	
  
	
  
 
	
  
	
  
	
  
	
  
	
  
Arduberry	
  
Servo	
  
Bridging	
  the	
  gap	
  with	
  Firmata	
  
Servo	
  
Raspberry	
  PI	
  	
   Chassis	
  
Johnny-­‐Five	
  
(Firmata	
  Client)	
  
Std.	
  Firmata	
  
(Firmata	
  Server)	
  
JavaScriptPI	
  	
   Binary	
  (Compiled	
  C	
  /	
  C++)	
  	
  
	
  
GeSng	
  Started	
  with	
  Johnny-­‐Five	
  
1.  Buy	
  an	
  Arduino	
  Experimenters	
  Kit.	
  
2.  Follow	
  the	
  tutorials	
  at	
  hSp://node-­‐ardx.org.	
  
3.  Visit	
  hSp://johnny-­‐five.io	
  for	
  more	
  
informa]on	
  and	
  inspira]on.	
  
NodeBot	
  Rover	
  Component	
  Overview	
  
Hardware	
  
Raspberry	
  	
  
PI	
  
Arduberry	
  
(Arduino)	
  
Pi	
  Cam	
  
Zumo	
  
Chassis	
  
Servos	
  
SoAware	
  
Speech	
  
Johnny-­‐
Five	
  
Web	
  
Server	
  
IntegraFon	
  
Other	
  
Speech	
  Recogni]on	
  Requirements	
  
Need	
  to	
  have 	
  	
  
•  Quality	
  and	
  speed	
  of	
  
speech	
  recogni]on.	
  
•  Free,	
  no	
  restric]ons.	
  
•  Soware	
  based.	
  
•  JavaScript.	
  
Nice	
  to	
  have	
  
•  Speech	
  to	
  text.	
  
•  One	
  stop	
  service.	
  
•  Bahle	
  tested.	
  
Web	
  Speech	
  
API	
  
(limited	
  to	
  Google	
  Chrome)	
  
Web	
  Speech	
  API	
  :	
  Configura]on	
  
Web	
  Speech	
  API	
  :	
  Events	
  
Web	
  Speech	
  API	
  :	
  Control	
  
Speech	
  Demo	
  
Buhon	
  press	
  and	
  release	
  connected	
  to	
  
Web	
  Speech	
  API	
  start	
  and	
  stop	
  Control	
  
methods.	
  
Con+nuous	
  dicta+on	
  switched	
  on,	
  to	
  avoid	
  
cuSng	
  commands	
  short.	
  	
  
Interim	
  results	
  switched	
  on	
  –	
  shown	
  in	
  
green	
  text	
  (final	
  results	
  in	
  white).	
  
Each	
  set	
  of	
  results	
  checked	
  for	
  uniqueness	
  
to	
  avoid	
  sending	
  duplicate	
  commands	
  to	
  
the	
  Robot.	
  
Web	
  Speech	
  API	
  :	
  
Robot	
  
NodeBot	
  Rover	
  Component	
  Overview	
  
Hardware	
  
Raspberry	
  	
  
PI	
  
Arduberry	
  
(Arduino)	
  
Pi	
  Cam	
  
Zumo	
  
Chassis	
  
Servos	
  
SoAware	
  
HTML5	
  
Speech	
  
Johnny-­‐
Five	
  
Web	
  	
  
Server	
  
IntegraFon	
  
Other	
  
Node.js	
  
Express	
  Web	
  
Server	
  
(17	
  lines	
  of	
  code)	
  
NodeBot	
  Rover	
  Component	
  Overview	
  
Hardware	
  
Raspberry	
  	
  
PI	
  
Arduberry	
  
(Arduino)	
  
Pi	
  Cam	
  
Zumo	
  
Chassis	
  
Servos	
  
SoAware	
  
Speech	
  
Johnny-­‐
Five	
  
Express	
  
IntegraFon	
  
Other	
  
Johnny-­‐Five	
  	
  
Process	
  
Express	
  	
  
Process	
  
Raspberry	
  PI	
  2	
  
WE	
  
Browser	
  
HTTPS	
  
NodeBot	
  
Rover	
  
Hardware	
  
	
  
Firmata	
  	
  
	
  
Johnny-­‐Five	
  	
  
Process	
  
Express	
  	
  
Process	
  
Raspberry	
  PI	
  2	
  
WE	
  
Browser	
  
HTTPS	
  
NodeBot	
  
Rover	
  
Hardware	
  
	
  
Firmata	
  	
  
	
  
MQTT	
  
Message	
  Broker	
  
MQTT	
  
MQTT	
  over	
  
WebSockets	
  
Commands	
  
Acknowledgements	
  
MQTT.js	
  
Client	
  
MQTT.js	
  
Client	
  
Why	
  Add	
  a	
  Message	
  Broker?	
  
•  Sepera]on	
  of	
  
concerns.	
  
•  Isolate	
  main	
  
components	
  for	
  
easier	
  tes]ng.	
  
MQTT	
  –	
  MQ	
  Telemetry	
  Transport	
  
	
  
•  Internet	
  of	
  Things	
  connec]vity	
  protocol.	
  
•  Designed	
  to	
  be	
  lightweight	
  with	
  a	
  small	
  footprint	
  and	
  lihle	
  
overhead.	
  
•  Is	
  a	
  protocol	
  and	
  a	
  Pub-­‐Sub	
  Message	
  Broker.	
  
•  Used	
  by	
  Facebook	
  for	
  pushing	
  updates	
  to	
  mobile	
  clients.	
  
Adding	
  MQTT	
  to	
  the	
  NodeBot	
  Rover	
  
Broker	
  
•  Public	
  MQTT	
  Broker	
  
–  Many	
  Public	
  Brokers	
  exist.	
  
–  One	
  less	
  process	
  to	
  run	
  on	
  
Raspberry	
  PI.	
  
Client	
  
•  MQTT.js	
  
–  Provides	
  an	
  MQTT	
  client	
  
library	
  for	
  Node.js.	
  
–  Extremely	
  simple	
  to	
  use.	
  
–  Integrates	
  seamlessly	
  with	
  
Johnny-­‐Five.	
  
	
  
MQTT.js	
  (Node.js)	
  Client	
  Example	
  
MQTT	
  Over	
  WebSockets	
  with	
  MQTT.js	
  
•  MQTT.js	
  is	
  a	
  Node.js	
  package	
  and	
  is	
  
meant	
  for	
  use	
  on	
  the	
  Server	
  Side.	
  
•  To	
  allow	
  MQTT.js	
  to	
  run	
  from	
  the	
  
Browser,	
  we	
  first	
  needed	
  to	
  
”Browserify”	
  the	
  MQTT	
  library.	
  
•  We	
  could	
  then	
  access	
  the	
  
”Browserified”	
  MQTT	
  client	
  library	
  
from	
  the	
  Browser.	
  
•  This	
  solu]on	
  requires	
  that	
  your	
  MQTT	
  
Broker	
  has	
  a	
  WebSocket	
  endpoint.	
  
MQTT	
  Over	
  WebSockets	
  Demo	
  
NodeBot	
  Rover	
  Component	
  Overview	
  
Hardware	
  
Raspberry	
  	
  
PI	
  
Arduberry	
  
(Arduino)	
  
Pi	
  Cam	
  
Zumo	
  
Chassis	
  
Servos	
  
SoAware	
  
HTML5	
  
Speech	
  
Johnny-­‐
Five	
  
Express	
  
MQTT	
  &	
  
WebSocket	
  
Other	
  
Node.js	
  Twiher	
  Client	
  
•  Fully	
  fledged	
  Twiher	
  Client:	
  
–  Asynchronous.	
  
–  Supports	
  REST	
  API	
  (write	
  and	
  write)	
  
–  Supports	
  Streaming	
  API	
  (events	
  and	
  tweets).	
  
•  Requires	
  developer	
  creden]als	
  from	
  Twiher:	
  
–  Trivial	
  to	
  get	
  hold	
  of.	
  
Node.js	
  Twiher	
  Client	
  REST	
  Example	
  
Video	
  Streaming	
  via	
  Mo]on	
  
•  MoFon:	
  Soware	
  Mo]on	
  Detector.	
  
•  Provides	
  streaming	
  video	
  with	
  possibility	
  to	
  create	
  
snapshots.	
  
•  Good	
  performance	
  on	
  the	
  Raspberry	
  PI.	
  
	
  
•  PotenFal	
  side	
  project:	
  get	
  Robot	
  to	
  follow	
  moving	
  objects?	
  
Other	
  things	
  I	
  picked	
  up	
  
•  Git	
  /	
  GitHub	
  
•  HTML5	
  
•  CSS	
  
•  Linux	
  
NodeBot	
  Rover	
  Component	
  Overview	
  
Hardware	
  
Raspberry	
  	
  
PI	
  
Arduberry	
  
(Arduino)	
  
Pi	
  Cam	
  
Zumo	
  
Chassis	
  
Servos	
  
SoAware	
  
HTML5	
  
Speech	
  
Johnny-­‐
Five	
  
Express	
  
MQTT	
  &	
  
WebSocket	
  
TwiSer/
MoFon/
Git/GitHub/
CSS/Linux	
  
So	
  Did	
  I	
  Get	
  My	
  
Coding	
  Mojo	
  
Back?	
  
Land	
  
Turn	
  
Take-­‐
off	
  
@markawest

JavaOne 2015 : How I Rediscovered My Coding Mojo by Building an IoT/Robotics Prototype

  • 1.
    How  I  Got  Back  my  Coding  Mojo!   Mark  West  
  • 2.
  • 3.
  • 7.
        “Any  applica+on  that  can  be   wri3en  in  JavaScript,  will   eventually  be  wri3en  in   JavaScript”   James  Atwood  (founder,    stackoverflow.com)  
  • 10.
  • 11.
  • 12.
    NodeBot  Rover  Component  Overview   Hardware   Computer   Micro   Controller   Camera   Chassis   Pan  &  Tilt   SoAware   Speech   Robot   Control   Web   Server   IntegraFon   Other  
  • 13.
    The  Arduino  Ecosystem   •  MicroController  plaLorm.   •  Many  different  Arduino   models.   •  Open  Source  design.   •  MicroControllers  extensible   via  “Shields”.  
  • 14.
  • 18.
    Two  Servos   for  Camera   Pan  &  Tilt   Servos  wired   to  Arduino   Chassis   Raspberry  PI     In  PlasFc  Case   WIFI  Dongle  
  • 19.
    Raspberry  PI   Camera   Wired  directly   to  the   Raspberry  PI  
  • 20.
                Actuators   Sensors   Nervous  System   Raspberry  PI  2  Raspberry  PI  Cam   Arduberry  Microcontroller   Arduino  Chassis   Servo   Servo   Brain   NodeBot  Rover  Hardware  
  • 21.
    Combining  the  Raspberry  PI  &  Arduino   Raspberry  PI   •  Linux  PC.   •  Supports  USB  peripherals.   •  Programming.   Arduino  PlaNorm   •  MicroController.   •  Robust.   •  Flexibility  (input/output).   The  whole  is  greater  than  the  sum  of  parts!  
  • 22.
                Actuators   Sensors   Nervous  System   Raspberry  PI  2  Raspberry  PI  Cam   Arduberry  Microcontroller   Arduino  Chassis   Servo   Servo   Brain   NodeBot  Rover  Hardware  
  • 23.
    NodeBot  Rover  Component  Overview   Hardware   Raspberry     PI   Arduberry   (Arduino)   Pi  Cam   Zumo   Chassis   Servos   SoAware   Speech   Robot   Control   Web   Server   IntegraFon   Other  
  • 24.
                Raspberry  PI  2   Arduberry   Servo   Soware  Communica]on  across   Hardware  Layers   Servo   Raspberry  PI     Chassis   JavaScriptPI     Binary  (Compiled  C  /  C++)    
  • 25.
    The  NodeBots  Movement   Source  :  nodebots.io  
  • 27.
    1.  Maturity   2. Community   3.  DSL   4.  Portability   5.  Open  Source   6.  Node.js  ecosystem   7.  REPL   Benefits  of  using  Johnny-­‐Five  
  • 28.
    var five =require("johnny-five"); var myBoard = new five.Board(); myBoard.on("ready", function() { var myLed = new five.Led(13); myLed.blink(500); this.repl.inject({ replLed: myLed }); }); Imports  J5  Dependancy   Adds  LED  instance  to  REPL   Declares  LED  as  connected  to  UNO  Pin  13   Blinks  LED  every  500  milliseconds   Code  block  triggered  by  UNO  ”Ready”  Event   Ini]alises  UNO   Johnny-­‐Five  Code  Example  
  • 29.
  • 30.
                Arduberry   Servo   Bridging  the  gap  with  Firmata   Servo   Raspberry  PI     Chassis   Johnny-­‐Five   (Firmata  Client)   Std.  Firmata   (Firmata  Server)   JavaScriptPI     Binary  (Compiled  C  /  C++)      
  • 32.
    GeSng  Started  with  Johnny-­‐Five   1.  Buy  an  Arduino  Experimenters  Kit.   2.  Follow  the  tutorials  at  hSp://node-­‐ardx.org.   3.  Visit  hSp://johnny-­‐five.io  for  more   informa]on  and  inspira]on.  
  • 33.
    NodeBot  Rover  Component  Overview   Hardware   Raspberry     PI   Arduberry   (Arduino)   Pi  Cam   Zumo   Chassis   Servos   SoAware   Speech   Johnny-­‐ Five   Web   Server   IntegraFon   Other  
  • 34.
    Speech  Recogni]on  Requirements   Need  to  have     •  Quality  and  speed  of   speech  recogni]on.   •  Free,  no  restric]ons.   •  Soware  based.   •  JavaScript.   Nice  to  have   •  Speech  to  text.   •  One  stop  service.   •  Bahle  tested.  
  • 37.
    Web  Speech   API   (limited  to  Google  Chrome)  
  • 38.
    Web  Speech  API  :  Configura]on  
  • 39.
    Web  Speech  API  :  Events  
  • 40.
    Web  Speech  API  :  Control  
  • 41.
  • 42.
    Buhon  press  and  release  connected  to   Web  Speech  API  start  and  stop  Control   methods.   Con+nuous  dicta+on  switched  on,  to  avoid   cuSng  commands  short.     Interim  results  switched  on  –  shown  in   green  text  (final  results  in  white).   Each  set  of  results  checked  for  uniqueness   to  avoid  sending  duplicate  commands  to   the  Robot.   Web  Speech  API  :   Robot  
  • 43.
    NodeBot  Rover  Component  Overview   Hardware   Raspberry     PI   Arduberry   (Arduino)   Pi  Cam   Zumo   Chassis   Servos   SoAware   HTML5   Speech   Johnny-­‐ Five   Web     Server   IntegraFon   Other  
  • 45.
    Node.js   Express  Web   Server   (17  lines  of  code)  
  • 46.
    NodeBot  Rover  Component  Overview   Hardware   Raspberry     PI   Arduberry   (Arduino)   Pi  Cam   Zumo   Chassis   Servos   SoAware   Speech   Johnny-­‐ Five   Express   IntegraFon   Other  
  • 47.
    Johnny-­‐Five     Process   Express     Process   Raspberry  PI  2   WE   Browser   HTTPS   NodeBot   Rover   Hardware     Firmata      
  • 48.
    Johnny-­‐Five     Process   Express     Process   Raspberry  PI  2   WE   Browser   HTTPS   NodeBot   Rover   Hardware     Firmata       MQTT   Message  Broker   MQTT   MQTT  over   WebSockets   Commands   Acknowledgements   MQTT.js   Client   MQTT.js   Client  
  • 49.
    Why  Add  a  Message  Broker?   •  Sepera]on  of   concerns.   •  Isolate  main   components  for   easier  tes]ng.  
  • 50.
    MQTT  –  MQ  Telemetry  Transport     •  Internet  of  Things  connec]vity  protocol.   •  Designed  to  be  lightweight  with  a  small  footprint  and  lihle   overhead.   •  Is  a  protocol  and  a  Pub-­‐Sub  Message  Broker.   •  Used  by  Facebook  for  pushing  updates  to  mobile  clients.  
  • 51.
    Adding  MQTT  to  the  NodeBot  Rover   Broker   •  Public  MQTT  Broker   –  Many  Public  Brokers  exist.   –  One  less  process  to  run  on   Raspberry  PI.   Client   •  MQTT.js   –  Provides  an  MQTT  client   library  for  Node.js.   –  Extremely  simple  to  use.   –  Integrates  seamlessly  with   Johnny-­‐Five.    
  • 52.
  • 53.
    MQTT  Over  WebSockets  with  MQTT.js   •  MQTT.js  is  a  Node.js  package  and  is   meant  for  use  on  the  Server  Side.   •  To  allow  MQTT.js  to  run  from  the   Browser,  we  first  needed  to   ”Browserify”  the  MQTT  library.   •  We  could  then  access  the   ”Browserified”  MQTT  client  library   from  the  Browser.   •  This  solu]on  requires  that  your  MQTT   Broker  has  a  WebSocket  endpoint.  
  • 54.
  • 55.
    NodeBot  Rover  Component  Overview   Hardware   Raspberry     PI   Arduberry   (Arduino)   Pi  Cam   Zumo   Chassis   Servos   SoAware   HTML5   Speech   Johnny-­‐ Five   Express   MQTT  &   WebSocket   Other  
  • 56.
    Node.js  Twiher  Client   •  Fully  fledged  Twiher  Client:   –  Asynchronous.   –  Supports  REST  API  (write  and  write)   –  Supports  Streaming  API  (events  and  tweets).   •  Requires  developer  creden]als  from  Twiher:   –  Trivial  to  get  hold  of.  
  • 57.
    Node.js  Twiher  Client  REST  Example  
  • 58.
    Video  Streaming  via  Mo]on   •  MoFon:  Soware  Mo]on  Detector.   •  Provides  streaming  video  with  possibility  to  create   snapshots.   •  Good  performance  on  the  Raspberry  PI.     •  PotenFal  side  project:  get  Robot  to  follow  moving  objects?  
  • 59.
    Other  things  I  picked  up   •  Git  /  GitHub   •  HTML5   •  CSS   •  Linux  
  • 61.
    NodeBot  Rover  Component  Overview   Hardware   Raspberry     PI   Arduberry   (Arduino)   Pi  Cam   Zumo   Chassis   Servos   SoAware   HTML5   Speech   Johnny-­‐ Five   Express   MQTT  &   WebSocket   TwiSer/ MoFon/ Git/GitHub/ CSS/Linux  
  • 62.
    So  Did  I  Get  My   Coding  Mojo   Back?  
  • 64.
  • 67.