Table des matières:
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAISCurso: Especialização em Arquitetura de Software Distribuído
Données: 2017-10-26
Unité: Praça da Liberdade
Discipline: Internet das Coisas
Professeur: Ilo Rivero
Alunos: Bruno Valgas ([email protected])
Dellan Hoffman P. Silva ([email protected])
Hébert Alves Ferreira ([email protected])
Jean Carlos Batista ([email protected])
Jeordane Batista ([email protected])
INTRODUCTION
Que serait-ce si nous pouvions arroser nos plantes n'importe quand, n'importe où ? Avec le projet WaterPlant, ce sera possible. Ce projet a été développé dans le but d'améliorer la commodité et la praticité pour traiter cet être si important pour la planète.
INTRODUCTION
Como seria se pudessemos aguar nossas plantas a qualquer hora e de qualquer lugar? Com o Projeto WaterPlant sera possible. Este projeto foi desenvolvido visando melhorar a comodidade e a praticidade para tratar deste ser tão important para o planeta.
FONCTIONNEMENT
O projeto foi desenvolvido para monitoramento de jardins, onde é possível efetuar a verificação do estado do solo, com relação a sua umidade. Sendo assim, por meio de parâmetros da umidade do solo é possível avaliar a necessidade de sua irrigação.
A placa envia informações para a API, armzenada na nuvem, que por sua vez é acessada pelo aplicativo mobile, que recebe e trata tais informações. Desta forma a aplicação mantem o usuário informado da situação do solo. O usuário em contato com a aplicação poderá solicitar o irrigamento imediado do solo, isa informação é enviada para a API que por sua vez se comunica com a placa para acionamento do dispositivo de irrigação.
Étape 1: COMPOSANTS - DRAGONBOARD
DragonBoard 410C
A DragonBoard 410C é a primeira placa de desenvolvimento baseada no processador da série Qualcomm Snapdragon 400, contando com conexões Wifi, Bluetooth e GPS em uma placa do tamanho aproximado de um cartão de credito, e é caracterizada pelo alto desempenho do a processador de 64 bits Qualcomm rodando à 1.2GHz, avec 1 Go de mémoire DDR3 533 MHz et 8 Go de mémoire d'armement (eMMC).
Prix: 500 R$ à 750 R$
Étape 2: COMPOSANTS - BASE DE LIAISON
Placa de expansão para mapeamento e utilização de portas, facilitando a utilização de sensores.
Étape 3: COMPOSANTS - CAPTEUR
Capteur d'Umidade do Solo
Este capteur utiliza dois eletrodos para passar corrente pelo solo e lê o nível de umidade por comparação com a resistência do potenciômetro do module do sensor. Quando o solo estiver seco, a sua resistência aumenta, dificultando a passagem de corrente. Com a absorção da água, a resistência do solo diminui permitindo a passagem de corrente entre os eletrodos e fechando, desta forma, o circuito. Dessa forma podemos definir quando o solo está molhado, ou quando está seco.
O módulo fornece tanto uma saída digital (D0), como uma saída analógica (A0). O sinal digital é ajustado para que tenha valor lógico 1 quando a umidade for maior do que um valor predefinido, ajustado atraves do potenciômetro presente no modulo.
Prix: 6 R$ à 20 R$.
Étape 4: DESENVOLVIMENTO COM WINDOWS 10 IOT CORE
Une application destinée à utiliser Dragonboard 410c pour l'utilisation de Windows 10 IoT Core.
O Windows 10 IoT Core est une plate-forme de développement pour faciliter la vidéo des développements à partir de la programmation de ces dispositifs. Com ele é possível desenvolver para várias placas existentes no mercado, bastando ter instalado no computador os seguintes itens(já em sequência de instalação, no caso de uso da Dragonboard):
- Visual Studio 2017 Community ou qualquer outtra versão (https://www.visualstudio.com/thank-you-downloading…);
- Outil de mise à jour DragonBoard;
- Tableau de bord Windows 10 IoT Core;
- Image principale de l'IoT pour Windows 10 DragonBoard;
- modèles de projet Windows IoT;
O processo completo para instalação e configuração pode ser encontrado no seguinte link:https://developer.microsoft.com/en-us/windows/iot/…
Após a instalação e configuração conforme o tutorial da Microsoft basta criar um novo projeto no Visual Studio do tipo Background Application.
Para este tutoriel vamos disponibilizar o código finalizado da aplicação atraves do GitHub em
Toda a configuração do aplicativo está no arquivo StartupTask.cs na raiz do projeto, e vamos explicar abaixo parte a parte do código.
O método principal da aplicação é o Run() e seu código é o seguinte:
public void Run (IBackgroundTaskInstance taskInstance)
{ InitGPIO(); InitSPI(); _deferral = taskInstance. GetDeferral(); timer = ThreadPoolTimer. CreatePeriodicTimer(Timer_Tick, TimeSpan. FromMilliseconds(10000)); timer2 = ThreadPoolTimer. CreatePeriodicTimer(Timer_Tick2, TimeSpan. FromMilliseconds(10000)); }
Os métodos InitGPIO() et InitSPI() inicializam variáveis para serem utilizadas na nossa aplicação enquanto as variáveis timer e timer2 criam 2 timers para serem executados a cada quantidade de tempo, e neste caso) foram segundostrizados10 time(s). Para alterar esse tempo basta mudar estes valores nessa parte do código.
O Método InitGPIO() a seguir tem como função definir as configuraçõese do pino que ativa a válvula solenoide de água. Nesse exemplo de código para a Dragonboard o código do pino foi o 36.
vide privé InitGPIO()
{ var gpio = GpioController. GetDefault(); if (gpio == null){ pin = null; revenir; } broche = gpio. OpenPin(36); if (pin == null){ return; } pin. Write(GpioPinValue. High); pin. SetDriveMode(GpioPinDriveMode. Output); }
O método InitSPI() configure un porta SPI0 da Dragonboard.
Tâche privée asynchrone InitSPI()
{ essayez { var settings = new SpiConnectionSettings(0); // Sélectionne le port SPI0 des paramètres DragonBoard. ClockFrequency = 500000; // Configura o clock do barramento SPI em 0.5MHz settings. Mode = SpiMode. Mode0; // Configura polaridade e fase do clock do SPI var controller = wait SpiController. GetDefaultAsync(); SpiADC = contrôleur. GetDevice(paramètres); } catch (Exception ex){ throw new Exception("Falha na inicialização do SPI", ex); } }
O premier timer invoca o método Timer_Tick() que tem como função a verificação attravés da API se houve um commando para iniciar uma irrigação. O seguinte trecho de código é responsável pela chamada à API:
var httpWebRequest = (HttpWebRequest)WebRequest. Create("https://serverless-study.appspot.com/api/v1/irrigacoes");
httpWebRequest. ContentType = "application/json"; httpRequêteWeb. Méthode = "GET";
Neste trecho de código deve ser alterado para o endereço onde será hospedado o código da API para buscar o commando de irrigação. É neste trecho de código que a irrigação é encerrada também.
Para o segundo timer é invocado o método Timer_Tick2() que é responsável pelo envio dos dados da umidade do solo naquele momento. É no seguinte trecho de código deste método que deve ser configurado o endereço da API para o envio dos dados:
var httpWebRequest = (HttpWebRequest)WebRequest. Create("https://serverless-study.appspot.com/api/v1/umidades");
httpWebRequest. ContentType = "application/json"; httpWebRequest. Method = "POST";
O método LerADC (byte canal) é o método responsável por ler do conversor analógico/digital os valores informados pelo sensor de umidade. Este adaptador informa um array de bytes que é convertido em inteiro atraves do método ConvertToInt([ReadOnlyArray] byte data). Segue os trechos de código:
public int LerADC (octet canal)
{ byte readBuffer = new byte[3]; byte writeBuffer = new byte[3] { 0x00, 0x00, 0x00 }; writeBuffer[0] = 0x01; writeBuffer[1] = canal; SpiADC. TransferFullDuplex(writeBuffer, readBuffer); adcValue = ConvertToInt(readBuffer); return adcValue; } public int ConvertToInt([ReadOnlyArray] byte data) { int result = 0; résultat = données[1] & 0x03; résultat <<= 8; résultat += données[2]; renvoyer le résultat; }
Étape 5: PREPARANDO une API
API pour desenvolvida na plate-forme NodeJS (https://nodejs.org), pour utilizado o Swagger (https://swagger.io/specification/) une fim de modelar e documentar os recursos utilizados na integração do trabalho.
Para armazenamento dos dados foi utilizado o banco de dados MySQL, banco de dados relation e open source.
Segue abaixo a arquitetura de camadas que compõem a API.
● /api: Camada que gerencia os recursos disponibilizados para que terceiros possam acessar.
○ /api/controller: Camada que gerencia as rotas definidas no documento gerado pelo swagger.
○ /api/service: Camada que entrega os dados de entrada para serem tratados, depois escritos ou lidos pela camada de BO (descrita mais à diante). Nesta camada está configurado o retorno ocorrido durante o processo de request.
○ /api/swagger: Camada que contém o arquivo de configuração do swagger, onde estão toda as configurações dos recursos.
● /domain: Camada que contém toda codificação relacionada a regra de negócio da aplicação.
○ /référentiel: Camada de persistência de dados.
● /infrastructure: Cama de configuração das strings of conexão do banco de dados e também do servidor que será provisionado pela própria aplicação.
Pour plus d'informations et de consultation ao código fonte acesso o link do github:
Segue abaixo avec une brève description de cada recurso disponibilizados avec API:
Méthode: POST
URI: /api/v1/umidades
Description: Recurso utilizado para registar umidade coletada pelo sensor de umidade.
Exemple de demande:
{
"valeur": 355 }
Méthode: GET
URI: /api/v1/umidades
Description: Recurso que recupera todos os registros de valores de umidade que foram salvos anteriormente.
Exemple de réponse:
[{ « id »: 1, « valeur »: 355, « dataCadastro »: aaaa-MM-jj HH:MM }]
Méthode: POST
URI: /api/v1/irrigacoes
Description: Recurso utilizado para ativar o dispositivo de irrigação.
Méthode: GET
URI: /api/v1/irrigacoes
Description: Recurso utilizado para verificar o estado de umidade atual do solo.
Exemple de réponse:
{
"valeur": 355 }
Étape 6: APP MOBILE
Escolhemos uma tecnologia híbrida para gerar um código reutilizável para todas as plateformas (Android e IOS) para aumentar a abrangência de usuários e diminuir o custo do projecto. O Ionic é um framework que possui uma gigantesca biblioteca de componentes gráficos que facilita a implementação visual do aplicativo. Ele utiliza de linguagens web (HTML, CSS e Javascript) pour un criação das telas e tem o Angular como o seu núcleo (core). Através do cordova (biblioteca javascript) os recursos do dispositivos são acessados pelo webview do mesmo.
O aplicativo consiste em realizar algumas requisições para a API do sistema a fim de se obter informações sobre a umidade do solo e regar o mesmo remotamente. Através de um evento de botão uma requisição é enviada para o servidor e a ação correspondante é realizada.
Liens:
- https://ionicframework.com/
- https://angular.io/
- https://ionicframework.com/
O código fonte do aplicativo modelo encontra-se no GitHub, no endereço
Para que o aplicativo funcione basta configurar o endereço da API no arquivo server.ts que encontra-se no diretório /src/entity/server.ts(https://github.com/jeordanecarlosbatista/temperat…) e alterar a variável URI_PREFIX, conforme exemplo abaixo para o endereço onde está hospedada a API:
classe d'exportation Serveur {
URI_PREFIX public statique en lecture seule: string = "https://serverless-study.appspot.com/api/v1/"; /* public static readonly URI_PREFIX: string = "https://dominio.com/aplicacao/"; */ }
Étape 7: FLUXOGRAMME
Étape 8: RÉFÉRENCES
Instructables:
Qualcomm DragonBoard 410C:
Windows 10 et DragonBoard™ 410c – le point de départ idéal pour le développement IoT:
Monitore sua planta usando Arduino: