Sadržaj:

Pokretanje pametne kuće - Projeto Konačno: 6 koraka
Pokretanje pametne kuće - Projeto Konačno: 6 koraka

Video: Pokretanje pametne kuće - Projeto Konačno: 6 koraka

Video: Pokretanje pametne kuće - Projeto Konačno: 6 koraka
Video: Ретроградная Венера 23 июля - 4 сентября 2023 2024, Studeni
Anonim
Pokretanje pametne kuće - Projeto Final
Pokretanje pametne kuće - Projeto Final

Projekt je predstavljen par dijelom do projekta koji je konačan do IoT aplikacije Smart Home

O projektu 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 informacije/dados das "coisas" serão salvados na oblaku u AWS -u. Para umaira primera iteração com a DragonBoard e IoT como um todo, decidiu-se fazer um system 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 temperatura temperature 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.

Korak 1: Materias Necessários

Materijali neophodni
Materijali neophodni
Materijali neophodni
Materijali neophodni
  1. Postavite DragonBoard.
  2. 96Boards Linker Mezzanine
  3. Sensor de luminozidade (LDR) que acompanha a Linker Mezzanine.
  4. Senzor za temperaturu uključuje Linker Mezanin.
  5. Botão touch que acompanha a Linker Mezzanine.
  6. Relé acompanha a Linker Mezzanine, utlizado para ligar or system of A/C.
  7. LED acompanha i Linker Mezzanine, que predstavljaju a iluminação a ser ativada.
  8. Instalação das bibliotecas citadas no passo 5.

Korak 2: Senzori, 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. Međuspratni poveznik:

Será neophodário conectar a placa Mezzanine na dragonboard. Za više detalja, konzultantska veza

2. Senzor luminosidade (LDR)

O senzor é parte do Kit da Linker Mezzanine e deverá ser conectado na entrada ADC1. Za detaljnije informacije:

3. Senzor temperature

O senzor é parte do Kit da Linker Mezzanine e deverá ser conectado na entrada ADC2. Za detaljne informacije:

4. Botão dodir

O senzor é parte do Kit da Linker Mezzanine e deverá ser conectado na entrada D1. Este botão irá ligar/desligar o sistemu como um todo. O acesso a este botão é somente local. Za detaljnije informacije: 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 sistemu A/C. Para detalhes técnicos:

6. LED

O LED é parte do kit da Linker Mezzanine e deverá ser conectado na entrada D4. O LED predstavnik o sistemu 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 otpornik 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. Za detaljne informacije:

7. Senzor de contato magnético

Este sensor fori 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 senzoru é um konjunto formirati 2 pequenas peças (ver foto do Step acima), o senzor proprimamente dito e um pequeno "imã", que ao aproximar-se do sensor irá alterar o estado do sensor. O senzor utlizado neste projeto foi um N/A (normalmente aberto). Quando o imã não está próximo do sensor, o senzor reportará estado aberto. Quando o imã estiver próximo do sensor, o estado reportado será fechado.

Korak 3: Aplicativo Para Controle Remoto

Aplikacija Para Controle Remoto
Aplikacija Para Controle Remoto

O aplicativo foi desenvolvido com o Ionic Framework, https://ionicframework.com/. Será neophodário fazer ili preuzmite e instalação da ultima versão.

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 o estado 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 intenzidade 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 sistemu de A/C da casa. Também é possível definir o valor smanjuje temperaturu. Odredite temperaturu koja se može povećati, pa čak i ako temperatura ne prijeđe na aktivacijsku temperaturu, o A/C servo ligado i trajno ligado pri temperaturi abaixar em 2 stupnja prema određenoj tempreaturi. Na primjer, iremos mora uzeti u obzir temperaturu od 23 grasa. Ako temperatura u unutrašnjosti iznosi 24 grasa, o A/C servo ligado i trajno ligado pri temperaturi od 20 grausa, 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 u unutrašnjosti kuće.

- 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.

Korak 4: Criando Uma "coisa" na AWS IoT

Criando Uma
Criando Uma

Za postavljanje ili postavljanje IoT -a na AWS -u, osigurate passos deverão ser seguidos:

1) Molimo vas da projicirate AWS IoT atravé do link:

2) Klikni "stvori stvar" e então, "Izradi jednu stvar". Dê o nome do projeto e clique em Next.

3) Na tela seguinte, clique em "Napravi stvar bez certifikata". Nesse tutorial não iremos 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 a tela com as opções. Nessa tela podemos ver os tópicosMQTT que podem ser usados para fazer a atualização dos dados a serem enviados para a Could, assim como é uma ótima ferramenta para za rješavanje problema. No código em Python que será apresentado em breve, foram utlizados alguns destes tópicos. Nas opções também podemos ver "a shadow", que nada mais é que a informação que está na dragonboard reflektira na AWS Cloud.

