Cp5
CP5 - Projeto de Internet das Coisas¶
- O objetivo do checkpoint é avaliar sua compreensão acerca do conteúdo ministrado pela disciplina.
Ideia geral¶
Construção de uma solução de IoT que abrange todas as pontas da comunicação entre usuário e dispositivos
A desafio consiste no desenvolvimento de uma solução simples mas completa que ilustra as partes mais importantes de uma arquitetura de IoT: os dispositivos e os usuários. A solução também não contempla as ferramentas de segurança que seriam necessárias ao implantar um sistema real.
Entrega e Apresentação do projeto:¶
- Individual ou em Grupo (até 5 alunos)
- Entrega da documentação via github, apresentar o repositório ORGANIZADO do projeto com toda a doumento e instruções de como replicar o projeto. (em breve o formulario para preenchechimento)
- A apresentação será presencial, e ocupará as aulas do dia 01/11/2023(2TDSA) 27/10/2023(2TDSG)
Haverá tempo durante as aulas para tirar dúvidas quanto ao desenvolvimento do trabalho.
Requisitos mínimos:¶
O sistema é composto por pelo menos 1 coisa inteligente
, que posssui:
-
Pelo menos 3 sensores, sendo eles:
- pelo menos 1 sensor deve ser digital;
- pelo menos 1 sensor deve ser analógico.
-
Pelo menos 3 atuadores, sendo eles:
- pelo menos 1 atuador deve ser digital;
- pelo menos 1 atuador deve ser por PWM (analogWrite())
Tip
Pense em dispositivos ou soluções que são ou podem ser utilizados em seu dia-a-dia, utilize como referência os sensores/atuadores disponíveis no kit IoT.
Rubrica¶
(R0 - NOTA até 1 ponto) Ideação:
-
Explique de forma clara qual o objetivo do seu projeto, o que ele faz e como funciona.
-
Faça um esboço da arquitetura do seu projeto.
(R1 - NOTA até 1 ponto1) Programa em linguagem do Arduino
que realize pelo menos:
-
A leitura de
pelo menos três sensores
a cada200ms
, disponibilizando as leituras na porta serial, no formato JSON{"<SENS1>":<VALOR1>,..., "<SENSn>":<VALORn>}
, onde<SENS1>
e<SENSn>
são os nomes dos sensores, e<VALOR1>
e<VALORn>
são os valores lidos, respectivamente. Deve ser utilizado sensores analógicos e digitais. -
a execução de comandos em
pelo menos três atuadores
, lendo esses comandos pela porta serial. Os comandos devem ser na forma{“<CMD>”:<VALOR>}
, onde CMD é o nome do comando e VALOR é o parâmetro enviado. Por exemplo, se<CMD>
for led, então<VALOR>
pode ser “On/Off” (liga/desliga) ou “0~255” (dimmer), por exemplo. Deve possuir atuadores digitais e analógicos (PWM). -
para mais sensores e atuadores siga as instruções acima.
(R2 - NOTA até 2 pontos) Comunicação com o broker MQTT
de sua escolha: deve ser desenvolvido um programa Node-RED e Arduino que conecte o dispositivo de IoT à central de mensagens (MQTT Broker) através dos seguintes tópicos:
- Realiza
PUB
sempre que for realizada a leitura dos sensores, convertendo e enviando a informação de cada sensor no formato JSON{"value": <VALOR>}
ao tópico:
fiap/iot/turma/<TT>/grupo/<NNN>/devtype/<TYPE>/devid/<ID>/sensor/<SENS>
onde:
* <TT> corresponde à turma (2TDSA, 2TDSG)
* <NNN> corresponde ao nome do grupo
* <TYPE> corresponde ao tipo de dispositivo (arduino ou esp8266)
* <ID> corresponde à identificação do dispositivo (pode ser o MAC Address do ESP8266, ou o número de série do Arduino, ou qualquer identificação que quiser)
* <SENS> corresponde ao nome do sensor
- Para cada sensor, faça a subscrição
SUB
ao seguinte tópico, que irá receber um JSON da forma{"value": <VALOR>}
:
fiap/iot/turma/<TT>/grupo/<NNN>/devtype/<TYPE>/devid/<ID>/cmd/<CMD>
onde <CMD>
corresponde ao nome do comando a ser executado. Ao receber o comando, ele deve ser convertido e enviado à placa IoT para ser executado.
Este item pode ser realizado de duas formas:
- No caso da placa de IoT ser um Arduino, o item 2 deve ser executado na forma de um Gateway programado em Node-RED, que se conecta ao Arduino através da porta serial.
- No caso da placa de IoT ser um ESP32, ESP8266 Node-MCU, este item deve constar na programação da placa (em linguagem Arduino), e não é necessário um gateway adicional.
(R3 - NOTA até 2 pontos) Aplicação Web desenvolvida em Node-RED
ou Flask
que se conecte ao Broker MQTT e contenha uma API ReSTful com os seguintes endpoints
-
Recupera uma lista de IDs de dispositivos do tipo especificado, no formato JSON
[GET]http://<HOST>:<PORTA>/<PROJNAME>/fiap/iot/turma/<TT>/grupo/<NNN>/devtype/<TYPE>/devid/all
-
Recupera a lista dos sensores disponíveis para o dispositivo, no formato JSON
[GET]http://<HOST>:<PORTA>/<PROJNAME>/fiap/iot/turma/<TT>/grupo/<NNN>/devtype/<TYPE>/devid/<ID>/sensor/all
-
Recupera o último valor lido no sensor, no formato JSON {"value":
} [GET]http://<HOST>:<PORTA>/<PROJNAME>/fiap/iot/turma/<TT>/grupo/<NNN>/devtype/<TYPE>/devid/<ID>/sensor/<SENS>
-
Recupera a lista dos comandos disponíveis para o dispositivo, no formato JSON
[GET]http://<HOST>:<PORTA>/<PROJNAME>/fiap/iot/turma/<TT>/grupo/<NNN>/devtype/<TYPE>/devid/<ID>/cmd/all
-
Executa um comando, passando um argumento da forma {"value":
} [POST]http://<HOST>:<PORTA>/<PROJNAME>/fiap/iot/turma/<TT>/grupo/<NNN>/devtype/<TYPE>/devid/<ID>/cmd/<CMD>
(R4 - NOTA até 2 pontos) Dashboard no Node-RED cuja interface gráfica demonstre o funcionamento de todas os endpoints do exercício anterior, ou seja:
- Apresente controles que permitam enviar comandos para o Arduino, ESP32 ou ESP8266 Node-MCU
- Apresente indicadores que permitam saber o valor dos sensores do Arduino, ESP32 ou ESP8266 Node-MCU
- (até 1 ponto) Capricho na usabilidade da interface.
(R5 - NOTA até 2 pontos) Desenvolvimento de alguma feature especial
de pesquisa extra para o projeto, podendo ser:
- Uso de comunicação Bluetooth entre o Arduino e o Gateway Node-RED
- Uso de mais de um dispositivo como ESP32, ESP8266 ou Node-MCU
- Uso da Raspberry como Gateway Node-RED
- Uso de um dos sensores especiais: validar com o professor.
- Protótipo funcional com parte mecânica usando a infraestrutra do laboratório MakerLab (corte a laser, impressora 3D entre outros...)