Table des matières:
- Étape 1: Matières nécessaires
- Étape 2: Sensores, Atuadores E Conexões
- Étape 3: Aplicativo Para Controle Remoto
- Étape 4: Criando Uma "coisa" Na AWS IoT
- Étape 5: Programmer en Python
- Étape 6: Finalisation
Vidéo: Démarrer une maison intelligente - Projeto Final : 6 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
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
- Placez DragonBoard.
- 96Boards Linker Mezzanine
- Sensor de luminozidade (LDR) qui accompagne un Linker Mezzanine.
- Capteur de température qui accompagne un Linker Mezzanine.
- Botão touch que acompanha a Linker Mezzanine.
- Relé acompanha a Linker Mezzanine, utlizado para ligar o systema de A/C.
- LED acompanha a Linker Mezzanine, que representará a illuminação a ser ativada.
- Instalação das bibliotecas citadas no passo 5.
Étape 2: 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
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
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
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é:
Démarrer un programme automatiquement lors de la connexion d'un ordinateur portable à une station d'accueil : 5 étapes
Démarrer un programme automatiquement lors de la connexion d'un ordinateur portable à une station d'accueil : cette instruction explique comment exécuter un programme ou une application lorsque vous connectez votre ordinateur portable à une station d'accueil. Dans cet exemple, j'utilise Lenovo T480 Windows 10
Comment créer une maison intelligente à l'aide du module de relais de contrôle Arduino - Idées domotiques : 15 étapes (avec photos)
Comment créer une maison intelligente à l'aide du module de relais de contrôle Arduino | Idées de domotique : Dans ce projet de domotique, nous allons concevoir un module de relais domestique intelligent qui peut contrôler 5 appareils ménagers. Ce module relais peut être contrôlé à partir d'un mobile ou d'un smartphone, d'une télécommande IR ou d'une télécommande TV, interrupteur manuel. Ce relais intelligent peut également détecter le r
Comment démarrer une diffusion en direct de jeu : 9 étapes
Comment démarrer une diffusion en direct de jeu : ces instructions vont vous montrer comment configurer une diffusion à l'aide du logiciel Open Broadcaster ou d'OBS. Pour démarrer votre diffusion en direct à l'aide d'OBS, vous aurez besoin des éléments suivants et le logiciel de streaming
Démarrer une moto avec un implant de main NFC : 3 étapes
Démarrer une moto avec un implant de main NFC : Pourquoi ai-je même un implant de puce NFC dans la main ? Je travaille en tant que support informatique pour un hôtel de luxe, il y a donc beaucoup de portes que je dois ouvrir chaque jour avec une carte. C'est pourquoi j'ai décidé de mettre une puce RFID 125khz dans ma main. Malheureusement, mon choix
COMMENT FAIRE UNE LED USB INTELLIGENTE À LA MAISON : 9 étapes
COMMENT FAIRE UNE LED USB INTELLIGENTE À LA MAISON : Salut ami, cette LED intelligente que vous pouvez utiliser avec USB. c'est très utile commençons