Een Smart Home starten - Projeto Final: 6 stappen
Een Smart Home starten - Projeto Final: 6 stappen
Anonim
Een Smart Home starten - Projeto Final
Een Smart Home starten - Projeto Final

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

O projeto mostrado a seguir é parte do projeto final a ser apresentado no curso de ivd aplicada a Smart Home, die bestaat uit sensoren en atuadores conectados op DrangonBoard + Linker Mezzanine, um aplicativo desenvolvido com o ionic (a e se un e breve)e as em breve informações/dados das "coisas" serão salvados na cloud da AWS. Om de eerste stappen te zetten in DragonBoard en IoT om te doen, decidiu-se fazer um sistema de acendimento automático de luzes, com um sensor de luminosidade, uma chave liga/desliga para ativar um acordedion dear-comado dear -setada e um sensor de proximidade que será instalado no portão de uma garagem, com een intenção de informar ao proprietário da casa o portão aberto ou fechado.

Stap 1: Materias Necessários

Materias Necessários
Materias Necessários
Materias Necessários
Materias Necessários
  1. Plaats DragonBoard.
  2. 96Boards Linker Mezzanine
  3. Sensor de luminozidade (LDR) voor een Linker Mezzanine.
  4. Temperatuursensor op een Linker Mezzanine.
  5. Botão touch que acompanha a Linker Mezzanine.
  6. Relé acompanha a Linker Mezzanine, utlizado para ligar of systema de A/C.
  7. LED is voorzien van een Linker Mezzanine, een representará a iluminação a ser ativada.
  8. Instalação das bibliotecas citadas no passo 5.

Stap 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. Linker-mezzanine:

Het is noodzakelijk om een tussenverdieping met een drakenbord aan te sluiten. Voor details, raadplegende link

2. Sensorverlichting (LDR)

O sensor é parte do Kit da Linker Mezzanine en deverá ser conectado to entrada ADC1. Voor details:

3. Temperatuursensor

O sensor é parte do Kit da Linker Mezzanine en deverá ser conectado to entrada ADC2. Voor details:

4. Botão Touch

O sensor é parte do Kit da Linker Mezzanine en deverá ser conectado to entrada D1. Este botão irá ligar/desligar o sistema como um todo. O acesso a este botão é somente local. Voor technische details:https://linksprite.com/wiki/index.php5?title=Touch_…

5. Relé

Er is een tweede deel van de Kit da Linker Mezzanine en de verbinding met de entrada D2. Ele será utiizado para ligar/desligar o sistema de A/C. Para detalhes técnicos:

6. LED

O LED é parte do kit da Linker Mezzanine en deverá ser conectado to entrada D4. O LED-representatie van de verlichting van de casa, de nieuwe versie van de interne casa of de externe, de verlichting van de jardim. Er zijn aanvullende weerstanden van 10k ohm die bestaan voor het verkleinen van de mogelijkheid om te worden gebruikt, voor eerdere ervaringen met het vergelijken van analoge poorten. Voor details:

7. Magnetische sensor

Este sensor voor een deel en geen deel van de Kit da Linker Mezzanine. Ele será usado em uma janela of no portão de uma garagem para informar se a janela/garagem está aberta ou fechada. O sensor e um conjunto formado por 2 pequenas peças (ver foto do Step acima), o sensor proprimamente dito e um pequeno "imã", que ao ao aproximar-se do sensor irá alterar o estado do sensor. O sensor utlizado neste projeto foi um N.v.t. (normalmente aberto). Quando o imã não está proximo do sensor, of sensor reportará estado aberto. Quando of imã estiver proximo do sensor, of estado reportado será fechado.

Stap 3: Aplicativo Para Controle Remoto

Aplicativo Para Control Remoto
Aplicativo Para Control Remoto

O aplicativo foi desenvolvido com o Ionic Framework, https://ionicframework.com/. Het is noodzakelijk om een download en een installatie voor het laatst te downloaden.

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 Iluminação mostra of estado do sitesma de iluminação, ligado of 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á of 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 maor do que a accionamento, o A/C será ligado en permanecerá ligado até a temperatura abaixar em 2 graus da temprea definida. Por exemplo, iremos considerar que a temperatura é de 23 graus. Quando a temperatura interior chegar a 24 graus, of A/C será ligado en permanecerá ligado até a temperature 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 en apenas informativa en mostra en temperatura do interior da casa.

- Luminosidade é apesas informativa en mostra of valor da luminosidade atual.

Ga samen met andere gebruikers van home.html en home.ts naar de codigos voor communicatie met een cloud-AWS en de app.

Stap 4: Criando Uma "coisa" Na AWS IoT

Criando Uma
Criando Uma

Para fazer o setup do IoT met AWS, os seguintes passos deverão ser seguidos:

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

2) Clique "creëer een ding" e então, "Creëer een enkel ding". Dê o nome do projeto e clique em Next.

3) Na tela seguinte, clique em "Creëer een ding zonder certificaat". Nesse tutorial no iremos utilizar os certificados por questões práticas, porém não écomendado fazer o useo de IoT sem certificados.

4) Nesse momento, sua "coisa" ja estará criada. Clique no botão da "coisa" que foi criado para abrir a tele com as opções. Het is mogelijk om een oplossing te vinden voor het oplossen van problemen. Geen code met Python die een korte presentatie geeft, foram utlizados alguns destes tópicos. Meer informatie over de weergave van dragonboard op AWS Cloud.

Stap 5: Programmeer Em Python

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

import spidevimport tijd import logging import json import argparse

van libsoc import gpio

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

Segue abaixo codigo completo do programa:

import spidevimport tijd import logging import json import argparse

van libsoc import gpio

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

GPIO_CS = GPIO.gpio_id('GPIO_CS') #Analoge poort

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

pinnen = ((GPIO_CS, 'uit'), (KNOP, 'in'), (RELE, 'uit'), (LED, 'uit'),)

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)

als Rele_Status == 0:

gpio.digital_write(RELE, GPIO. LOW)

##### Sistema de Iluminacao

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

def leesadc(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 - Temperatuur 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 - Lichtsterkte 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 uitvoeren (gpio):

system_status = 1

terwijl waar:

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)

klasse shadowCallbackContainer:

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

# Aangepaste schaduw terugbellen

def customShadowCallback_Delta(self, payload, responseStatus, token): print("Een deltabericht ontvangen:") ### payload update script payloadDict = json.loads(payload) deltaMessage = json.dumps(payloadDict["state"]) print "DELTA MESSAGE %s" %deltaMessage ### Verzoek om de gerapporteerde status bij te werken 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

####### Ding definitie

# AWS IoT-certificaat gebaseerde verbinding

myMQTTClient = AWSIoTMQTTClient("DBpyAWS1116") myMQTTClient.configureEndpoint("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentials("/home/linaro/-shared/AWS/", "/home/linaro/shared/AWS/"SUA CHAVE"-private.pem.key", "/home/linaro/shared/AWS/"SEU CERTIFICADO"-certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing(- 1) # Oneindig offline Publiceer wachtrij myMQTTClient.configureDrainingFrequency(2) # Aftappen: 2 Hz myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec myMQTTClient.configureMQTTOperationTimeout(5) # 5 sec #connect en publiceer myMQTTClient.connect() myMQTTClient coisajsb", "verbonden", 0)

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

####### Schaduwdefinitie

# Init AWSIoTMQTTShadowClient

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

# AWSIoTMQTTShadowClient-configuratiemyAWSIoTMQTTShadowClient.configureAutoReconnectBackoffTime(1, 32, 20) myAWSIoTMQTTShadowClient.configureConnectDisconnectTimeout(10) # 10 sec myAWSIoTMQTTShadowClient.configureMQTTOperationTimeout(5) # 5 sec

# Maak verbinding met AWS IoT

myAWSIoTMQTTShadowClient.connect()

# Maak een deviceShadow met een permanent abonnement

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

# Luister op delta's

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_":

met GPIO(pinnen) als gpio: run(gpio)

Stap 6: Finaliseren

Finaliseren
Finaliseren

Een laatste afsluiting van de vorige, deve-se inicializar o sistema executando o código fornecido no passo 5 en inicializar o app através do Ionic, usando en comando Ionic serve.

Voor het oplossen van problemen, raad aan om een função MQTT Client TEST voor AWS te gebruiken, onde é possível verificar e as mensagens enviadas pela dragonboard está forma correta a AWS Cloud: