Table des matières:

Démarrer une maison intelligente - Projeto Final : 6 étapes
Démarrer une maison intelligente - Projeto Final : 6 étapes

Vidéo: Démarrer une maison intelligente - Projeto Final : 6 étapes

Vidéo: Démarrer une maison intelligente - Projeto Final : 6 étapes
Vidéo: 🚀 AMAZON 2.0 - ИНТЕРНЕТ МАГАЗИН с нуля за 6 часов [Next / React / Nest / PostgreSQL / Prisma / TS] 2024, Novembre
Anonim
Démarrer une maison intelligente - Projeto Final
Démarrer une maison intelligente - Projeto Final

Projet 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 consist de sensores e atuadores conectados na DrangonBoard + Linker Mezzanine, um aplicativo desenvolvido com o ionic (a ser inclue as breve) informações/dados das "coisas" Serão salvados na cloud da AWS. Para uma primeira iteração com a DragonBoard e IoT como um todo, decidiu-se fazer um sistema de acndimento automático de luzes, com um sensor de luminosidade, uma chave liga/desliga para ativar um aparelho de ar-condicionado 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.

Étape 1: Matières nécessaires

Matériaux nécessaires
Matériaux nécessaires
Matériaux nécessaires
Matériaux nécessaires
  1. Placez DragonBoard.
  2. 96Boards Linker Mezzanine
  3. Sensor de luminozidade (LDR) qui accompagne un Linker Mezzanine.
  4. Capteur de température qui accompagne un 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, que representará a illuminação a ser ativada.
  8. Instalação das bibliotecas citadas no passo 5.

Étape 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. Mezzanine de liaison:

Será necessário conectar a placa Mezzanine na dragonboard. Pour plus de détails, consulter le lien

2. Capteur de luminosidade (LDR)

O sensor fait partie du Kit da Linker Mezzanine et deverá ser connecté à l'entrée ADC1. Détails techniques:

3. Capteur de température

O capteur fait partie du Kit de Linker Mezzanine et deverá ser connecté à l'entrée ADC2. Détails techniques:

4. Botão Touch

O sensor é parte do Kit da Linker Mezzanine et deverá ser conectado na entrad D1. Este botão irá ligar/desligar o sistema como um todo. O acesso a este botão é somente local. Pour les détails techniques: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 sistema de A/C. Para detalhes técnicos:

6. DEL

O LED et parte do kit da Linker Mezzanine et deverá ser conectado na entrada D4. O LED representará o sistema de illuminação de uma casa, seja algum cômodo interno da casa ou externo, como a iluminação de um jardim. Foi adicionado um résistance 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. Détails techniques:

7. Capteur de contact magnétique

Ce capteur peut être compris dans une partie et dans une partie du 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 sensor é um conjunto formado por 2 pequenas peças (ver foto do Step acima), o sensor proprimamente dito e um pequeno "imã", que ao aproximar-se do sensor irá alterar o estado 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ã estiver próximo do sensor, o estado reportado será fechado.

Étape 3: Aplicativo Para Controle Remoto

Aplicativo Para Controle Remoto
Aplicativo Para Controle Remoto

O aplicativo foi desenvolvido com o Ionic Framework, https://ionicframework.com/. Será necessário fazer o download e a 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 illuminaçã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 temperature da casa estiver maior do qu'a temperatura de acionamento, o A/C será ligado e permanecerá ligado até a temperature abaixar em 2 graus da tempreatura definida. Par exemple, iremos considerar que a temperatura é de 23 graus. Quando a temperatura interior chegar a 24 graus, o A/C será ligado e permanecerá ligado até a temperature chegar a 20 graus, desligando então. Depois o ciclo se repetirá.

- Garagem informará a posição da garagem atual, 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 contestos os códigos para comunicação com a cloud AWS e atualização do app.

Étape 4: Criando Uma "coisa" Na AWS IoT

Criando Uma
Criando Uma

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

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

2) Cliquez sur "créer une chose" e então, "Créer une seule chose". Dê o nome do projeto e clique em Next.

3) Na tela seguinte, clique em "Créer une chose sans certificat". Tutoriel Nesse não iremos utilizar os certificados por questões práticas, porém não é recomendado fazer o uso of IoT sem certificados.

4) Nesse momento, sua "coisa" já estará criada. Cliquez sur aucun botão da "coisa" que foi criado para ouvrir un tela com comme opções. Nessa tela podemos ver os topicosMQTT que podem ser usados para fazer a atualização dos dados a serem enviados para a could, assim como é uma ótima ferramenta para dépannage. No código em Python que será apresentado em breve, foram utlizados alguns destes topicos. Nas opções também Podemos ver a "shadow", qu'il n'y a plus qu'une information qui est un reflet de dragonboard dans AWS Cloud.

Étape 5: Programmer en Python

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

importer spidevimport time importer la journalisation importer json importer argparse

depuis libsoc importer gpio

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

Segue abaixo código completo do programa:

importer spidevimport time importer la journalisation importer json importer argparse

depuis libsoc importer gpio

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

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

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

broches = ((GPIO_CS, 'out'), (BOUTON, 'in'), (RELE, 'out'), (LED, 'out'),)

def setdevices (deltaMessagePython):

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

##### CA

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

si Rele_Status == 0:

gpio.digital_write(RELE, GPIO. LOW)

##### Système d'éclairage

si Led_Status == 1: gpio.digital_write(LED, GPIO. HIGH) si 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 - Température 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') temperature = "{:.2f}".format(adc_temp) payload_temp = '{"state":{"desired": {"Luminosidade": ' + adcoutldr + ', "Temperatura": ' + temperature + '}}}' myMQTTClient.publish ("$aws/things/DBpyAWS1116/shadow/update", payload_temp, 0) renvoie r

def desliga():

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

def run(gpio):

état_système = 1

tant que vrai:

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

# Rappel Shadow personnalisé

def customShadowCallback_Delta(self, payload, responseStatus, token): print("Reçu un message delta:") ### script de mise à jour de la charge utile payloadDict = json.loads(payload) deltaMessage = json.dumps(payloadDict["state"]) print "DELTA MESSAGE %s" %deltaMessage ### Demande de mise à jour de l'état signalé 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

####### Définition de la chose

# Connexion basée sur un certificat AWS IoT

myMQTTClient = AWSIoTMQTTClient("DBpyAWS1116") myMQTTClient.configureEndpoint("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentials("/home/linaro/shared/AWS/root"-root, "/home/linaro/shared/AWS/"SUA CHAVE"-private.pem.key", "/home/linaro/shared/AWS/"SEU CERTIFICADO"-certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing(- 1) # File d'attente de publication hors ligne infinie myMQTTClient.configureDrainingFrequency(2) # Drainage: 2 Hz myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec myMQTTClient.configureMQTTOperationTimeout(5) # 5 sec #connect et publie myMQTTClient.connect() myMQTTClient.publish(coisajsb", "connecté", 0)

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

####### Définition de l'ombre

# Init AWSIoTMQTTShadowClient

myAWSIoTMQTTShadowClient = Aucun myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient("DBpyAWS1116") myAWSIoTMQTTShadowClient.configureEndpoint("SEU END-POINT.us-west-2.amazonaws.com", 8883) myAWSIoTMQ/TTShadowClient/AWSIoTMQ/ShadowHomedAWdential. 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

# Se connecter à AWS IoT

myAWSIoTMQTTShadowClient.connect()

# Créer un deviceShadow avec abonnement persistant

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

# Écoutez sur les deltas

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

avec GPIO (broches) en tant que gpio: run(gpio)

Étape 6: Finalisation

Finalisation
Finalisation

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

Pour résoudre les problèmes possibles, il est recommandé d'utiliser une fonction MQTT Client TEST avec AWS, et peut être vérifiée comme mensagens enviadas pela dragonboard est envoyée automatiquement de la forme correta à AWS Cloud:

Conseillé: