1 of 52

ACENDA A SUA LUZ COM JS

@ BrazilJS on the road Sorocaba, 2018

2 of 52

CAIQUE MITSUOKA

Sorocabano

Software Developer

@ Plataformatec

Ruby / JS

Estudando programação funcional e Elixir

twitter.com/caiquemitsuoka

github.com/caiquemitsuoka

3 of 52

4 of 52

O PROBLEMA

5 of 52

6 of 52

7 of 52

8 of 52

9 of 52

10 of 52

Preguiça + conhecimento = 💡

11 of 52

A IDEIA

12 of 52

👧 + 📱 = 💡

13 of 52

Colocar internet na 💡.

14 of 52

Uma 💡 é um led.

15 of 52

Essa é a história de como acender um led com JS.

16 of 52

O PLANO

17 of 52

Enviar o comando pela internet para o Raspberry Pi

e acender a luz

18 of 52

19 of 52

github.com/CaiqueMitsuoka/thomas-light

github.com/CaiqueMitsuoka/thomas-light-server

20 of 52

Socket @ Server

const SockerServer = {

setupClient: () => {

SockerServer.server.on('connection', (client) => {

client.on(

'register',

SockerServer.handleRegister(client)

).on(

'disconnect',

SockerServer.handleDisconnect(client)

)

})

},

...

}

21 of 52

Socket @ Server

const SockerServer = {

...

handleRegister: (client) => {

return (data) => {

client.lightId = getMd5(data)

SockerServer.lights[client.lightId] = {

client: client

}

client.emit('registered', client.lightId)

}

},

...

}

22 of 52

Socket @ Server

const SockerServer = {

setupClient: () => {

SockerServer.server.on('connection', (client) => {

client.on(

'register',

SockerServer.handleRegister(client)

).on(

'disconnect',

SockerServer.handleDisconnect(client)

)

})

},

...

}

23 of 52

Socket @ Server

const SockerServer = {

...

handleDisconnect: (client) => {

return () => {

delete SockerServer.lights[client.lightId]

}

}

}

24 of 52

const lightsController = {

edit: (request, response) =>

lights[request.params.id].client.emit('status.update')

response.redirect('/')

}

}

Controller @ Server

25 of 52

const socket =

require('socket.io-client')(process.env.SERVER_URL);

const LightLighter = require('./light-lighter/index')

socket.on('connect', () => {

socket.emit('register', process.env.ID)

})

.on('status.update', () => {

toggleMainLight()

})

Socket @ Client

26 of 52

const state = {

mainLight: false

}

const toggleMainLight = () => {

if(state.mainLight) {

LightLighter.off()

} else {

LightLighter.on()

}

state.mainLight = !state.mainLight

}

Toggle @ Client

27 of 52

Light Lighter

28 of 52

O Raspberry funciona com 3,3v e 5v

29 of 52

Uma lampada comum funciona com

110v

30 of 52

110v + rasp = 🔥

31 of 52

Não podemos acender

a 💡

com energia do rasp

32 of 52

Relay

33 of 52

Eu não entendi como funciona o Relay na real

34 of 52

Mas a parte boa é que vc não precisa! Vc só precisa entender o suficiente

35 of 52

36 of 52

37 of 52

38 of 52

39 of 52

40 of 52

const gpio = require('rpi-gpio')

const lightLighter = {

io4: 7,

off: () => {

gpio.destroy();

},

on: () => {

gpio.setup(lightLighter.io4, gpio.DIR_OUT, console.log)

}

}

LightLighter @ Pi

41 of 52

É realmente só isso

42 of 52

Foi assim que eu coloquei internet em uma lâmpada

43 of 52

Mas o que é a internet,

se não vocês <3

44 of 52

thomaslight.herokuapp.com

45 of 52

Internet

of

46 of 52

É muito

Fácil

Fazer IoT

47 of 52

Faça algo

que você

gosta

48 of 52

Você pode enviar

uma palestra sobre

isso para um meetup

local

49 of 52

Faça uma PoC

50 of 52

Faça código

para você

51 of 52

Não faz IoT

quem não quer

52 of 52

valeu!

(to com fome)