Índice:

Iniciando uma Smart Home - Projeto Final: 6 etapas
Iniciando uma Smart Home - Projeto Final: 6 etapas

Vídeo: Iniciando uma Smart Home - Projeto Final: 6 etapas

Vídeo: Iniciando uma Smart Home - Projeto Final: 6 etapas
Vídeo: 6 DICAS - Como COMEÇAR CORRETAMENTE sua Casa Inteligente desde o Início 2024, Novembro
Anonim
Iniciando uma Smart Home - Projeto Final
Iniciando uma Smart Home - Projeto Final

Projeto apresentado é parte do projeto final do curso de IoT aplicada a Smart Home

O projeto projetado a seguir e parte do projeto final a ser apresentado no curso de IoT aplicada a Smart Home, que consiste de sensores e atuadores conectados na DrangonBoard + Linker Mezzanine, um aplicativo desenvolvido com o iônico (a ser incluido em breve) e as informações / dados das "coisas" serão salvadas na nuvem da AWS. Para uma primeira iteração com o DragonBoard e IoT como um todo, decidiu-se fazer um sistema de acendimento automático de luzes, com um sensor de luminosidade, uma chave liga / desliga para ativar um aparelho de ar-condicionado de acordo com uma temperatura pré -setada e um sensor de proximidade que será instalado no portão de uma garagem, com a intenção de informar ao proprietário da casa se o portão encontra-se aberto ou fechado.

Etapa 1: Materias Necessários

Materias Necessários
Materias Necessários
Materias Necessários
Materias Necessários
  1. Coloque DragonBoard.
  2. 96Boards Linker Mezzanine
  3. Sensor de luminozidade (LDR) que acompanha um Linker Mezanino.
  4. Sensor de temperatura que acompanha um Linker Mezanino.
  5. Botão touch que acompanha a Linker Mezanino.
  6. Relacionado com um Linker Mezzanine, utlizado para ligar ou sistema de A / C.
  7. LED acompanhado a Linker Mezanino, que representa a iluminação a ser ativada.
  8. Instalação das bibliotecas citadas no passo 5.

Etapa 2: Sensores, Atuadores E Conexões

Sensores, Atuadores E Conexões
Sensores, Atuadores E Conexões
Sensores, Atuadores E Conexões
Sensores, Atuadores E Conexões

1. Mezanino do Linker:

Será necessário conectar a placa Mezzanine no dragonboard. Para detalhes, consultar link

2. Sensor de luminosidade (LDR)

O sensor é parte do Kit do Linker Mezanino e deve ser conectado à entrada ADC1. Para detalhes técnicos:

3. Sensor de Temperatura

O sensor é parte do Kit do Linker Mezanino e deve ser conectado à entrada ADC2. Para detalhes técnicos:

4. Botão Touch

O sensor é parte do Kit do Linker Mezanino e deve ser conectado à entrada D1. Este botão irá ligar / desligar o sistema como um todo. O acesso a este botão é somente local. Para detalhes técnicos: https://linksprite.com/wiki/index.php5? Title = Touch_…

5. Relé

O relé é parte do Kit do Linker Mezanino e deve ser conectado na entrada D2. Ele será utiizado para ligar / desligar o sistema de A / C. Para detalhes técnicos:

6. LED

O LED é parte do kit do Linker Mezanino e deve estar conectado à entrada D4. O LED representa o sistema de iluminação de uma casa, seja algum cômodo interno da casa ou externo, como a iluminação de um jardim. Foi adicionado um resistor de 10k ohm em sério com o já existente para diminuir a corrente utilizada pelo sistema, já que em experiências anteriores verificou-se conflitos com as portas analógicas. Para detalhes técnicos:

7. Sensor de contato magnético

Este sensor foi comprado a parte e não faz parte do Kit da Linker Mezanino. Ele será usado em uma janela ou no portão de garagem para informar se a janela / garagem está aberta ou fechada. O sensor é um conjunto formado por 2 pequenas peças (ver foto do Passo acima), o sensor proprimamente dito e um pequeno "imã", que ao aproximar-se do sensor irá alterar o estado do sensor. O sensor utlizado neste projeto foi um N / A (normalmente aberto). Quando o imã não está próximo do sensor, o sensor reportará o estado aberto. Quando o imã estiver próximo do sensor, o estado reportado será fechado.

Etapa 3: Aplicativo Para Controle Remoto

Aplicativo Para Controle Remoto
Aplicativo Para Controle Remoto

O aplicativo foi desenvolvido com o Ionic Framework, https://ionicframework.com/. Será necessário fazer o download e a instalação da última versão.

O aplicativo irá se comunicar (ler e atualizar os dados) com uma nuvem da AWS (AWS IoT- https://aws.amazon.com/iot/), que posteriormente será acessado pela placa dragonboard para atualização dos status dos sensores e atuadores.

- Sistema de Iluminação mostra o estado do sitema de iluminação, ligado ou ligado. Quando o nível de luminosidade baixar do valor configurado, as luzes se acenderão automaticamente. Quando a intensidade de luz aumentar do valor definido, as luzes se apagarão.

- O botão A / C acionará o relé, que por sua vez acionará o sistema de A / C da casa. Também é possível definir o valor desejado da temperatura. Assim que a temperatura da casa estiver maior do que a temperatura de acionamento, o A / C será ligado e permanecerá ligado até a temperatura abaixar em 2 graus da tempreatura definida. Por exemplo, consideraremos que a temperatura é de 23 graus. Quando uma temperatura interior chegar a 24 graus, o A / C será ligado e permanecerá ligado até a temperatura chegar a 20 graus, desligando então. Depois o ciclo se repetirá.

- Garagem informará a atual posição da garagem, se aberta ou fechada.

- Temperatura é apenas informativa e mostra a temperatura do interior da casa.

- Luminosidade é apesas informativa e mostra o valor da luminosidade atual.

Segue em anexo os arquivos home.html e home.ts contendo os códigos para comunicação com a nuvem AWS e atualização do app.

Etapa 4: Criando Uma "coisa" Na AWS IoT

Criando Uma
Criando Uma

Para fazer o setup do IoT na AWS, os seguintes passos devem ser seguidos:

1) Criar um projeto no AWS IoT atravé do link:

2) Clique em "criar uma coisa" e então, "Criar uma coisa". Dê o nome do projeto e clique em Avançar.

3) Na tela a seguir, clique em "Criar uma coisa sem certificado". Esse tutorial não irá utilizar os certificados por questões práticas, porém não é recomendado fazer o uso de IoT sem certificados.

4) Nesse momento, sua "coisa" já estará criada. Clique no botão da "coisa" que foi criado para abrir uma tela com as opções. Nessa tela podemos ver os semelhantesMQTT que podem ser usados para fazer a atualização dos dados e serem enviados para a Could, assim como é uma ótima ferramenta para a solução de problemas. Nenhum código em Python que será apresentado em breve, foram utlizados alguns destes tópicos. Nas opções também podemos ver uma "sombra", que nada mais é que uma informação que está no dragonboard refletida na nuvem AWS.

Etapa 5: Programa Em Python

As seguintes bibliotecas serão necessárias para a execução do programa:

import spidevimport time import logging import json import argparse

de libsoc import gpio

from time import sleep from datetime import date, datetime from gpio_96boards import GPIO from AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTClient from AWSIoTPythonSDK. MQTTLib

Segue abaixo código completo do programa:

import spidevimport time import logging import json import argparse

de libsoc import gpio

from time import sleep from datetime import date, datetime from gpio_96boards import GPIO from AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTClient from AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTShadowClient

GPIO_CS = GPIO.gpio_id ('GPIO_CS') #Analog Port

BUTTON = GPIO.gpio_id ('GPIO_A') RELE = GPIO.gpio_id ('GPIO_C') LED = GPIO.gpio_id ('GPIO_G')

pinos = ((GPIO_CS, 'fora'), (BOTÃO, 'dentro'), (RELE, 'fora'), (LED, 'fora'),)

def setdevices (deltaMessagePython):

System_Status = deltaMessagePython ['SystemStatus'] Rele_Status = deltaMessagePython ['AC'] Led_Status = deltaMessagePython ['SisIlumi']

##### AC

se Rele_Status == 1: gpio.digital_write (RELE, GPIO. HIGH)

se Rele_Status == 0:

gpio.digital_write (RELE, GPIO. LOW)

##### Sistema de Iluminacao

se Led_Status == 1: gpio.digital_write (LED, GPIO. HIGH) se Led_Status == 0: gpio.digital_write (LED, GPIO. LOW)

def readadc (gpio):

gpio.digital_write (GPIO_CS, GPIO. HIGH)

time.sleep (0,0002) gpio.digital_write (GPIO_CS, GPIO. LOW) r = spi.xfer2 ([0x01, 0xA0, 0x00]) # ADC2 - Temperatura gpio.digital_write (GPIO_CS, GPIO. HIGH) adcout = (r [1] << 8) & 0b1100000000 adcout = adcout | (r [2] & 0xff) adc_temp = (adcout * 5.0 / 1023-0.5) * 100

gpio.digital_write (GPIO_CS, GPIO. HIGH)

time.sleep (0,0002) gpio.digital_write (GPIO_CS, GPIO. LOW) r = spi.xfer2 ([0x01, 0x80, 0x00]) # ADC1 - Luminosidade gpio.digital_write (GPIO_CS, GPIO. HIGH) adcoutldr = (r [1] << 8) & 0b1100000000 adcoutldr = adcoutldr | (r [2] & 0xff) adcoutldr = str (adcoutldr) now = datetime.utcnow () now_str = now.strftime ('% Y-% m-% dT% H:% M:% SZ') temperatura = "{:.2f} ". Format (adc_temp) payload_temp = '{" state ": {" desejado ": {" Luminosidade ":' + adcoutldr + '," Temperatura ":' + temperatura + '}}}' myMQTTClient.publish ("$ aws / things / DBpyAWS1116 / shadow / update", payload_temp, 0) return r

def desliga ():

gpio.digital_write (RELE, GPIO. LOW) gpio.digital_write (LED, GPIO. LOW)

def run (gpio):

system_status = 1

enquanto verdadeiro:

time.sleep (2) button_value = gpio.digital_read (BUTTON) print ("----") time.sleep (0,25) se button_value == 1: se system_status == 0: system_status = 1 else: system_status = 0 desliga () se system_status == 1: value = readadc (gpio) print "SYSTEM_STATUS% d"% system_status time.sleep (3)

classe shadowCallbackContainer:

def _init _ (self, deviceShadowInstance): self.deviceShadowInstance = deviceShadowInstance

# Retorno de chamada de sombra personalizado

def customShadowCallback_Delta (self, payload, responseStatus, token): print ("Recebeu uma mensagem delta:") ### script de atualização de carga útil payloadDict = json.loads (carga útil) deltaMessage = json.dumps (payloadDict ["state"]) imprimir "DELTA MESSAGE% s"% deltaMessage ### Solicitação para atualizar o estado relatado newPayload = '{"state": {"relatado":' + deltaMessage + '}}' deltaMessagePython = json.loads (deltaMessage) setdevices (deltaMessagePython)

spi = spidev. SpiDev ()

spi.open (0, 0) spi.max_speed_hz = 10000 spi.mode = 0b00 spi.bits_per_word = 8

####### Definição da coisa

# Conexão baseada em certificado AWS IoT

myMQTTClient = AWSIoTMQTTClient ("DBpyAWS1116") myMQTTClient.configureEndpoint ("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ home / linaro / shared-root / CAWSt, "/ home / linaro / shared / AWS /" SUA CHAVE "-private.pem.key", "/ home / linaro / shared / AWS /" SEU CERTIFICADO "-certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (- 1) # Fila de publicação offline infinita myMQTTClient.configureDrainingFrequency (2) # Drenando: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 seg myMQTTClient.configureMQTTOperationTimeout (5) # 5 sec #ConnectDisconnectTimeout (10) # 10 sec myMQTTClient.configureMQTTOperationTimeout (5) # 5 secish #Connect (MyQconnectTimeout) coisajsb "," conectado ", 0)

########################

####### Definição de sombra

# Init AWSIoTMQTTShadowClient

myAWSIoTMQTTShadowClient = Nenhum myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient ("DBpyAWS1116") myAWSIoTMQTTShadowClient.configureEndpoint ("SEU END-POINT.us-west-west-2.amazonaCredo.com" / linTamazonacrede / root883d / htmlcompartilhado / linTamazonaTsHomeTw888 / htmlcompartilhado / w8888homeTravels / lnomeTaSi / td / homeTamazonacomp "/ linTaSiTravels / lnn / hq88d / hq885 / htmlcompartilhado / w8888HomeTraiT compartilhada / root / td / hd / ht / ht / htmlcompartilhado / 8H888HomeTotals / root / td / ht / hd / hd / htmlcompartilhado. CA.crt "," / home / linaro / shared / AWS / "SUA CHAVE" -private.pem.key "," / home / linaro / shared / AWS / "SEU CERTIFICADO-certificate.pem.crt")

# AWSIoTMQTTShadowClientconfiguraçãomyAWSIoTMQTTShadowClient.configureAutoReconnectBackoffTime (1, 32, 20) myAWSIoTMQTTShadowClient.configureConnectDisconnectTimeout (10) # 10 sec myAWSIoTMQTTShadowTimeout (10) # 10 sec myAWSIoTMQTTShadowTime (5)

# Conecte-se ao AWS IoT

myAWSIoTMQTTShadowClient.connect ()

# Crie um deviceShadow com assinatura persistente

deviceShadowHandler = myAWSIoTMQTTShadowClient.createShadowHandlerWithName ("DBpyAWS1116", True) shadowCallbackContainer_Bot = shadowCallbackContainer (deviceShadowHandler)

# Ouça em deltas

deviceShadowHandler.shadowRegisterDeltaCallback (shadowCallbackContainer_Bot.customShadowCallback_Delta)

#########################

myMQTTClient.publish ("$ aws / things / DBpyAWS1116 / shadow / update", '{"state": {"desejado": {"SystemStatus": 1, "SisIlumi": 0, "AC": 0, "Garagem": "Fechada", "Temperatura": 25, "Luminosidade": 123}}} ', 0)

if _name_ == "_main_":

com GPIO (pinos) como gpio: run (gpio)

Etapa 6: Finalização

Finalização
Finalização

Após ter concluído os passos anteriores, deve-se inicializar o sistema de comando o código fornecido no passo 5 e inicializar o aplicativo através do Ionic, usando o comando Ionic service.

Para um possível solucionar problemas, recomenda-se usar uma função MQTT Client TEST do AWS, onde é possível verificar e verificar as mensagens sentidas pela dragonboard está sendo atualizada de forma correta na nuvem AWS: https://us-west-2.console.aws.amazon.com / iotv2 / hom…

Recomendado: