Sistema Smart Home de Baixo Custo com Raspberry Pi e MediaTek LinkIt
Componentes e Materiais Necessários
| Componente | Quantidade | Observações |
|---|---|---|
| Raspberry Pi 2 Model B (ou Orange Pi) | 1 | Servidor local de baixo custo (~$15) |
| Xbee | 1 | Transceptor de rádio para sensores |
| Arduino UNO | 1 | Interface com sensores locais |
Aplicativos e Serviços Online
- Microsoft Azure (armazenamento em nuvem opcional)
Sobre o Projeto
Introdução
Vamos ver o que precisamos para configurar um sistema smart home usando MediaTek LinkIt. Como há muitos especialistas aqui para guiar você na conexão de hardware para leitura de dados de sensores, vou me concentrar na criação de APIs e configuração de um servidor local ultra baixo custo de $15 para capturar todos os dados dos sensores. Opcionalmente, registro os dados no Azure.
Configuração da Arquitetura
Os sensores transmitem seus dados via sinais de rádio usando Xbee ou qualquer transceptor de baixo custo para o MediaTek LinkIt. O MediaTek LinkIt recebe todos os dados brutos dos sensores, empacota-os em objeto JSON usando a biblioteca ArduinoJson e faz uma requisição POST para o servidor local. O servidor local hospeda uma aplicação web Node.js e recebe todos os dados dos sensores como objetos JSON.
O servidor local é usado como pré-processador e adiciona timestamp UTC e assinatura. Qualquer validação, conversão e filtragem de dados pode ser processada aqui. O servidor local registra todos os dados no serviço de nuvem, no nosso caso Azure Storage Services. Alternativamente, o MediaTek LinkIt pode postar diretamente os objetos JSON para o Azure Storage Services. Configurei um servidor local apenas para provar que um PC de $15 pode ser poderoso o suficiente para lidar com nossos dados. Podemos registrar nossos dados em qualquer banco de dados NoSQL até mesmo em nosso servidor local, eliminando completamente a necessidade de armazenamento em nuvem externo. Deixo tudo isso a critério de vocês.
Demonstração
[Vídeo de demonstração do sistema funcionando]
Pré-requisitos
Assumo que você saiba como ler dados de sensores usando sensores e microcontroladores como Arduino ou MediaTek. Para limitar o escopo deste projeto, vou assumir que os dados dos sensores estão disponíveis no MediaTek LinkIt. Você pode usar transceptor de rádio de baixo custo ou Xbee para transmitir e receber sinais de rádio de sensores conectados a microcontroladores como MediaTek. Iniciantes podem usar o kit MediaTek LinkIt Grove Starter para ler dados do ambiente externo como temperatura, umidade, luz, etc.
JSON - O Padrão para IoT
JSON tornou-se o padrão de facto para IoT e foi amplamente adotado. Dito sobre os pré-requisitos, vamos começar modelando nossos dados de sensores. O principal objetivo é capturar o máximo de dados possível e passá-los para o servidor. O servidor pode fazer todo o trabalho pesado como analytics, conversão de dados, machine learning, etc.
O objeto JSON 'desired' (desejado) será o estado desejado dos dados do sensor. Por exemplo, quando registramos a temperatura, o valor desejado de 24 significa que precisamos sincronizar o valor para a nuvem com o valor 24. Nossos clientes como app web ou mobile serão atualizados para este valor.
Quando queremos ligar uma luz, dizemos que o estado desejado é "on". Significa que a luz está ligada ou será ligada. Todos nossos aplicativos clientes usarão este estado para refletir as mudanças para o usuário. Quero dizer, o ícone no nosso app web será ligado ou desligado.
Este não é um padrão internacional, eu apenas criei este formato. Portanto, sinta-se à vontade para usar seu próprio formato conveniente.
Exemplos de Objetos JSON para Diferentes Sensores
Temperatura e Umidade
{
"deviceid": "iot/myhome/livingroom/thermostat",
"desired": {
"temperature": "24",
"humidity": "80"
},
"timeutc": "2015-11-23T00:41:48.824Z",
"signedBy": "localserver"
}
Microfone (Intensidade Sonora)
{
"deviceid": "iot/myhome/livingroom/mic",
"desired": {"intensity": "66"},
"timeutc": "2015-11-23T00:41:48.824Z",
"signedBy": "localserver"
}
Distância (Sensor Ultrassônico)
{
"deviceid": "iot/myhome/livingroom/obstacle",
"desired": {"proximity": "150"},
"timeutc": "2015-01-01",
"signedBy": "localserver"
}
PIR (Detecção de Movimento)
{
"deviceid": "iot/myhome/livingroom/pir",
"desired": {"motion_start": "2500", "motion_end": "5345"},
"timeutc": "2015-11-23T00:41:48.824Z",
"signedBy": "localserver"
}
GPS (Localização)
{
"deviceid": "iot/mydevice/location",
"desired": {"lat": "25.5", "long": "32.2"},
"timeutc": "2015-11-23T00:41:48.824Z",
"signedBy": "localserver"
}
Umidade do Solo
{
"deviceid": "/iot/myhome/garden/moisture",
"desired": {"moisture": "20"},
"timeutc": "2015-11-23T00:41:48.824Z",
"signedBy": "localserver"
}
Vazamento de Gás
{
"deviceid": "/iot/myhome/kitchen/gas",
"desired": {"leak": "No"},
"timeutc": "2015-11-23T00:41:48.824Z",
"signedBy": "localserver"
}
Luz (Intensidade)
{
"deviceid": "/iot/myhome/livingroom/light",
"desired": {"intensity": "60"},
"timeutc": "2015-11-23T00:41:48.824Z",
"signedBy": "localserver"
}
Sala de Estar (Múltiplos Sensores)
{
"deviceid": "/iot/myhome/livingroom",
"desired": {
"temperature": "25",
"humidity": "80",
"window": "open",
"door": "closed",
"light": "80",
"noise": "low"
}
}
Quarto (Múltiplos Sensores)
{
"deviceid": "/iot/myhome/bedroom",
"desired": {
"temperature": "24",
"humidity": "70",
"window": "closed",
"door": "closed",
"light": "80",
"ac": "on",
"noise": "low"
}
}
MediaTek - Receptor
Por favor, consulte o arquivo .ino anexado na seção de software para registrar dados no servidor local. Os dados dos sensores são simulados; você pode passar as leituras reais para os respectivos objetos JSON.
Servidor Local
O servidor local adiciona uma sobrecarga, mas será muito útil de várias maneiras. Podemos fazer uso do servidor local como pré-processador para nossos dados IoT. Dados podem ser filtrados, timestampados e assinados.
Um mini PC e Node.js é uma excelente escolha para servidor local. Podemos escolher qualquer mini PC como Raspberry Pi, Odroid, Banana Pi, BeagleBone, etc. Escolhi Orange Pi ($15) para este projeto.
Configuração do Servidor Local
- Raspberry Pi 2 ou Orange Pi com qualquer sabor de Linux OS que suporte Node.js 5. Escolhi Orange Pi com Arch Linux para ARM7.
- Instalado Node.js e npm.
- Baixe meu iotapp do GitHub e navegue até /seu/caminho/local/iotapp e execute npm install.
- O app Express.js básico começa a escutar na porta 3000.
- Navegue para seu-ip-local:3000 para verificar se a view padrão do Express.js é renderizada.
APIs Criadas para Receber Dados dos Sensores
/iot/myhome/livingroom/thermostat- API de Temperatura/iot/myhome/livingroom/mic- API de Som/iot/myhome/livingroom/pir- API de Sensor de Presença/iot/myhome/livingroom/distance- API de Sensor de Distância/iot/myhome/mydevice/location- API de Rastreador GPS/iot/myhome/garden/moisture- API de Sensor de Umidade do Solo/iot/myhome/kitchen/gas- API de Sensor de Vazamento de Gás/iot/myhome/livingroom/light- API de Sensor de Luz/iot/myhome/livingroom- API para sala de estar (múltiplos sensores)/iot/myhome/bedroom- API para quarto (múltiplos sensores)
Para configurar o servidor local: Clone o código fonte iotapp do meu GitHub. Modifique o index.js para colocar seu endereço IP da nuvem ou nome de domínio onde a aplicação ASP.NET 5 está hospedada no Azure.
Servidor Remoto (Nuvem)
Publicar dados na nuvem tornou-se popular hoje em dia. Podemos comprar assinatura de provedores de dados IoT como Amazon, Azure, SparkFun, PubNub, Initial State e muitos outros. Escolhi Azure para esta demonstração. Algoritmos de analytics, data mining e machine learning podem ser desenvolvidos para processar nossos dados.
Baixe o iotwebapp do meu GitHub. Criei usando Visual Studio 2015 visando ASP.NET 5. Estas APIs foram configuradas para postar os dados IoT. A API registra os dados IoT nas tabelas de armazenamento do Azure.
APIs Configuradas no Servidor Remoto (ASP.NET 5)
api/iot/myhome/thermostat- Web API ASP.NET 5 para registrar todos os dados de termostatoapi/iot/myhome/microphone- Web API ASP.NET 5 para registrar todos os dados de microfoneapi/iot/myhome/pir- Web API ASP.NET 5 para registrar todos os dados de PIRapi/iot/myhome/distance- Web API ASP.NET 5 para registrar todos os dados de sensor de distânciaapi/iot/myhome/device/location- Web API ASP.NET 5 para registrar dados GPSapi/iot/myhome/moisture- Web API ASP.NET 5 para registrar dados de sensor de umidadeapi/iot/myhome/gas- Web API ASP.NET 5 para registrar dados de sensor de gásapi/iot/myhome/light- Web API ASP.NET 5 para registrar todos os dados de sensor de luzapi/iot/myhome/livingroom- Web API ASP.NET 5 para registrar todos os atributos/sensores da sala de estarapi/iot/myhome/bedroom- Mesmo acima, criado para registrar detalhes do quarto
Para configurar servidor remoto: Clone o código fonte iotwebapp do meu GitHub. Crie uma tabela de armazenamento Azure. Modifique o IoTController.cs e coloque seu nome de conta e chave da tabela de armazenamento Azure. Use este nome de domínio ou IP no servidor local.
Conclusão
Há muitas áreas para refatorar no código. Sinta-se à vontade para modificar e me avise se travar em algum ponto.
Código
Repositório completo com código do MediaTek (receptor), Node.js (servidor local) e ASP.NET 5 (servidor remoto): https://github.com/syediddi/iot-mediatek-linkIt
Principais Arquivos do Projeto
- MediaTekRx - Código C/C++ para MediaTek LinkIt (receptor de dados dos sensores)
- nodejs - local server - Servidor Node.js/Express.js (index.js com rotas)
- Controllers ASP.NET 5 (C#):
- ThermoStatController.cs
- PIRController.cs
- MoistureController.cs
- LivingRoomController.cs
- LightController.cs
- GPSController.cs
- GasController.cs
- DistanceController.cs
- BedRoomController.cs
Esquemáticos
Processo de manufatura
- Dados Inteligentes: Navegando a Próxima Fronteira de IoT e Big Data
- Construa um Controlador Doméstico Inteligente 433 MHz com Sensorflare e Raspberry Pi
- Construa Sistema de Automação Residencial com Raspberry Pi para Controle Remoto
- Bartender Inteligente: Construa sua Própria Estação de Coquetéis com Raspberry Pi
- Hospitais Inteligentes do Futuro: O Papel Crítico de Software Inteligente
- Preenchendo a Lacuna de Habilidades em Casas Inteligentes: Por Que a Grã-Bretanha Fica Atrás da Europa
- Como a Interconectividade Impulsiona Eficiência, Segurança e Sustentabilidade em Locais de Trabalho Modernos
- Evolução Casa Inteligente: O Que o Futuro Reserva para Vida Conectada
- Fábricas Inteligentes: Da Visão à Realidade — Por Que a Maioria das Empresas UK Ainda Erra o Alvo
- Conectividade de Casa Inteligente: 3 Passos Comprovados para Superar Obstáculos-Chave