Taula de continguts:

Començar una casa intel·ligent: Projeto Final: 6 passos
Començar una casa intel·ligent: Projeto Final: 6 passos

Vídeo: Començar una casa intel·ligent: Projeto Final: 6 passos

Vídeo: Començar una casa intel·ligent: Projeto Final: 6 passos
Vídeo: cabel0 2024, Desembre
Anonim
Començar una casa intel·ligent: Projeto Final
Començar una casa intel·ligent: Projeto Final

El projecte presentat és part del projecte final del curs d’IoT aplicat a Smart Home

O projecto mostrado a seguir é parte del projecto final a ser presentado no curso de IoT aplicada a Smart Home, que consisteix en sensors i atuadors connectats en DrangonBoard + Linker Mezzanine, amb un aplicatiu desenvolupat com o iònic (a ser inclòs en breu) e as informações / dados das "coisas" serão salvados na cloud da AWS. Para uma primera iteração com a DragonBoard e IoT com a tot, decidiu-se fazer um sistema d’acendiment automàtic de llums, com a sensor de lluminositat, uma chave liga / desliga para ativar um aparelho de ar-condicionado de acuerdo com uma temperatura pre -setada e um sensor de proximitat que serà instal·lat no portat de uma garagem, com a intenció d’informar al propietari da casa se o portó encontra-se obert o fechado.

Pas 1: Materias Necessários

Materias Necessários
Materias Necessários
Materias Necessários
Materias Necessários
  1. Col·loca 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é acompanyat a Linker Mezzanine, utilitzat per lligar o sistema d'A / C.
  7. LED acompanha a Linker Mezzanine, que representarà a il·luminació a ser activat.
  8. Instalação das bibliotecas citadas no passo 5.

Pas 2: Sensors, Atuadores i connexions

Sensors, Atuadores E Conexões
Sensors, Atuadores E Conexões
Sensors, Atuadores E Conexões
Sensors, Atuadores E Conexões

1. Enllaç Mezzanine:

Serà necessari connectar a placa Mezzanine na dragonboard. Per obtenir informació, consulteu l’enllaç

2. Sensor de lluminositat (LDR)

O sensor is part do Kit da Linker Mezzanine e deverá ser connectado na entrada ADC1. Per a detalls tècnics:

3. Sensor de Temperatura

O sensor is part do Kit da Linker Mezzanine e deverá ser connectado na entrada ADC2. Per a detalls tècnics:

4. Botão Touch

O sensor is part do Kit da Linker Mezzanine e deverá ser connectado na entrada D1. Este botão irá ligar / desligar o sistema com a tot. O acesso a este botão és somente local. Per a detalls tècnics: https://linksprite.com/wiki/index.php5? Title = Touch_ …

5. Relé

O relé é parte do Kit da Linker Mezzanine e deverá ser connectado na entrada D2. Serà usat per lligar / desligar o sistema d'A / C. Para detalls tècnics:

6. LED

O LED is part do kit da Linker Mezzanine e deverá ser connectado na entrada D4. O LED representará o sistema de iluminação de uma casa, seja algum cômodo interno da casa o externo, com a il·luminació de jardí. Foi adicionado um resistor de 10k ohm em sério com o já existent per disminuir a corrent utilitzat pelo sistema, ja que em experimenten anteriors verificats-se conflits com as portas analógicas. Per a detalls tècnics:

7. Sensor de contingut magnètic

Aquest sensor ha estat comprès a part i no fa part del Kit da Linker Mezzanine. Se usarà em uma janela ou no portão de uma garagem para informar se a janela / garagem está aberta o fechada. O sensor és un conjunt format per 2 petites peces (ver foto do Step acima), o sensor proprimitament dit i um petit "imà", que fins a aproximar-se a sensor irà alterar o estat do sensor. O sensor utilitzat en aquest projecte va ser um / N (normalment obert). Quan o ima no està proper al sensor, o el sensor reportarà l'estat obert. Quan o estic proper al sensor, o estat informat serà actualitzat.

Pas 3: Aplicatiu per al control remot

Aplicativo Para Control Remoto
Aplicativo Para Control Remoto

O aplicatiu es va desenvolupar amb Ionic Framework, https://ionicframework.com/. Será necessário fazer o download and a installationção da ultima versão.

