Sommario:

Avviare una casa intelligente - Finale del progetto: 6 passaggi
Avviare una casa intelligente - Finale del progetto: 6 passaggi

Video: Avviare una casa intelligente - Finale del progetto: 6 passaggi

Video: Avviare una casa intelligente - Finale del progetto: 6 passaggi
Video: COSTRUISCO UNA STANZA SEGRETA IN PUBBLICO 2024, Dicembre
Anonim
Avviare una casa intelligente - Finale del progetto
Avviare una casa intelligente - Finale del progetto

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 da "coisas" serão salvados na cloud da AWS. Per prima cosa iteração com a DragonBoard e IoT come fare, decidere 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 con una temperatura pre -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.

Fase 1: Materias Necessários

Materia necessaria
Materia necessaria
Materia necessaria
Materia necessaria
  1. Posiziona DragonBoard.
  2. 96Boards Linker Mezzanine
  3. Sensor de luminozidade (LDR) que acompanha a Linker Mezzanine.
  4. Sensore di 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, che rappresenta un'iluminação a ser ativada.
  8. Instalação das bibliotecas citadas no passo 5.

Passaggio 2: Sensori, Attuatori e Connessioni

Sensori, Attuatori e Connessioni
Sensori, Attuatori e Connessioni
Sensori, Attuatori e Connessioni
Sensori, Attuatori e Connessioni

1. Soppalco linker:

Se necessario collegare un piano Mezzanine na dragonboard. Per i dettagli, link consultivo

2. Sensore di luminosità (LDR)

Il sensore è parte del Kit da Linker Mezzanine e deve essere collegato all'ingresso ADC1. Per maggiori dettagli tecnici:

3. Sensore di temperatura

Il sensore è parte del Kit da Linker Mezzanine e deve essere collegato all'ingresso ADC2. Per maggiori dettagli tecnici:

4. Botão Touch

Il sensore è parte del Kit da Linker Mezzanine e deve essere collegato all'ingresso D1. Este botão irá ligar/desligar o sistema como um todo. O acesso a este botão é somente locale. Per dettagli tecnici:https://linksprite.com/wiki/index.php5?title=Touch_…

5. Relé

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

6. LED

Il LED è parte del kit da Linker Mezzanine e deve essere collegato all'ingresso D4. O LED rappresenta o sistema di illuminazione di una casa, seja algum come interno di casa o esterno, come un'illuminazione di un giardino. Per aggiungere un resistore da 10k ohm in sério com o já esistente per diminuire una corrente utilizzata per il sistema, já que em experiências anteriori verificou-se conflitos com as portas analógicas. Per maggiori dettagli tecnici:

7. Sensore di contatto magnetico

Questo sensore se comprado a parte e não faz parte do 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 il sensore è formato da 2 pequenas peças (ver foto do Step acima), o sensor propriamente dito e um pequeno "imã", que ao aproximar-se do sensor irá alterar o stado 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ã estater próximo do sensor, o estado reportado será fechado.

Passaggio 3: Aplicativo Para Controle Remoto

Aplicativo Para Controle Remoto
Aplicativo Para Controle Remoto

O aplicativo foi desenvolvido com o Ionic Framework, https://ionicframework.com/. Se necessario fazer o scarica e installa l'ultima versione.

O aplicativo 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 sensors e attuadores.

- Sistema de Iluminação mostra o stado do sitesma de iluminação, ligado ou desligado. Quando o nível de luminosidade baixar do valor configurado, as luzes se acenderão automaticamente. 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 sistema de A/C da casa. Também é possível definir o valor desejado da temperatura. Assim que a temperatura da casa estivar 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. Per esempio, iremos considerar que a temperature é de 23 graus. Quando a 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 si contendono i codici per la comunicazione con un cloud AWS e l'aggiornamento dell'app.

Passaggio 4: Criando Uma "coisa" Na AWS IoT

Criando Uma
Criando Uma

Per fazer o setup do IoT na AWS, i passaggi successivi devono essere seguiti:

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

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

3) Na tela seguinte, clique em "Crea una cosa senza certificato". Nesse tutorial não iremos utilizar os certificates por questões práticas, porém não é raccomandato fazer o use de IoT sem certificados.

4) Nesse momento, sua "coisa" já estará criada. Clique no botão da "coisa" que foi criado para abrir a tela com as opções. Nessa tela podemos ver os tópicosMQTT que podem ser usados per fazer atualização dos dos a serem enviados per a Could, assim como é uma ótima ferramenta per troubleshooting. No código em Python que será apresentado em breve, foram utlizados alguns destes tópicos. Non ci sono molte opzioni su "shadow", che non sono mai state fornite da un'informazione su Dragonboard riflessa su AWS Cloud.

Passaggio 5: programma Em Python

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

import spidevimport time import logging import json import argparse

da libsoc import gpio

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

Segue abaixo codice completo del programma:

import spidevimport time import logging import json import argparse

da libsoc import gpio

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

GPIO_CS = GPIO.gpio_id('GPIO_CS') #Porta analogica

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

pin = ((GPIO_CS, 'fuori'), (PULSANTE, 'in'), (RELE, 'fuori'), (LED, 'fuori'),)

def setdevices(deltaMessagePython):

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

##### AC

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

se Rele_Status == 0:

gpio.digital_write(RELE, GPIO. LOW)

##### Sistema di illuminazione

if Led_Status == 1: gpio.digital_write(LED, GPIO. HIGH) if 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 - Luminosità 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":{"desired": {"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):

stato_sistema = 1

mentre vero:

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 () if system_status == 1: value = readadc(gpio) print "SYSTEM_STATUS %d" %system_status time.sleep(3)

classe shadowCallbackContainer:

def _init_(self, deviceShadowInstance): self.deviceShadowInstance = deviceShadowInstance

# Richiamata Shadow personalizzata

def customShadowCallback_Delta(self, payload, responseStatus, token): print("Ricevuto un messaggio delta:") ### script di aggiornamento del payload payloadDict = json.loads(payload) deltaMessage = json.dumps(payloadDict["state"]) print "DELTA MESSAGE %s" %deltaMessage ### Richiesta di aggiornamento dello stato riportato newPayload = '{"state":{"reported":' + 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

####### Definizione della cosa

# Connessione basata su certificato AWS IoT

myMQTTClient = AWSIoTMQTTClient("DBpyAWS1116") myMQTTClient.configureEndpoint("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentials("/home/linaro/shared/AWS"root, "/home/linaro/shared/AWS/"SUA CHAVE"-private.pem.key", "/home/linaro/shared/AWS/"SEU CERTIFICADO"-certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing(- 1) # Infinite offline Publish queuing myMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec myMQTTClient.configureMQTTOperationTimeout(5) # 5 sec #connect and publish myMQTTClient.connect() myMQTTClient.publish() coisajsb", "connesso", 0)

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

####### Definizione dell'ombra

# Init AWSIoTMQTTShadowClient

myAWSIoTMQTTShadowClient = Nessuno myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient("DBpyAWS1116") myAWSIoTMQTTShadowClient.configureEndpoint("SEU END-POINT.us-west-2.amazonaws.com",/888QTTroroot"red/figure/8883) myAWSIoClient 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 sec myAWSIoTMQTTShadowClient.configureMQTTOperationTimeout(5) # 5 sec

# Connettiti ad AWS IoT

myAWSIoTMQTTShadowClient.connect()

# Crea un dispositivo Shadow con abbonamento persistente

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

# Ascolta su delta

deviceShadowHandler.shadowRegisterDeltaCallback(shadowCallbackContainer_Bot.customShadowCallback_Delta)

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

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

if _name_ == "_main_":

con GPIO(pin) come gpio: run(gpio)

Passaggio 6: finalizzazione

Finalizzazione
Finalizzazione

Dopo aver concluso i passaggi precedenti, deve essere avviato il sistema di esecuzione o il codice fornito al passo 5 e avviato l'app su Ionic, utilizzando il comando Ionic serve.

Per poter risolvere i problemi, consigliare di utilizzare una funzione MQTT Client TEST su AWS, non è possibile verificare e come mensagens enviadas pela dragonboard está sendo atualizada de forma corretta na AWS Cloud:

Consigliato: