Índice:
- Etapa 1: Materias Necessários
- Etapa 2: Sensores, Atuadores E Conexões
- Etapa 3: Aplicativo Para Controle Remoto
- Etapa 4: Criando Uma "coisa" Na AWS IoT
- Etapa 5: Programa Em Python
- Etapa 6: Finalização
Vídeo: Iniciando uma Smart Home - Projeto Final: 6 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:38
Projeto apresentado é parte do projeto final do curso de IoT aplicada a Smart Home
O projeto projetado a seguir e 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 iônico (a ser incluido em breve) e as informações / dados das "coisas" serão salvadas na nuvem da AWS. Para uma primeira iteração com o DragonBoard e IoT como um todo, 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-condicionado de acordo com uma temperatura pré -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.
Etapa 1: Materias Necessários
- Coloque DragonBoard.
- 96Boards Linker Mezzanine
- Sensor de luminozidade (LDR) que acompanha um Linker Mezanino.
- Sensor de temperatura que acompanha um Linker Mezanino.
- Botão touch que acompanha a Linker Mezanino.
- Relacionado com um Linker Mezzanine, utlizado para ligar ou sistema de A / C.
- LED acompanhado a Linker Mezanino, que representa a iluminação a ser ativada.
- Instalação das bibliotecas citadas no passo 5.
Etapa 2: Sensores, Atuadores E Conexões
1. Mezanino do Linker:
Será necessário conectar a placa Mezzanine no dragonboard. Para detalhes, consultar link
2. Sensor de luminosidade (LDR)
O sensor é parte do Kit do Linker Mezanino e deve ser conectado à entrada ADC1. Para detalhes técnicos:
3. Sensor de Temperatura
O sensor é parte do Kit do Linker Mezanino e deve ser conectado à entrada ADC2. Para detalhes técnicos:
4. Botão Touch
O sensor é parte do Kit do Linker Mezanino e deve ser conectado à entrada D1. Este botão irá ligar / desligar o sistema como um todo. O acesso a este botão é somente local. Para detalhes técnicos: https://linksprite.com/wiki/index.php5? Title = Touch_…
5. Relé
O relé é parte do Kit do Linker Mezanino e deve ser conectado na entrada D2. Ele será utiizado para ligar / desligar o sistema de A / C. Para detalhes técnicos:
6. LED
O LED é parte do kit do Linker Mezanino e deve estar conectado à entrada D4. O LED representa o sistema 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 resistor 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. Para detalhes técnicos:
7. Sensor de contato magnético
Este sensor foi comprado a parte e não faz parte do Kit da Linker Mezanino. Ele será usado em uma janela ou no portão de garagem para informar se a janela / garagem está aberta ou fechada. O sensor é um conjunto formado por 2 pequenas peças (ver foto do Passo 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á o estado aberto. Quando o imã estiver próximo do sensor, o estado reportado será fechado.
Etapa 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 última versão.
O aplicativo irá se comunicar (ler e atualizar os dados) com uma nuvem da AWS (AWS IoT- https://aws.amazon.com/iot/), que posteriormente será acessado pela placa dragonboard para atualização dos status dos sensores e atuadores.
- Sistema de Iluminação mostra o estado do sitema de iluminação, ligado ou ligado. Quando o nível de luminosidade baixar do valor configurado, as luzes se acenderão automaticamente. Quando a intensidade de luz aumentar 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 temperatura da casa estiver maior do que a temperatura de acionamento, o A / C será ligado e permanecerá ligado até a temperatura abaixar em 2 graus da tempreatura definida. Por exemplo, consideraremos que a temperatura é de 23 graus. Quando uma temperatura interior chegar a 24 graus, o A / C será ligado e permanecerá ligado até a temperatura chegar a 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.
Segue em anexo os arquivos home.html e home.ts contendo os códigos para comunicação com a nuvem AWS e atualização do app.
Etapa 4: Criando Uma "coisa" Na AWS IoT
Para fazer o setup do IoT na AWS, os seguintes passos devem ser seguidos:
1) Criar um projeto no AWS IoT atravé do link:
2) Clique em "criar uma coisa" e então, "Criar uma coisa". Dê o nome do projeto e clique em Avançar.
3) Na tela a seguir, clique em "Criar uma coisa sem certificado". Esse tutorial não irá 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 uma tela com as opções. Nessa tela podemos ver os semelhantesMQTT que podem ser usados para fazer a atualização dos dados e serem enviados para a Could, assim como é uma ótima ferramenta para a solução de problemas. Nenhum código em Python que será apresentado em breve, foram utlizados alguns destes tópicos. Nas opções também podemos ver uma "sombra", que nada mais é que uma informação que está no dragonboard refletida na nuvem AWS.
Etapa 5: Programa Em Python
As seguintes bibliotecas serão necessárias para a execução do programa:
import spidevimport time import logging import json import argparse
de libsoc import gpio
from time import sleep from datetime import date, datetime from gpio_96boards import GPIO from AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTClient from AWSIoTPythonSDK. MQTTLib
Segue abaixo código completo do programa:
import spidevimport time import logging import json import argparse
de libsoc import gpio
from time import 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')
pinos = ((GPIO_CS, 'fora'), (BOTÃO, 'dentro'), (RELE, 'fora'), (LED, 'fora'),)
def setdevices (deltaMessagePython):
System_Status = deltaMessagePython ['SystemStatus'] Rele_Status = deltaMessagePython ['AC'] Led_Status = deltaMessagePython ['SisIlumi']
##### AC
se Rele_Status == 1: gpio.digital_write (RELE, GPIO. HIGH)
se Rele_Status == 0:
gpio.digital_write (RELE, GPIO. LOW)
##### Sistema de Iluminacao
se Led_Status == 1: gpio.digital_write (LED, GPIO. HIGH) se 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 - Luminosidade 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') temperatura = "{:.2f} ". Format (adc_temp) payload_temp = '{" state ": {" desejado ": {" 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):
system_status = 1
enquanto verdadeiro:
time.sleep (2) button_value = gpio.digital_read (BUTTON) print ("----") time.sleep (0,25) se button_value == 1: se system_status == 0: system_status = 1 else: system_status = 0 desliga () se system_status == 1: value = readadc (gpio) print "SYSTEM_STATUS% d"% system_status time.sleep (3)
classe shadowCallbackContainer:
def _init _ (self, deviceShadowInstance): self.deviceShadowInstance = deviceShadowInstance
# Retorno de chamada de sombra personalizado
def customShadowCallback_Delta (self, payload, responseStatus, token): print ("Recebeu uma mensagem delta:") ### script de atualização de carga útil payloadDict = json.loads (carga útil) deltaMessage = json.dumps (payloadDict ["state"]) imprimir "DELTA MESSAGE% s"% deltaMessage ### Solicitação para atualizar o estado relatado newPayload = '{"state": {"relatado":' + 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ção da coisa
# Conexão baseada em certificado AWS IoT
myMQTTClient = AWSIoTMQTTClient ("DBpyAWS1116") myMQTTClient.configureEndpoint ("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ home / linaro / shared-root / CAWSt, "/ home / linaro / shared / AWS /" SUA CHAVE "-private.pem.key", "/ home / linaro / shared / AWS /" SEU CERTIFICADO "-certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (- 1) # Fila de publicação offline infinita myMQTTClient.configureDrainingFrequency (2) # Drenando: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 seg myMQTTClient.configureMQTTOperationTimeout (5) # 5 sec #ConnectDisconnectTimeout (10) # 10 sec myMQTTClient.configureMQTTOperationTimeout (5) # 5 secish #Connect (MyQconnectTimeout) coisajsb "," conectado ", 0)
########################
####### Definição de sombra
# Init AWSIoTMQTTShadowClient
myAWSIoTMQTTShadowClient = Nenhum myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient ("DBpyAWS1116") myAWSIoTMQTTShadowClient.configureEndpoint ("SEU END-POINT.us-west-west-2.amazonaCredo.com" / linTamazonacrede / root883d / htmlcompartilhado / linTamazonaTsHomeTw888 / htmlcompartilhado / w8888homeTravels / lnomeTaSi / td / homeTamazonacomp "/ linTaSiTravels / lnn / hq88d / hq885 / htmlcompartilhado / w8888HomeTraiT compartilhada / root / td / hd / ht / ht / htmlcompartilhado / 8H888HomeTotals / root / td / ht / hd / hd / htmlcompartilhado. CA.crt "," / home / linaro / shared / AWS / "SUA CHAVE" -private.pem.key "," / home / linaro / shared / AWS / "SEU CERTIFICADO-certificate.pem.crt")
# AWSIoTMQTTShadowClientconfiguraçãomyAWSIoTMQTTShadowClient.configureAutoReconnectBackoffTime (1, 32, 20) myAWSIoTMQTTShadowClient.configureConnectDisconnectTimeout (10) # 10 sec myAWSIoTMQTTShadowTimeout (10) # 10 sec myAWSIoTMQTTShadowTime (5)
# Conecte-se ao AWS IoT
myAWSIoTMQTTShadowClient.connect ()
# Crie um deviceShadow com assinatura persistente
deviceShadowHandler = myAWSIoTMQTTShadowClient.createShadowHandlerWithName ("DBpyAWS1116", True) shadowCallbackContainer_Bot = shadowCallbackContainer (deviceShadowHandler)
# Ouça em deltas
deviceShadowHandler.shadowRegisterDeltaCallback (shadowCallbackContainer_Bot.customShadowCallback_Delta)
#########################
myMQTTClient.publish ("$ aws / things / DBpyAWS1116 / shadow / update", '{"state": {"desejado": {"SystemStatus": 1, "SisIlumi": 0, "AC": 0, "Garagem": "Fechada", "Temperatura": 25, "Luminosidade": 123}}} ', 0)
if _name_ == "_main_":
com GPIO (pinos) como gpio: run (gpio)
Etapa 6: Finalização
Após ter concluído os passos anteriores, deve-se inicializar o sistema de comando o código fornecido no passo 5 e inicializar o aplicativo através do Ionic, usando o comando Ionic service.
Para um possível solucionar problemas, recomenda-se usar uma função MQTT Client TEST do AWS, onde é possível verificar e verificar as mensagens sentidas pela dragonboard está sendo atualizada de forma correta na nuvem AWS: https://us-west-2.console.aws.amazon.com / iotv2 / hom…
Recomendado:
Uma maneira de usar uma unidade de medição inercial?: 6 etapas
Uma Maneira de Usar uma Unidade de Medição Inercial?: O contexto: Estou construindo para me divertir um robô que quero mover autonomamente dentro de uma casa. É um trabalho longo e estou fazendo passo a passo. Já publiquei 2 instructables sobre esse assunto: um sobre como fazer um codificador de roda e outro sobre
VBScript Basics - Iniciando seus scripts, atrasos e mais !: 5 etapas
VBScript Basics - Iniciando seus Scripts, Delays e Mais !: Bem-vindo ao meu primeiro tutorial sobre como fazer VBScripts com o bloco de notas. Com os arquivos.vbs, você pode criar algumas pegadinhas engraçadas ou vírus mortais. Neste tutorial, vou mostrar comandos básicos como iniciar seu script, abrir arquivos e muito mais. Em t
Uma máquina assustadora de Halloween usando um PIR, uma abóbora impressa em 3D e o Troll Arduino compatível com Audio Pranker / prancha de piadas prática: 5 etapas
Uma máquina assustadora de Halloween usando um PIR, uma abóbora impressa em 3D e o Pranker de áudio compatível com Troll Arduino / placa de brincadeiras prática: A placa Troll criada por Patrick Thomas Mitchell da EngineeringShock Electronics, e foi totalmente financiada no Kickstarter não muito tempo atrás. Recebi minha recompensa algumas semanas antes para ajudar a escrever alguns exemplos de uso e construir uma biblioteca Arduino em uma tentativa
Headless Pi - Iniciando seu Raspberry Pi sem nenhum hardware adicional: 4 etapas (com imagens)
Headless Pi - Iniciando seu Raspberry Pi sem nenhum hardware adicional: Olá, O motivo pelo qual você pousou aqui é, eu acho, que você é muito parecido comigo! Você não quer pegar leve com seu Pi - conecte o Pi a um monitor, conecte um teclado e um mouse e pronto! &Hellip; Pfft, quem faz isso ?! Afinal, um Pi é um &
Iniciando a programação com um fluxograma: 7 etapas
Iniciando a programação com um fluxograma: Começando a usar micro controladores PIC para seus projetos? eles são muito úteis, mas muito frustrantes quando o programa simplesmente não funciona. Esta é uma maneira de organizar suas ideias desenhando um fluxograma. É assim que os programadores profissionais costumam