Comparada à revolução industrial do início do século 20, o assunto IoT, Internet of things ou “Internet das Coisas”, vem ganhando notoriedade expressiva, sendo considerado pelas empresas de previsão tecnológica, a revolução do século 21.
Esse artigo demonstra uma aplicação prática de IoT apresentando uma forma diferente de visualização da previsão do tempo através de uma luminária moderna de design inovador. Além de indicar a previsão do tempo, a luminária pode indicar outras situações, como a chegada de um e-mail importante, um evento, um alarme, etc.
A ideia
Quando você acorda ou vai sair de casa, qual a forma mais fácil de saber se vai chover?
Antigamente as pessoas possuíam em suas casas o famoso galinho do tempo. Ele conseguia prever com uma boa margem de acerto quando ia chover ou não, porém, sua indicação era quase que imediata a da chegada da chuva, uma vez que ele indicava apenas a umidade do ar.
Hoje com o avanço da tecnologia, existem vários aplicativos de smartphone, onde é possível verificar, em tempo real, a previsão do tempo, se vai chover e quando. Melhor ainda, existe disponível para uso público, diversas API (Application Programming Interface) onde sistemas automáticos podem consumir a informação de previsão do tempo e com isso tomar decisões que podem ser desde acender uma lâmpada como fechar uma janela automatizada.
Pensando nisso, esse projeto tem como objetivo mostrar a potencialidade da Internet das Coisas no uso de uma aplicação simples, não do ponto de vista de tecnologia, pois será utilizado uma API, uma plataforma de IoT, o protocolo de comunicação MQTT e um modulo esp8266, mas sim, do ponto de vista de resolver problemas simples, de criar objetos úteis.
O Circuito
O circuito da luminária utiliza um módulo Wifi ESP8266 NodeMCU, que é uma placa de desenvolvimento que combina o chip ESP8266, uma interface usb-serial e um regulador de tensão 3.3V. A programação pode ser feita usando LUA ou a IDE do Arduino, utilizando a comunicação via cabo micro-usb. Além do módulo ESP8266 utilizaremos um LED RGB juntamente com três resistores de 470 ohms para limitação de corrente.
Código lua do NodeMCU
Para esse projeto, estaremos utilizando o firmware NodeMCU. A plataforma NodeMCU foi criada menos de um ano após o começo das vendas do ESP8266, e é composta por um firmware que roda no ESP8266 transformando-o num ambiente de execução da linguagem Lua contendo uma série de recursos adicionais para uso embarcado. Para gravar os arquivos lua na luminária vamos utilizar o programa ESPlorer. A programação Lua consiste em dois arquivos:
- init.lua – Contém ações básicas de inicialização do módulo, sendo que será necessário alterar as configurações do acesso a rede wi-fi, no caso SSID e a chave de criptografia.
- mqtt.lua – Arquivo principal com todas as funções a serem executadas. No início do arquivo, a primeira linha deverá ser alterada. Na linha onde tem a configuração “broker = “X.X.X.X” deverá ser configurado com o endereço IP da Raspberry onde foi instalado o Node-RED.
Código Lua init.lua
wifi.setmode(wifi.STATION) wifi.sta.config("your_SSID","Your_Key_password") tmr.alarm(0,1000, 1, function() if wifi.sta.getip()==nil then print("connecting ap") else tmr.alarm(1, 4000, 0, function() dofile ("mqtt.lua")end ) tmr.stop(0) end end)
Código Lua mqtt.lua
-- Projeto Luminaria do Tempo -- --Configuration parameters & initialise variables -- broker = "X.X.X.X" -- IP da Raspberry onde foi instalado o Node-RED mqttport = 1883 -- MQTT port (default 1883) userID = "user" -- username se for utilizada autenticacao userPWD = "senha" -- user password se for utilizada autenticacao clientID = "Brain_001" -- ID do dispositivo -- ESP-12 GPIO Mapping gpio12 = 6 -- RGB Verde gpio14 = 5 -- RGB Azul gpio13 = 7 -- RBG Vermelho pwm.setup(gpio12,500,512) pwm.setup(gpio13,500,512) pwm.setup(gpio14,500,512) pwm.start(gpio12) pwm.start(gpio13) pwm.start(gpio14) count = 0 -- Test number of mqtt_do cycles mqtt_state = 0 -- State control -- function mqtt_do() count = count + 1 -- For testing number of interations before failure if mqtt_state < 5 then mqtt_state = wifi.sta.status() --State: Waiting for wifi elseif mqtt_state == 5 then m = mqtt.Client(clientID, 120, userID, userPWD) mqtt_state = 10 -- State: initialised but not connected m:on("message", function(conn, topic, data) print(topic .. ":" ) --topic is not examined only printed for the purposes of this test if data ~= nil then print(data) a = {} -- array 1 b = {} -- array 2 c = {} -- array 3 d = {} -- array 3 op = 0 for word in string.gmatch(data, '([^,]+)') do op = op+1 if op == 2 then --b[1] = word*1 ledVM = word*1 elseif op == 3 then --c[1] = word*1 ledVD = word*1 elseif op == 4 then --d[1] = word*1 ledAZ = word*1 end end print (ledVM) print (ledVD) print (ledAZ) if data == "OFF" then -- Only "OFF" or "ON" is recognised to change GPIO2 state gpio.write(gpio13,gpio.LOW) elseif data == "ON" then gpio.write(gpio13,gpio.HIGH) end led(ledVM,ledVD,ledAZ) end end) m:on("offline", function(conn) print("Offline!") mqtt_state = 10 -- State: reset to initialised but not connected end) elseif mqtt_state == 10 then m:connect( broker , mqttport, 0, function(conn) print("Connected to MQTT:" .. broker .. ":" .. mqttport .." as " .. clientID ) m:subscribe("sensor/"..clientID.."/action",0, function(conn) print("subscribed!") mqtt_state = 20 -- Go to publish state end) end) elseif mqtt_state == 20 then mqtt_state = 25 -- Publishing... if gpio.read(gpio13) == 0 then -- Read the current state of GPIO2 io_status = "OFF" else io_status = "ON" end m:publish("sensor/"..clientID.."/alive/", "count:"..count.." ", 0, 0, function(conn) -- Print confirmation of data published print("GPIO14:"..io_status.." #:"..count.." published!") mqtt_state = 20 -- Finished publishing - go back to publish state. end) else print("Publishing..."..mqtt_state) mqtt_state = mqtt_state - 1 -- takes us gradually back to publish state to retry end end function led(r,g,b) pwm.setduty(gpio12,g) pwm.setduty(gpio14,b) pwm.setduty(gpio13,r) end -- --Run it! -- tmr.alarm(0, 2000, 1, function() mqtt_do() end)
Plataforma IoT Node-RED
O Node-RED é uma plataforma de código aberto, construída utilizando o Node.js, que ajuda os desenvolvedores a criarem aplicativos sofisticados para IoT com esforço mínimo. Essa plataforma tem a flexibilidade para ser executada na nuvem, ou em hardware de baixo custo como uma Raspberry Pi.
Para esse projeto, estaremos utilizando uma imagem pronta do Node-RED para Raspberry PI 2 do projeto Thethingbox.io. Essa imagem pode ser “baixada” no site e gravada em um SDcard de 8GB e já estará pronta para uso, inclusive com serviço de MQTT que será utilizado como protocolo de mensageria entre a luminária e o servidor.
Nesse artigo não vou entrar em detalhes no funcionamento do Node-RED, bem como o MQTT que serão mais bem descritos em artigos futuros. Uma vez instalada a imagem basta somente conectar a Raspberry PI 2 na sua rede local onde também deverá estar conectada sua rede WiFi com acesso a Internet.
O fluxo foi baseado no original escrito por Dom Bramley e adaptado para o funcionamento da luminária. Basicamente o fluxo que irá rodar no Node-RED consulta uma API de previsão do tempo (forecast.io), calcula a probabilidade de chuva nas próximas horas e envia para a luminária um mensagem “pwm,R,G,B” conforme o tempo previsto para próxima chuva. A mensagem ao ser recebida pela luminária executará o pwm para cada cor correspondente no LED RGB.
O código abaixo pode ser importado no ambiente do Node-RED através da função “import clipboard”. Após a importação, você terá que ajustar no box “Get Forecast” a chave do API que você deve obter no site forecast.io, bem como ajustar as coordenadas de latitude e longitude para uma correta previsão.
Fluxo node-red
Luminária pronta para testes
Uma vez concluída as fases de montagem e programação, a placa estará pronta para acender o LED RGB conforme a previsão de chuva. Caso não tenha previsão de chuva nas próximas 12 horas, o Node-RED enviará uma mensagem “pwm, 0,0,1023” para a luminária através do protocolo MQTT. A luminária ao receber essa mensagem irá aplicar 0% de corrente ao led R (Red), 0% ao led G (Green) e 100% ao led B (blue) fazendo-o acender na cor azul. Caso exista a previsão de chuva nas próximas 12 horas e conforme chuva se aproximar em quantidade de horas a mensagem pwm vai se modificado aumentando a porcentagem de vermelho ao azul tornando o led cada vez mais cor de rosa. A cor azul e rosa são em homenagem aos antigos galinhos do tempo que já trabalhavam com essas cores.
Evolução da ideia
Da mesma maneira que ao se fazer a previsão do tempo o sistema envia uma mensagem para a luminária acender uma cor, novas regras poderão ser criadas no Node-RED para sinalização de outros eventos, como exemplo, a chegada de um e-mail, ficando aberto à criatividade uma gama muito grande de opções.
Galeria de fotos e vídeo
Uma vez todos os componentes funcionando basta adicionar o toque final que é uma peça de cristal transparente para melhor visualização da cor do led RGB.
Curso
Se você deseja conhecer mais ou aprofundar seus conhecimentos em IoT possuímos o Curso “Hands On de Internet das Coisas (IoT)” composto por 16 horas presenciais de laboratório. Como forma complementar e com o objetivo de otimizar o tempo do laboratório prático é oferecido um módulo teórico remoto através de ensino a distancia na nossa plataforma de EAD.
Neste curso, uma parceria entre Agile Think® e Saltic, você irá aprender sobre um assunto que está cada vez mais presente nas nossas vidas: a Internet das Coisas. Você entenderá o que é e como funciona, descobrindo algumas de suas aplicações que já fazem parte do nosso dia-a- dia e conhecendo tendências na área. Você implementará soluções para problemas reais e se familiarizará com as tecnologias que possibilitam o desenvolvimento de aplicações nesta área. O conteúdo do curso aborda os seguintes pontos:
- Transformação Digital e IoT – a origem das coisas.
- Como converter informações em ações.
- O que é e qual o conceito por trás da Internet das Coisas.
- O que fazer com os dados? Uso de Machine Learning.
- Descubra como os processos de negócios e inovação podem se beneficiar.
- Aula prática sobre sensores, dispositivos, microcontroladores, protocolos, interfaces,
plataformas, dashboards. - Laboratório Hands On com criação de uma rede com sensores transmitindo informação a
uma plataforma de IoT local e em Nuvem.