Korak 5: Programa Em Python

Kao što seguintes bibliotecas serão needárias para a execução do programa:

import spidevimport time import logging uvoz json import argparse

iz libsoc import gpio

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

Odredite abaixo código kompletno do programa:

import spidevimport vrijeme import logging uvoz json import argparse

iz libsoc import gpio

from time import sleep 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')

pinovi = ((GPIO_CS, 'van'), (BUTTON, 'in'), (RELE, 'out'), (LED, 'out'),)

def setdevices (deltaMessagePython):

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

##### AC

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

ako je Rele_Status == 0:

gpio.digital_write (RELE, GPIO. LOW)

##### Sistema de Iluminacao

ako je Led_Status == 1: gpio.digital_write (LED, GPIO. HIGH) ako je 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 - Svjetlost gpio.digital_write (GPIO_CS, GPIO. HIGH) adcoutldr = (r [1] << 8) & 0b1100000000 adcoutldr = adcoutldr | (r [2] & 0xff) adcoutldr = str (adcoutldr) sada = datetime.utcnow () now_str = now.strftime ('%Y-%m-%dT%H:%M:%SZ') temperatura = "{:.2f} ". Format (adc_temp) payload_temp = '{" stanje ": {" željeno ": {" 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):

sustav_status = 1

dok je istina:

time.sleep (2) button_value = gpio.digital_read (BUTTON) ispis ("----") 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)

klasa shadowCallbackContainer:

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

# Prilagođeni povratni poziv u sjeni

def customShadowCallback_Delta (self, payload, responseStatus, token): print ("Primljena delta poruka:") ### Skripta za ažuriranje korisnog tereta payloadDict = json.loads (korisni teret) deltaMessage = json.dumps (payloadDict ["stanje"]) ispis "DELTA MESSAGE %s" %deltaMessage ### Zahtjev za ažuriranje prijavljenog stanja newPayload = '{"stanje": {"prijavljeno":' + 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

####### Definicija stvari

# Veza temeljena na AWS IoT certifikatu

myMQTTClient = AWSIoTMQTTClient ("DBpyAWS1116") myMQTTClient.configureEndpoint ("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentiS ("/home/, "/home/linaro/shared/AWS/" SUA CHAVE "-private.pem.key", "/home/linaro/shared/AWS/" SEU CERTIFICADO "-certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (- 1) # Beskonačno offline Objavljivanje u redu čekanja myMQTTClient.configureDrainingFrequency (2) # Ispuštanje: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 sec myMQTTClient.configureMQTTOperationTimeout coisajsb "," povezano ", 0)

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

####### Definicija sjene

# Init AWSIoTMQTTShadowClient

myAWSIoTMQTTShadowClient = Nitko myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient ("DBpyAWS1116") myAWSIoTMQTTShadowClient.configureEndpoint ("Seu END-POINT.us-west-2.amazonaws.com", 8883) myAWSIoTMQTTShadowClient.configureCredentials ("/ home / linaro / zajednička / AWS / Korijen- CA.crt ","/home/linaro/shared/AWS/"SUA CHAVE" -private.pem.key ","/home/linaro/shared/AWS/"SEU CERTIFICADO-certificate.pem.crt")

# AWSIoTMQTTSKonfiguracija ShadowClientmyAWSIoTMQTTShadowClient.configureAutoReconnectBackoffTime (1, 32, 20) myAWSIoTMQTTShadowClient.configureConnectDisconnectTimeout (10) #IQTonMokiTiTekVid

# Povežite se s AWS IoT -om

myAWSIoTMQTTShadowClient.connect ()

# Izradite sjenu uređaja s trajnom pretplatom

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

# Slušajte na deltama

deviceShadowHandler.shadowRegisterDeltaCallback (shadowCallbackContainer_Bot.customShadowCallback_Delta)

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

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

ako je _name_ == "_glavni_":

s GPIO (pinovi) kao gpio: run (gpio)

Korak 6: Finalização

Finalização
Finalização

Após ter continuido os passos anteriores, deve-se inicializar o sistemu executando o código fornecido no passo 5 e inicializar o app através do Ionic, usando o comando Ionic serve.

Za rješavanje problema, preporučujemo korištenje funkcionalnog TESTA MQTT klijenta do AWS-a, ako je potrebno provjeriti da li je potrebno poslati obavijest o dragonboard-u ili poslati ispravku u AWS Cloud:

Preporučeni: