Cuprins:

Începerea unei case inteligente - Proiect final: 6 pași
Începerea unei case inteligente - Proiect final: 6 pași

Video: Începerea unei case inteligente - Proiect final: 6 pași

Video: Începerea unei case inteligente - Proiect final: 6 pași
Video: Ep. 5. Cat A Costat Casa Pana Acum? 2023 (Fundatie - Centuri) #casacubter | Construction Costs 2023 2024, Noiembrie
Anonim
Începerea unei case inteligente - Projeto Final
Începerea unei case inteligente - Projeto Final

Proiectul prezentat este parte a proiectului final al cursului de IoT aplicat la Smart Home

O proiectare mostrado a urma este parte a proiectului final a ser prezentat nu curs de IoT aplicat la Smart Home, care constă în senzori și atuatori conectați în DrangonBoard + Linker Mezzanine, um aplicativ dezvoltat com o ionic (a inclus în scurt) e as informações / dados das "coisas" serão salvados na cloud da AWS. Para uma prima iteração com a DragonBoard e IoT as um tot, 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-condiționat de acord com uma temperatura pre -setada e um sensor de proximitate care va fi instalat no portão de uma garagem, com a intenția de informare a proprietății da casa se o portão encontra-se aberto ou fechado.

Pasul 1: Materias Necessários

Materias Necessários
Materias Necessários
Materias Necessários
Materias Necessários
  1. Plasați DragonBoard.
  2. 96Boards Linker Mezzanine
  3. Sensor de luminozitate (LDR) care acompanha a Linker Mezzanine.
  4. Sensor de temperatura care acompanha a Linker Mezzanine.
  5. Botão touch that acompanha a Linker Mezzanine.
  6. Relé acompanha a Linker Mezzanine, utlizado for ligar o systema de A / C.
  7. LED acompanha a Linker Mezzanine, that representará a iluminação a ser ativada.
  8. Instalação das bibliotecas citadas no passo 5.

Pasul 2: senzori, conectori și conexiuni

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

1. Linker Mezanin:

Será necessário conectar a placa Mezzanine na dragonboard. Pentru detalii, consultați linkul

2. Luminozitatea senzorului (LDR)

O sensor is part do Kit da Linker Mezzanine e deverá ser conectado na entrada ADC1. Pentru detalii tehnice:

3. Sensor de Temperatura

O sensor is part do Kit da Linker Mezzanine e deverá ser conectado na entrada ADC2. Pentru detalii tehnice:

4. Atingeți Botão

O sensor is parte do Kit da Linker Mezzanine e deverá ser conectado na entrada D1. Este botão irá ligar / desligar o system as um tot. O acesso a este botão este somente local. Pentru detalii tehnice: 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. El va fi utiizat pentru ligar / desligar o sistem de A / C. Para detalii tehnice:

6. LED

O LED este parte a kitului de la Linker Mezzanine și deveră este conectat la intrare D4. O LED representará o sistema de iluminação de uma casa, seja algum cômodo interno da casa ou externo, as a iluminação de um jardim. Foi adicionado um resistor de 10k ohm em sério com o já existent pentru diminuarea a curentei folosite pelo sistem, já que em experiências anteriores verificou-se conflitos com as portas analógicas. Pentru detalii tehnice:

7. Senzor de contact magnetic

Acest senzor a fost inclus în parte și nu face parte din Kit da Linker Mezzanine. El va fi folosit în uma janela ou no portão de uma garagem pentru informare se a janela / garagem está aberta ou fechada. O senzor este un format format de 2 mici părți (ver foto do Step acima), o senzor primordial și um mic "imă", care să se apropie de senzor să altereze sau să stea senzor. O senzor folosit în acest proiect a fost um / N (normal deschis). Când o imagine nu este apropiată de senzor, sau senzorul raportează starea deschisă. Când o imagine este apropiată de senzor, o stare raportată va fi dată.

Pasul 3: Aplicativ Pentru Control Remoto

Aplicativo Para Control Remoto
Aplicativo Para Control Remoto

O aplicație a fost dezvoltată cu Ionic Framework, https://ionicframework.com/. Será necessário fazer o download and a installationção da ultima versão.

O aplicație irá se comunicar (ler e atualizar os dados) com a cloud da AWS (AWS IoT- https://aws.amazon.com/iot/), care posteriormente va fi accesat pela placa dragonboard pentru atualização dos status dos sensores e atuadores.

- Sistema de Iluminação mostra o estado do sitesma de iluminação, ligado ou desligado. Când o nível de luminozitate se descarcă de valoare configurată, ca lumini se acordă automat. Când a intensitate de lumină crește al valorii definite, ca lumini se apagă.

- O botão A / C acionará o relé, care por sua vez acionará o sistema de A / C da casa. Também é possível definir o valor desejado de temperatura. Asim que a temperatura da casa estiver maior do that a temperature de acionamento, o A / C será ligado e permanecerá ligado até a temperatura abaixar em 2 graus da tempreatura definida. De exemplu, considerăm că temperatura este de 23 graus. Când o temperatură interioară ajunge la 24 graus, o A / C va fi legat și va rămâne ligat até la temperatura ajunge la 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.

Urmăriți-vă anexele arhivelor home.html și home.ts conțin codurile pentru comunicație cu un cloud AWS și actualizarea aplicației.

Pasul 4: Criando Uma "coisa" Na AWS IoT

Criando Uma
Criando Uma

Pentru fazer o setup do IoT na AWS, următoarele pasuri deveră sunt urmate:

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

2) Faceți clic pe „creați un lucru” e então, „Creați un singur lucru”. Dê o nome do projeto e clique em Next.

3) În continuare, faceți clic pe "Creați un lucru fără certificat". Nesse tutorial não iremos use os certificados por questões práticas, porém não é recomandado fazer or use of IoT sem certificados.

4) Nesse moment, sua "coisa" já estará criada. Clique no botão da "coisa" that foi criado para abrir a tela com as opções. Nessa tela putem ver os tópicosMQTT that we can ser usados for fazer a atualização dos dados to serem enviados for a Could, asim as é uma ótima toola for troubleshooting. Niciun cod în Python care va fi prezentat pe scurt, foram utlizat unele dintre acestea. În ceea ce privește opțiunile prea putem să vedem o „umbră”, nimic nu mai este o informație care se află în dragonboard refletită în AWS Cloud.

Pasul 5: Programa Em Python

Ca bibliotecă următoare sunt necesare pentru un program de execuție:

import spidevimport timp import logare import json import argparse

din libsoc import gpio

din timp import somn de la data de import datetime, datetime de la gpio_96boards import GPIO din AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTClient din AWSIoTPythonSDK. MQTTLib

Urmăriți codul complet al programului:

import spidevimport timp import logare import json import argparse

din libsoc import gpio

din timp import somn de la data de import datetime, datetime de la gpio_96boards import GPIO din AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTClient din AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTShadowClient

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

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

pini = ((GPIO_CS, 'out'), (BUTON, 'in'), (RELE, 'out'), (LED, 'out'),)

def setdevices (deltaMessagePython):

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

##### AC

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

dacă Rele_Status == 0:

gpio.digital_write (RELE, GPIO. LOW)

##### Sistema de Iluminacao

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

readadc def (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 - Luminozitate gpio.digital_write (GPIO_CS, GPIO. HIGH) adcoutldr = (r] << 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 ": {" dorit ": {" Luminosidade ":' + adcoutldr + '," Temperatura ":' + temperatura + '}}}' myMQTTClient.publish ("$ aws / things / DBpyAWS1116 / shadow / update", payload_temp, 0) returnează r

def desliga ():

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

def run (gpio):

system_status = 1

în timp ce este adevărat:

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)

clasă shadowCallbackContainer:

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

# Rambursare personalizată Shadow

def customShadowCallback_Delta (self, payload, responseStatus, token): print ("A primit un mesaj delta:") ### payload update script payloadDict = json.loads (payload) deltaMessage = json.dumps (payloadDict ["state"]) print "DELTA MESSAGE% s"% deltaMessage ### Cerere de actualizare a stării raportate newPayload = '{"state": {"rapòte":' + 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ția lucrului

Conexiune bazată pe certificatul AWS IoT

myMQTTClient = AWSIoTMQTTClient ("DBpyAWS1116") myMQTTClient.configureEndpoint ("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ home / linaro /, "/ 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 (publică) coisajsb "," conectat ", 0)

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

####### Definiția umbrelor

# Init AWSIoTMQTTShadowClient

myAWSIoTMQTTShadowClient = Nici unul myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient ("DBpyAWS1116") myAWSIoTMQTTShadowClient.configureEndpoint ("SEU END-POINT.us-west-2.amazonaws.com" / 88C) 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.configureMQ

# Conectați-vă la AWS IoT

myAWSIoTMQTTShadowClient.connect ()

# Creați un deviceShadow cu abonament persistent

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

# Ascultă pe delte

deviceShadowHandler.shadowRegisterDeltaCallback (shadowCallbackContainer_Bot.customShadowCallback_Delta)

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

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

dacă _name_ == "_main_":

cu GPIO (pini) ca gpio: run (gpio)

Pasul 6: Finalização

Finalização
Finalização

Após ter concluido os passos anterior, deve-se initializar o system executando o code fornecido no step 5 e initializar o app através do Ionic, folosind o comanda Ionic serve.

Pentru o posibilă depanare, vă recomandăm să folosiți o funcție MQTT Client TEST do AWS, unde este posibil să verificați și cum să trimiteți mesaje de pe dragonboard este actualizat de forma corectă în AWS Cloud: https://us-west-2.console.aws.amazon.com / iotv2 / hom …

Recomandat: