ACENDA A SUA LUZ COM JS
@ BrazilJS on the road Sorocaba, 2018
CAIQUE MITSUOKA
Sorocabano
Software Developer
@ Plataformatec
Ruby / JS
Estudando programação funcional e Elixir
twitter.com/caiquemitsuoka
github.com/caiquemitsuoka
O PROBLEMA
Preguiça + conhecimento = 💡
A IDEIA
👧 + 📱 = 💡
Colocar internet na 💡.
Uma 💡 é um led.
Essa é a história de como acender um led com JS.
O PLANO
Enviar o comando pela internet para o Raspberry Pi
e acender a luz
github.com/CaiqueMitsuoka/thomas-light
github.com/CaiqueMitsuoka/thomas-light-server
Socket @ Server
const SockerServer = {
setupClient: () => {
SockerServer.server.on('connection', (client) => {
client.on(
'register',
SockerServer.handleRegister(client)
).on(
'disconnect',
SockerServer.handleDisconnect(client)
)
})
},
...
}
Socket @ Server
const SockerServer = {
...
handleRegister: (client) => {
return (data) => {
client.lightId = getMd5(data)
SockerServer.lights[client.lightId] = {
client: client
}
client.emit('registered', client.lightId)
}
},
...
}
Socket @ Server
const SockerServer = {
setupClient: () => {
SockerServer.server.on('connection', (client) => {
client.on(
'register',
SockerServer.handleRegister(client)
).on(
'disconnect',
SockerServer.handleDisconnect(client)
)
})
},
...
}
Socket @ Server
const SockerServer = {
...
handleDisconnect: (client) => {
return () => {
delete SockerServer.lights[client.lightId]
}
}
}
const lightsController = {
edit: (request, response) =>
lights[request.params.id].client.emit('status.update')
response.redirect('/')
}
}
Controller @ Server
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
const state = {
mainLight: false
}
const toggleMainLight = () => {
if(state.mainLight) {
LightLighter.off()
} else {
LightLighter.on()
}
state.mainLight = !state.mainLight
}
Toggle @ Client
Light Lighter
O Raspberry funciona com 3,3v e 5v
Uma lampada comum funciona com
110v
110v + rasp = 🔥
Não podemos acender
a 💡
com energia do rasp
Relay
Eu não entendi como funciona o Relay na real
Mas a parte boa é que vc não precisa! Vc só precisa entender o suficiente
const gpio = require('rpi-gpio')
const lightLighter = {
io4: 7,
off: () => {
gpio.destroy();
},
on: () => {
gpio.setup(lightLighter.io4, gpio.DIR_OUT, console.log)
}
}
LightLighter @ Pi
É realmente só isso
Foi assim que eu coloquei internet em uma lâmpada
Mas o que é a internet,
se não vocês <3
thomaslight.herokuapp.com
Internet
of
É muito
Fácil
Fazer IoT
Faça algo
que você
gosta
Você pode enviar
uma palestra sobre
isso para um meetup
local
Faça uma PoC
Faça código
para você
Não faz IoT
quem não quer
valeu!
(to com fome)