Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

36
The Internet of (Lego) Trains Johan Janssen, Info Support @johanjanssen42 johan.janssen@infosupp ort.com Ingmar van der Steen, Info Suppo ingmar.van.der.steen@infosupport.

Transcript of Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

Page 1: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

The Internet of (Lego) Trains

Johan Janssen, Info Support

@johanjanssen42 johan.janssen@infosupport

.com

Ingmar van der Steen, Info Support

[email protected]

Page 2: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

Disclaimer: No Lego was harmed beyondrepair during the project.

Page 3: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

CONTENT

Why?IngredientsArchitectureHardwareApplication

ChallengesScala and AkkaFutureConclusionQuestions

Page 4: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

Why?

Page 5: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

MINIMAL INGREDIENTS FOR 1 TRAIN ABOUT € 50Raspberry Pi A+Wifi dongleEDUP Ultra-Mini Nano USB 2.0 802.11n

USB battery packAnker® 2. Gen Astro Mini 3200mAh

Infrared transmitterKeyes 38KHz IR Infrared Transmitter Module for Arduino

Page 6: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen
Page 7: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

Architecture

Page 8: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

LTCC(Angular)

LTCC(Java)

DeviceControl(Java)

Infrared(C and LIRC)

RFID(C)

SwitchControl(Java)

Servo(Python)

Leds with Photon

(C)

RPi-Cam-Web-Interface

(C)

Page 9: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

LTCC (Laptop)SwitchControl (Pi) Camera (Pi)

DeviceControl (Pi)

Page 10: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

Original controls

Page 11: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

Infrared

Page 12: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

CALLING THE APPLICATION

http://ipaddress/cgi-bin/test/?ch=0&out=1&cmd=1&spd=3

ch: channel (there are 8) out: output cmd: command 0 Break 1 Forward 2 Backward

spd: speed (not necesarry with command ‘Break’)

Page 13: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

@Path("train")public class TrainService { @GET @Path("{channelParam}/forward/{speedParam}") public void forward(@PathParam("channelParam") String channel, @PathParam("speedParam") String speed) { String command = "1"; callURL(channel, command, speed); }

private void callURL(String channel, String command, String speed) { StringBuilder result = new StringBuilder(); result.append("http://127.0.0.1/cgi-bin/test/?ch="); result.append(channel); result.append("&out=1&cmd="); result.append(command); if (speed != null) { result.append("&spd="); result.append(speed); } URL url = new URL(result.toString()); InputStream is = url.openStream(); }}

Page 14: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

Sound

Page 15: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

RFID

3.3 V, GPIO25, GND, -, GPIO9, GPIO 10, GPIO11, GPIO 8

Page 16: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen
Page 17: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

Camera

Page 18: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen
Page 19: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

Overview

camera

Page 20: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

Switches

Page 21: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen
Page 22: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

LTCC APPLICATION

Page 23: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

AUTOPILOT APPLICATION

Page 24: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

Challenges

Page 25: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

SCALA AND AKKA

Page 26: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

HTTP VS REMOTE ACTOR

Page 27: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

ADVANTAGES REMOTE ACTORS

No converting to JSON/SOAPMore natural programming

Faster than Akka HTTP ?

Page 28: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

ADVANTAGES HTTP

Indepedent of technology Loosely coupled

Page 29: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

LTCC(Angular)

LTCC(Scala/Akka)

DeviceControl(Scala/Akka)

Infrared(C and LIRC)

RFID(C)

SwitchControl(Scala/Akka)

Servo(Python)

Leds with Photon

(C)

RPi-Cam-Web-Interface

(C)

Page 30: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

class Coordinator extends Actor { def receive = { case mymessage => println(mymessage) }}

implicit val system = ActorSystem("ExampleActorSystem")

val coordinatorActorRef = system.actorOf(Props[Coordinator])coordinatorActorRef ! "Hello Javantura"

Page 31: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

val coordinatorActorRef = system.actorOf(Props[Coordinator])coordinatorActorRef ! "Hello Javantura "

val coordinatorActorRef = context.actorSelection("akka.tcp://

[email protected]:9005/user/coordinatorActor")

coordinatorActorRef ! "Hello Javantura "

Page 32: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

akka { actor { provider = "akka.remote.RemoteActorRefProvider" } remote { enabled-transports =

["akka.remote.netty.tcp"] netty.tcp { hostname = "127.0.0.1" port = 9002

Page 33: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen
Page 34: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

CONCLUSION

Page 35: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

The best part!!

Page 36: Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der Steen

QUESTIONS?

Johan Janssen, Info Support

@johanjanssen42 johan.janssen@infosupport

.com

Ingmar van der Steen, Info Support

[email protected]