Telemetria do Sensor 2.0.1
Sensor Telemetry 2.0.1 Conduza os dados de temperatura para o Microsoft Azure IoT Hub e monitore os dados remotamente a partir de um aplicativo Windows Universal. Remasterizado digitalmente!
História
ATUALIZADO:O projeto Sensor Telemetry foi remasterizado digitalmente. Atualizado em 17 de maio de 2017 e renomeado para Sensor Telemetry 2.0.1
Introdução
Visão geral
Neste projeto, vamos monitorar um sensor de temperatura ( MCP9808 ) e enviar leituras de telemetria para um Hub IoT do Microsoft Azure onde um Stream Analytics trabalho processará as mensagens e as gravará em um Azure SQL Banco de dados tabela. Usaremos aplicativos para celular para ver o histórico das leituras do sensor.
O aplicativo
O projeto contém dois Aplicativos Universais do Windows (na Plataforma Universal do Windows, UWP) que compartilham cerca de 99% do código. Um é voltado para Raspberry Pi (ou ARM) e o outro é voltado para plataformas x86 ou x64.
A versão IoT do aplicativo é executada no Raspberry Pi e lê a temperatura no MCP9808. O aplicativo envia eventos de telemetria para o Hub IoT do Azure e o SignalR cubo. Esta versão também ouvirá comandos do Hub IoT do Azure.
A versão do cliente, iniciada em um computador, ouvirá as atualizações do sensor do hub SignalR e as exibirá na tela. Esta versão também enviará comandos para a versão IoT por meio do Hub IoT do Azure.
Tecnologias
O aplicativo neste projeto é baseado no MVVM (Model-View-ViewModel) padrão e foi construído usando o Prisma biblioteca e usa Prism.Unity para o IoC (Inversão de controle) container. Além dessas bibliotecas, o aplicativo usa o Event Aggregator encontrado em Prism.Event biblioteca para criar, da melhor forma possível, uma arquitetura puramente orientada a eventos. O aplicativo usa essa biblioteca para permitir que os módulos internos se comuniquem enquanto permanecem fracamente acoplados.
O aplicativo também usa SignalR no aplicativo móvel do Azure para permitir que várias instâncias do aplicativo se comuniquem entre si. As leituras de temperatura são “transmitidas” a todos os clientes em execução remota para que possam receber as leituras do sensor de temperatura para exibição na visualização principal.
Arquitetura
No coração do aplicativo está a biblioteca MCP9808 construída como um projeto separado que pode ser reutilizado em outros aplicativos. Este projeto é desenvolvido como uma biblioteca UWP que pode ser utilizada em qualquer aplicativo Windows 10. Se a biblioteca for usada em um dispositivo que não possui um I2C bus a biblioteca não retornará nenhum objeto de dispositivo. Essa abordagem pode ser usada para “detectar” um sensor e ignorar normalmente a biblioteca quando um sensor não for encontrado.
No aplicativo cliente UWP, há vários blocos que constituem o aplicativo geral. As Visualizações são as páginas visíveis e cada visualização possui um Modelo de Visualização responsável pelo estado da Visualização. Existem três repositórios:configurações de aplicativos ( IApplicationSettingsRepository ), informações de depuração ( IDebugConsoleRepository ) e lendo e gravando o MCP9808 ( ITemperatureRepository ) Existem duas classes concretas construídas em torno de ITemperatureRepository; um envolve a biblioteca MCP9808 e o outro é um dispositivo nulo usado quando o aplicativo não está sendo executado no Raspberry Pi.
A classe Mcp9808TemperatureRepository monitora o MCP9808 usando o serviço de temporizador e publica informações de temperatura por meio do agregador de evento interno toda vez que a leitura de temperatura ou o status de alerta muda. Um novo evento é enviado apenas quando a leitura atual é diferente da leitura anterior.
Também há uma série de serviços definidos por IBackgroundService que são executados em segundo plano para várias atividades.
O diagrama abaixo descreve uma visão de alto nível da arquitetura e da conectividade entre os vários blocos e serviços.
Serviço de telemetria
Este serviço monitora o evento de mudança de temperatura (por meio de uma assinatura) e envia uma mensagem ao Hub de Eventos do Azure Service Bus sempre que a temperatura muda.
Serviço de cronômetro
Este serviço simples é um cronômetro que publica um evento a cada 500 milissegundos e é usado pelos modelos de visualização para exibir a hora atual em uma visualização. Também é usado pelo Mcp9808TemperatureRepository para ler o sensor uma vez a cada segundo. Os argumentos do evento do temporizador incluem um contador que pode ser usado com a função mod para dividir facilmente o intervalo do temporizador na duração desejada. Há um método chamado IsMyInterval (intervalo TimeSpan) no argumento do evento que faz as contas para você. Tudo que você precisa fazer é fornecer o intervalo como um TimeSpan objeto.
Serviço de monitoramento de PIN de alerta
Este serviço monitora o estado do pino GPIO conectado ao pino de alerta no MCP9808. Quando o valor do GPIO é alterado, este serviço publica um evento.
Serviço de LED
Este serviço é responsável por ligar e desligar os LEDs. Isso é feito monitorando (por meio de assinatura) o evento de mudança de temperatura, que também inclui o status de alerta do MCP9808. Quando o status de alerta muda, os LEDs são atualizados de acordo.
Push Button Monitoring Service
Este serviço monitora o pino GPIO conectado ao botão e publica um evento quando o botão é liberado. Este evento é captado pelo Mcp9808TemperatureRepository quando o dispositivo está no modo de redefinição de alerta manual (modo de interrupção MCP9808). Os eventos de depuração também são publicados para que o estado do botão possa ser visualizado no console de depuração.
Serviço de retransmissão de notificação
O serviço monitora o hub SignalR e o agregador de evento interno e retransmite mensagens entre os dois com base em um mapeamento predefinido (usando o EventRelayMap classe). Essencialmente, isso permite que o aplicativo esteja ciente apenas do sistema de eventos interno e ainda seja capaz de enviar e receber mensagens com outras instâncias do aplicativo.
Serviço de console de depuração
Este serviço monitora os aplicativos (por meio de assinatura) para eventos de depuração e os adiciona a uma coleção interna. Ele também implementa DebugConsoleRepository , que permite que a visualização do console de depuração exiba esses eventos no aplicativo por meio do modelo de visualização.
Inicialização do aplicativo
Quando o aplicativo é iniciado, ele inicia a StartPage view primeiro, que invoca automaticamente o StartPageViewModel . Este modelo de visualização deixa tudo pronto e funcionando antes de lançar na visualização principal.
Primeiros passos
Requisitos de circuito
O circuito requer uma placa de ensaio grande e sem solda e, opcionalmente, um sapateiro em forma de T e um cabo de fita (uso a versão vendida pela Vilros). O breadboard pode ser obtido em uma infinidade de lugares (eu comprei em lojas locais e na Amazon). O circuito também usa um botão de pressão tátil momentâneo com quatro pinos. Existem muitos tipos; qualquer um fará. Finalmente, para o sensor de temperatura, estou usando a placa de interrupção do sensor de temperatura I2C de alta precisão MCP9808 da Adafruit.
O circuito pode ser construído sem o sapateiro. Basta seguir o diagrama de breadboard alternativo no final do projeto.
Montagem do circuito
Use este guia para montar o circuito enquanto usa o diagrama localizado próximo à parte inferior da página como um guia (nota:a cor dos fios é opcional e foi selecionada para ajudar a tornar o circuito mais fácil de siga quando for construído).
- Coloque cada um dos quatro LEDs na placa de ensaio.
- Conecte uma extremidade de um 220 Ω resistor ao ânodo de cada LED e conecte a outra extremidade do resistor ao 3V3 (pino 1 ou 17) no Raspberry Pi. Todos os quatro ânodos de LED devem ser conectados a 3V3 por meio de um 220 Ω resistor. É melhor usar um dos + trilhos em sua placa de ensaio para as conexões 3V3.
- Conecte o cátodo do LED azul ao GPIO 18 (pino 12) no Raspberry Pi.
- Conecte o cátodo do LED verde ao GPIO 23 (pino 16) no Raspberry Pi.
- Conecte o cátodo do LED vermelho ao GPIO 12 (pino 32) no Raspberry Pi.
- Conecte o cátodo do LED amarelo ao GPIO 16 (pino 36) no Raspberry Pi.
- Coloque o MCP9808 na placa de ensaio.
- Conecte o Vdd no MCP9808 para o 3V3 no Raspberry Pi.
- Conecte o GND no MCP9808 para GND no Raspberry Pi. O solo no Raspberry Pi pode ser qualquer um dos seguintes pinos:6, 9, 14, 20, 25, 30, 34 e 39.
- Conecte o SCL no MCP9808 para SCL no Raspberry Pi (pino 5).
- Conecte o SDA no MCP9808 para SDA no Raspberry Pi (pino 3).
- Conecte um 10K Ω resistor entre o Alerta pino no MCP9808 e 3V3 no Raspberry Pi.
- Conecte o Alerta fixar no MCP9808 ao GPIO 6 (pino 31) no Raspberry Pi.
- Coloque o botão de pressão na placa de ensaio.
- Conecte um lado do interruptor ao GPIO 5 (pino 29) no Raspberry Pi.
- Conecte o outro lado do interruptor GND no Raspberry Pi.
- Conecte um 10K Ω resistor entre o GPIO 5 e 3V3 no Raspberry Pi.
Abaixo estão algumas fotos do circuito que construí usando o sapateiro.
Requisitos do Microsoft Azure
Se você não tiver uma conta do Azure, precisará criar uma. Você pode obter um crédito de $ 200 ao iniciar sua conta. Vá para azure.com e clique no link CONTA GRATUITA . Se você já tiver uma conta, faça login no portal em portal.azure.com .
NOTA:Este guia não é um guia completo para configurar o Azure. Você pode precisar se familiarizar com o portal, caso nunca o tenha usado antes. Vou percorrer as etapas necessárias para este projeto da melhor maneira possível.
Mantenha-se conectado ao portal do Azure durante todo o processo de configuração. Você precisará consultá-lo várias vezes.
Configuração do Hub de eventos IoT do Azure
- Selecione Novo no menu esquerdo do portal.
- Selecione Internet das coisas
- Selecione Iot Hub
- Insira um nome exclusivo para o seu hub.
- Selecione uma assinatura.
- Em Grupo de recursos selecione Criar Novo e digite um nome para o seu grupo. Observe que você usará este grupo para todos os recursos do Azure criados durante este projeto.
- Escolha um local ( tente manter todos os recursos na mesma região para manter os custos baixos ).
- Se este for o seu primeiro hub IoT, selecione Preço e nível de escala. Em seguida, selecione F1 Livre . Você pode ter um nível gratuito em sua conta.
- Por fim, clique em criar e aguarde a criação do Hub IoT.
- Clique em Hub IoT no menu esquerdo para ver o novo hub.
- Clique no novo hub para ter uma visão geral dos detalhes. Você precisará consultar esta visualização mais tarde.
Criar um dispositivo
O Hub IoT do Azure requer que cada dispositivo seja identificado e registrado exclusivamente no hub para fins de segurança. Um dispositivo pode ser registrado usando o SDK e código do Azure, mas para este projeto usaremos o Device Explorer disponível no SDK do Azure.
- Baixe o SDK do Azure no GitHub em https://github.com/Azure/azure-iot-sdk-csharp obtendo o arquivo zip ou clonando o repositório.
- Se você baixou o arquivo zip, expanda-o para uma pasta em seu disco.
- Abra a pasta azure-iot-sdk – csharp-master \ tools \ DeviceExplorer .
- Abra o projeto DeviceExplorer no Visual Studio.
- Execute o aplicativo.
- Volte para o portal do Azure e selecione seu Hub IoT. Clique em Políticas de acesso compartilhado link e selecione iothubowner . Clique em copiar botão próximo a string de conexão - chave primária .
- Na janela do Device Explorer, cole esta string na caixa de texto chamada String de conexão do Hub IoT .
- Clique em Atualizar botão.
- Mude para o Gerenciamento guia no Device Explorer e clique em Criar .
- Digite um nome para o seu dispositivo (exemplo, Dispositivo de temperatura1 ).
- Certifique-se de que Gerar chaves automaticamente caixa de seleção é marcada e clique em Criar .
- Clique em Concluído .
- Você precisará voltar a este aplicativo para obter a string de conexão do dispositivo mais tarde.
Configuração do Banco de Dados SQL do Azure
Os dados de telemetria serão armazenados em um Banco de Dados SQL do Azure. Use o portal para criar o banco de dados.
- Clique em Bancos de dados SQL no menu do portal.
- Clique em Adicionar botão.
- Insira um nome para o banco de dados (ou seja, SensorTelemetry)
- Selecione uma assinatura.
- Para grupo de recursos escolha Usar existente e selecione Telemetria do Sensor no menu suspenso.
- Clique no link do servidor para configurar um novo servidor.
- Digite um nome para o servidor.
- Digite um nome de usuário ( você precisará dele mais tarde, lembre-se dele ).
- Digite uma senha ( você precisará dela mais tarde, lembre-se dela ).
- Escolha um local ( tente manter todos os recursos na mesma região para manter os custos baixos ).
- Clique em Selecionar .
- Clique em Nível de preços .
- Selecione Básico .
- Clique em Selecionar .
- Clique em Criar .
- Clique no novo servidor na lista do SQL Server,
- Clique em Definir firewall do servidor para permitir o acesso do seu computador ao SQL Server.
- Insira um nome para a conexão e seu endereço IP externo no intervalo de IP inicial e IP final.
- Clique nas reticências para salvar a entrada.
- Clique em Salvar para salvar o endereço IP.
Criar a tabela de banco de dados
A tabela usada será criada manualmente. A implantação do Code First pode ser usada em aplicativos móveis, mas a tabela criada não será compatível com o Stream Analytics.
- Abra o Visual Studio.
- Selecione SQL Server Object Explorer da Visualização menu.
- Clique com o botão direito em SQL Server objeto e selecione Adicionar SQL Server .
- Navegue pelos bancos de dados do Azure e selecione o banco de dados que você criou na etapa anterior.
- Digite seu nome de usuário e senha e clique em Conectar .
- Expanda os itens do explorador de objetos até ver o banco de dados que você criou.
- Clique com o botão direito neste banco de dados e escolha Nova consulta .
- Copie o script SQL da parte inferior desta página do projeto e cole-o na janela de código do Visual Studio.
- Selecione Executar do SQL menu para executar o script.
- Expandir o objeto de tabelas no explorador revelará a tabela recém-criada chamada SensorReadings .
Criar o plano de serviço do aplicativo
O Plano de Serviço de Aplicativo é necessário para a criação de um Serviço de Aplicativo.
- Selecione planos de serviço de aplicativo no menu do portal.
- Digite um nome para o plano.
- Para grupo de recursos escolha Usar existente e selecione Telemetria do Sensor no menu suspenso.
- Escolha um local.
- Clique em Nível de preços e selecione B1 Básico .
- Clique em Criar .
Criar o serviço de aplicativo ( Aplicativo móvel )
O site e o hub SignalR serão executados com um serviço de aplicativo.
- Clique em Novo no menu do portal.
- Escolha Web + Celular da lista.
- Escolha Aplicativo móvel .
- Digite um nome para o aplicativo.
- Selecione uma assinatura.
- Para grupo de recursos escolha Usar existente e selecione Telemetria do Sensor no menu suspenso.
- Escolha o plano de serviço de aplicativo que você criou na etapa anterior.
- O App Insights é opcional.
- Clique em Criar .
Configuração do Stream Analytics do Azure
O trabalho do Stream Analytics monitorará eventos de dados no Hub IoT e os gravará em um banco de dados SQL Server. O trabalho consistirá em uma entrada (o Hub IoT) e uma saída (a Tabela SQL) e uma Consulta que escolhe quais campos usar.
- Escolha Novo .
- Selecione Dados + Analytics no menu.
- Selecione Trabalho do Stream Analytics no menu.
- Digite um nome exclusivo para o trabalho.
- Selecione uma assinatura.
- Para o grupo de recursos, escolha Usar existente e selecione Telemetria de sensor no menu suspenso.
- Escolha um local ( tente manter todos os recursos na mesma região para manter os custos baixos ).
- Clique em Criar .
- Selecione Mais serviços> no menu.
- Role para baixo até Stream Analytics e clique na estrela . Isso o fixará no menu do portal.
- Clique em jobs do Stream Analytics no menu do portal.
- Selecione o trabalho que você acabou de criar.
- Clique em Entradas .
- Clique em Adicionar .
- Insira um nome para a entrada (ou seja, SensorTelemetry-Input).
- Mude a fonte para IoT Hub .
- Aceite os valores padrão restantes.
- Clique em Criar .
- Clique em Saídas .
- Clique em Adicionar .
- Insira um nome para a saída (ou seja, SensorTelemetry-Output).
- Selecione Banco de dados SQL como a pia.
- Selecione o banco de dados Sensor Telemetry.
- Insira o nome de usuário que você especificou ao criar o servidor de banco de dados.
- Digite a senha que você especificou quando criou o servidor de banco de dados.
- Insira SensorReadings para o nome da tabela.
- Clique em Criar .
- Selecione Consulta .
- Substitua o texto [YourOutputAlias] com o nome da saída (mantendo os colchetes).
- Substitua o texto [YourInputAlias] com o nome da entrada (mantendo os colchetes).
- Substitua o asterisco ( * ) com este texto: [TimestampUtc], Source, Temperature, IsCritical, IsAboveUpperThreshold, IsBelowLowerThreshold
- Clique em Salvar e clique em Sim se solicitado.
- Clique em Visão geral no menu de tarefas do Stream Analytics.
- Clique em Iniciar botão.
- Escolha agora.
- Clique em Iniciar .
Configuração do software
Usando o link do repositório na parte inferior da página, baixe o código como um arquivo zip ou clone o repositório para o seu computador e abra o projeto no Visual Studio .
Configurar e publicar o aplicativo móvel
O aplicativo da Web (localizado na pasta da Web) precisa ser publicado no Serviço de Aplicativo do Azure.
- Clique com o botão direito do mouse no projeto no Visual Studio e selecione Publicar .
- Clique em Microsoft Azure App Service .
- Selecione seu serviço de aplicativo na lista (pode ser necessário fazer login se for a primeira vez).
- Clique em OK .
- Clique em Avançar .
- Vá para o portal do Azure
- Selecione Bancos de dados SQL no menu do portal.
- Selecione seu banco de dados.
- Clique em Mostrar strings de conexão de banco de dados link.
- Clique no botão copiar ao lado de ADO.NET string.
- Volte para o Visual Studio e cole esta string na caixa de texto rotulada MS_TableConnectionString .
- Altere o nome de usuário e a senha para os valores que você definiu ao criar o SQL Server.
- Clique em Avançar .
- Clique em Publicar .
- Quando a publicação for concluída, um navegador será iniciado e apontado para o seu novo site.
Insira as credenciais do Hub IoT
Antes de executar o aplicativo, você precisará inserir as credenciais do dispositivo IoT Hub no código.
- Abra o projeto no Visual Studio.
- Expanda a Telemetria do sensor projeto sob a UWP pasta e abra o código por trás do App.xaml .
- Role para baixo até a seção com a definição de IIotHubConfiguration .
- Abra o Device Explorer projeto em outra instância do Visual Stduio.
- Clique na guia Gerenciamento.
- Clique com o botão direito no dispositivo que você criou anteriormente.
- Clique em Copiar string de conexão para o dispositivo selecionado opção no menu.
- Volte para o projeto Sensor Telemetry e cole a string de conexão sobre o texto {YOUR CONNECTION STRING HERE} .
- Digite o nome do dispositivo sobre o texto {ID DO SEU DISPOSITIVO AQUI} .
- Salve este arquivo.
- Expanda a Sensor Telemetria IoT projeto e encontre o código abaixo para App.xaml .
- Role para baixo até a seção com a definição de IIotHubConfiguration .
- Copie e cole a mesma configuração do app.cs anterior arquivo.
Insira o URL do aplicativo móvel
O URL do aplicativo móvel também precisa ser inserido no código.
- Abra o projeto no Visual Studio.
- Expanda o Compartilhado projeto.
- Abra o UnityConfiguration.cs .
- Role para baixo até a seção que contém a IMobileServicesConfiguration definição.
- Abra o portal do Azure.
- Clique em Serviços de aplicativos .
- Selecione o Serviço de aplicativo você criou para este projeto.
- Passe o mouse sobre o URL e clique em Copiar ícone.
- Volte para o Visual Studio e cole o URL sobre o texto {URL DO SEU SERVIÇO MÓVEL AQUI} .
Leia mais detalhes:Telemetria de sensor 2.0.1
Processo de manufatura
- O que é calibração do sensor - definição e sua aplicação
- Sensor de pulsação - Trabalho e aplicação
- O que é um sensor de O2?
- Biblioteca Python do sensor de temperatura TMP006 usando Raspberry pi,
- Sensor de movimento usando Raspberry Pi
- Sensor de umidade do solo Raspberry Pi
- Teste o sensor DS18B20
- Sensor de temperatura Raspberry Pi
- Telemetria do Sensor 2.0.1
- Sensor de emoção / EEG