O aplicativo irá comunicar (ler e atualizar os dados) com a cloud da AWS (AWS IoT- https://aws.amazon.com/iot/), que posteriorment serà accedit a la placa de la placa de drac per a l’actualització dels dos dos sensors i els atuadors.

- Sistema de Iluminação mostra o estat do sitesma de iluminação, ligado o desligado. Quan o nível de luminosidade baixar do valor configurado, as luzes se acenderão automaticamente. Quan la intensitat de la llum augmenta al valor definit, ja que les llums s’apagaran.

- O botão A / C acionará o relé, que por su vez vez acionará o sistema de A / C da casa. Também és possible definir o valor desejado da temperatura. Assim que a temperatura da casa estiver maior do que a temperatura de accionamento, o A / C será ligado e permanecerá ligado até a temperatura abaixar em 2 graus da tempreatura definida. Per exemple, considerem que la temperatura és de 23 graus. Quan una temperatura interior arribi a 24 graus, o A / C serà lligat i permanentment lligat a una temperatura arribar a 20 graus, desligant então. Depois o ciclo se repetirá.

- Garagem informarà a atual posição da garagem, se aberta o fechada.

- Temperatura és apenas informativa e mostra a temperatura do interior da casa.

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

Seguiu-ne l'annex com a arxius home.html i home.ts que conté els codis per a la comunicació amb cloud AWS i actualització de l'aplicació.

Pas 4: Criando Uma "coisa" Na AWS IoT

Criando Uma
Criando Uma

Per fer la configuració de l'IoT a AWS, els següents passos de seguiment seran seguits:

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

2) Feu clic a "create a thing" i então, "Create a single thing". Dê o nome do projecto e clique em Next.

3) Na tela següent, feu clic a "Crea una cosa sense certificat". Nesse tutorial no usem certificats per qüestions pràctiques, no és recomanable fer un ús de certificats IoT.

4) Nesse moment, sua "coisa" já estará criada. Clique no botão da "coisa" que foi criado per obrir una tela com opcions. Nessa tela podem ver os tópicosMQTT que podem ser usats per fer a atualitzar dos dies a serem enviats per a Could, assim com és uma òptima ferramenta per a la resolució de problemes. No hi ha cap codi en Python que serà presentat en breu, foram utilitzat alguns d'aquests tòpics. Les opcions també podem veure a "shadow", que res més que la informació que hi ha a la dragonboard refletida a AWS Cloud.

Pas 5: Programa Em Python

Les següents biblioteques seran necessàries per a l'execució del programa:

import spidevimport temps importació registre importació importació json importació argparse

des de la importació de libsoc gpio

a partir de l'hora d'importació en suspensió des de la data d'importació de la data i hora, de la data de gpio_96boards importa GPIO de AWSIoTPythonSDK. MQTTLib importació de AWSIoTMQTTClient d'AWSIoTPythonSDK. MQTTLib

Seguiu el codi complet del programa:

import spidevimport temps importació registre importació importació json importació argparse

des de libsoc import gpio

des de la hora d’importació en suspensió des de la data d’importació de la data i hora, des de la data d’importació de gpio_96boards GPIO des d’AWSIoTPythonSDK. MQTTLib importació AWSIoTMQTTClient d’AWSIoTPythonSDK. MQTTLib importació AWSIoTMQTTShadowClient

GPIO_CS = GPIO.gpio_id ('GPIO_CS') # Port analògic

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

pins = ((GPIO_CS, 'out'), (BUTTON, '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)

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] i 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 - Lluminositat 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 ": {" desitjat ": {" Lluminosidade ":' + 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)

execució def (gpio):

sistema_estat = 1

mentre que és cert:

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

# Devolució de trucada Shadow personalitzada

def customShadowCallback_Delta (self, loadload, responseStatus, token): print ("Rebut un missatge delta:") ### payload update script payloadDict = json.loads (payload) deltaMessage = json.dumps (payloadDict ["state"]) print "DELTA MESSAGE% s"% deltaMessage ### Sol·licitud per actualitzar l'estat reportat 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

####### Definició de la cosa

Connexió basada en el certificat IoS # AWS

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 queueing myMQTTClient.configureDrainingFrequency (2) # Drenatge: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 seg myMQTTClient.configureMQTTOperationTimeout (5) # 5 sec #connect (publicar myMQTTClient). coisajsb "," connectat ", 0)

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

####### Definició d'ombra

# Init AWSIoTMQTTShadowClient

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

# Connecteu-vos a AWS IoT

myAWSIoTMQTTShadowClient.connect ()

# Creeu un deviceShadow amb subscripció persistent

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

# Escolta als deltes

deviceShadowHandler.shadowRegisterDeltaCallback (shadowCallbackContainer_Bot.customShadowCallback_Delta)

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

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

si _name_ == "_principal_":

amb GPIO (pins) com a gpio: run (gpio)

Pas 6: Finalització

Finalització
Finalització

Após ter concluido os passos anteriors, s'ha de inicialitzar o executar el sistema o codi fornit no pas 5 i inicialitzar l'aplicació através do Ionic, utilitzant o comandant Ionic serve.

Per a la possibilitat de resoldre problemes, es recomana utilitzar una funció MQTT Client TEST de AWS, on es pot verificar i verificar-se com a enviaments mensuals de la pantalla de dragonboard..amazon.com / iotv2 / hom …

Recomanat: