Tabla de contenido:

Inicio de una casa inteligente - Proyecto final: 6 pasos
Inicio de una casa inteligente - Proyecto final: 6 pasos

Video: Inicio de una casa inteligente - Proyecto final: 6 pasos

Video: Inicio de una casa inteligente - Proyecto final: 6 pasos
Video: 🔴 DOMÓTICA EN 2023 - Cómo empezar tu CASA INTELIGENTE - MATTER 2024, Noviembre
Anonim
Comenzando una casa inteligente - Projeto Final
Comenzando una casa inteligente - Projeto Final

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

O projeto mostrado a seguir é 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 ionic (a ser incluido em breve) e as informações / dados das "coisas" serão salvados na cloud da AWS. Para uma primeira iteração com a 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 pre -setada e um sensor de proximidade que será instalado no portão de uma garagem, com a intenção de informar ao owner da casa se o portão encontra-se aberto ou fechado.

Paso 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 a Linker Mezzanine.
  4. Sensor de temperatura que acompanha a Linker Mezzanine.
  5. Botão touch que acompanha a Linker Mezzanine.
  6. Relé acompanha a Linker Mezzanine, utlizado para ligar o systema de A / C.
  7. LED acompanha a Linker Mezzanine, que representará una iluminación y un ser ativada.
  8. Instalação das bibliotecas citadas no passo 5.

Paso 2: Sensores, Atuadores E Conexões

Sensores, Atuadores E Conexiones
Sensores, Atuadores E Conexiones
Sensores, Atuadores E Conexiones
Sensores, Atuadores E Conexiones

1. Entresuelo del vinculador:

Será necesario conectar una placa Mezzanine na dragonboard. Para más detalles, consulte el enlace

2. Sensor de luminosidad (LDR)

O sensor é parte del Kit da Linker Mezzanine y deverá ser conectado en la entrada ADC1. Para detalles técnicos:

3. Sensor de Temperatura

O sensor é parte del Kit da Linker Mezzanine y deverá ser conectado en la entrada ADC2. Para detalles técnicos:

4. Botão Touch

O sensor é parte del Kit da Linker Mezzanine y deverá ser conectado en la entrada D1. Este botão irá ligar / desligar o sistema como um todo. O acesso a este botão é somente local. Para detalles técnicos: https://linksprite.com/wiki/index.php5? Title = Touch_…

5. Relé

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

6. LED

O LED es parte del kit da Linker Mezzanine y deverá ser conectado en la entrada D4. O LED representará o sistema de iluminación de uma casa, seja algum cômodo interno da casa ou externo, como iluminación de um jardim. Foi adicionado um resistor de 10k ohm em sério com o já existente para diminuir a corrente used hair system, já que em experiências anteriores verificou-se conflitos com as portas analógicas. Para detalles técnicos:

7. Sensor de contato magnético

Este sensor para comprado una parte y otra parte de Kit da Linker Mezzanine. Ele será usado em uma janela ou no portão de uma garagem para informar se a janela / garagem está aberta ou fechada. O sensor é um conjunto formado por 2 pequeñas peças (ver foto del paso acima), o sensor proprimamente dito e um pequeño "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á estado aberto. Quando o imã estiver próximo do sensor, o estado reportado será fechado.

Paso 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á necesario fazer o descargar e instalar una última versión.

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

- Sistema de iluminación mostrada o estado del sitio de iluminación, ligado o desligado. Quando o nível de luminosidade baixar do valor establecido, as luzes se acenderão automáticamente. Quando a intensidade de luz aumentará além do valor definido, as luzes se apagarão.

- O botão A / C acionará o relé, que por sua vez acionará o system de A / C da casa. También es posible definir el valor desejado de la temperatura. Assim que a temperatura da casa estiver maior do que a temperatura de acionamento, o A / C estará ligado y permanecerá ligado até a temperatura abaixar em 2 graus da tempreatura definida. Por ejemplo, vamos a considerar que una temperatura de 23 grados. Quando a temperatura interior chegar a 24 graus, o A / C estará 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.

- La temperatura es apenas informativa y la temperatura del interior de la casa.

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

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

Paso 4: Criando Uma "coisa" Na AWS IoT

Criando Uma
Criando Uma

Para realizar la configuración de IoT en AWS, los siguientes pasos serán los siguientes:

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

2) Clique "crea una cosa" e então, "Crea una sola cosa". Dê o nome do projeto e clique em Siguiente.

3) En la tela siguiente, haga clic en "Crear una cosa sin certificado". Tutorial de Nesse no iremos a utilizar certificados por consultas práticas, por lo que no es recomendable utilizar certificados de IoT sem.

4) Nesse momento, sua "coisa" já estará criada. Clique no botão da "coisa" que foi criado para abrir una tela com como opções. Nessa tela podemos ver os tópicosMQTT que podem ser usados para fazer a atualização dos dados y serem enviados para a podría, asimilar como é uma ótima ferramenta para solución de problemas. No código em Python que será apresentado em breve, foram utlizados alguns destes tópicos. También podemos ver una "sombra", pero no hay nada más que una información que esté en la placa base reflejada en la nube de AWS.

Paso 5: Programa Em Python

Como seguintes bibliotecas serão necessárias para una ejecución del programa:

importar spidevimportar tiempo importar registro importar json importar argparse

de libsoc importar gpio

desde 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 del programa:

importar spidevimportar tiempo importar registro importar json importar argparse

de libsoc importar gpio

desde 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') # Puerto analógico

BOTÓN = GPIO.gpio_id ('GPIO_A') RELE = GPIO.gpio_id ('GPIO_C') LED = GPIO.gpio_id ('GPIO_G')

pines = ((GPIO_CS, 'fuera'), (BOTÓN, 'in'), (RELE, 'out'), (LED, 'out'),)

def setdevices (deltaMessagePython):

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

##### AC

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

si Rele_Status == 0:

gpio.digital_write (RELE, GPIO. LOW)

##### Sistema de Iluminacao

si Led_Status == 1: gpio.digital_write (LED, GPIO. HIGH) si 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] y 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 - Luminosidad 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 = '{" estado ": {" deseado ": {" Luminosidade ":' + adcoutldr + '," 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 ejecutar (gpio):

system_status = 1

mientras que es cierto:

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

clase shadowCallbackContainer:

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

# Devolución de llamada de sombra personalizada

def customShadowCallback_Delta (self, payload, responseStatus, token): print ("Recibí un mensaje delta:") ### script de actualización de carga útil payloadDict = json.loads (payload) deltaMessage = json.dumps (payloadDict ["estado"]) imprimir "DELTA MESSAGE% s"% deltaMessage ### Solicitud para actualizar el estado informado newPayload = '{"estado": {"informado":' + 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

####### Definición de cosa

# Conexión basada en certificados de AWS IoT

myMQTTClient = AWSIoTMQTTClient ("DBpyAWS1116") myMQTTClient.configureEndpoint ("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("shared-home / linaro /, "/ home / linaro / shared / AWS /" SUA CHAVE "-private.pem.key", "/ home / linaro / shared / AWS /" SEU CERTIFICADO "-certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (- 1) # Cola de publicación sin conexión infinita myMQTTClient.configureDrainingFrequency (2) # Drenaje: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 sec myMQTTClient.configureMQTTOperationTimeout (5) # 5 sec #connect "y publique myMQTTClient. coisajsb "," conectado ", 0)

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

####### Definición de sombra

# Init AWSIoTMQTTShadowClient

myAWSIoTMQTTShadowClient = Ninguno myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient ("DBpyAWS1116") myAWSIoTMQTTShadowClient.configureEndpoint ("SEU END-POINT.us-west-2.amazonaws.com", compartido de 8883) myAWSIoTMQTTShadowClient / home. CA.crt "," / home / linaro / shared / AWS / "SUA CHAVE" -private.pem.key "," / home / linaro / shared / AWS / "SEU CERTIFICADO-certificate.pem.crt")

# AWSIoTMQTTShadowClient configurationmyAWSIoTMQTTShadowClient.configureAutoReconnectBackoffTime (1, 32, 20) myAWSIoTMQTTShadowClient.configureConnectDisconnectTimeout (10) # 10 segundos myAWSIoTMQTTShadowMTOT.configure # 5 sec.

# Conéctese a AWS IoT

myAWSIoTMQTTShadowClient.connect ()

# Crea un deviceShadow con suscripción persistente

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

# Escucha en deltas

deviceShadowHandler.shadowRegisterDeltaCallback (shadowCallbackContainer_Bot.customShadowCallback_Delta)

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

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

if _name_ == "_main_":

con GPIO (pines) como gpio: ejecutar (gpio)

Paso 6: Finalización

Finalización
Finalización

Após ter concluido os pasados anteriores, deve-se inicializar o sistema ejecutando o código fornecido no passo 5 e inicializar o aplicación através do Ionic, usando o comando Ionic serve.

Para um posível troubleshoot, se recomienda usar una función MQTT Client TEST de AWS, y luego se puede verificar como mensagens enviadas pela dragonboard está sendo atualizada de forma correta na AWS Cloud: https://us-west-2.console.aws.amazon.com / iotv2 / hom…

Recomendado: