Tabla de contenido:
- Paso 1: Materias Necessários
- Paso 2: Sensores, Atuadores E Conexões
- Paso 3: Aplicativo Para Controle Remoto
- Paso 4: Criando Uma "coisa" Na AWS IoT
- Paso 5: Programa Em Python
- Paso 6: Finalización
Video: Inicio de una casa inteligente - Proyecto final: 6 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
Projeto 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 consiste de sensores e atuadores conectados na DrangonBoard + Linker Mezzanine, um aplicativo desenvolvido com o ionic (a ser incluido em breve) e as 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 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 pre -setada e um sensor de proximidade que será instalado no portão de uma garagem, com a intenção de informar ao owner da casa se o portão encontra-se aberto ou fechado.
Paso 1: Materias Necessários
- Coloque DragonBoard.
- 96Boards Linker Mezzanine
- Sensor de luminozidade (LDR) que acompanha a Linker Mezzanine.
- Sensor de temperatura que acompanha a 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á una iluminación y un ser ativada.
- Instalação das bibliotecas citadas no passo 5.
Paso 2: Sensores, Atuadores E Conexões
1. Entresuelo del vinculador:
Será necesario conectar una placa Mezzanine na dragonboard. Para más detalles, consulte el enlace
2. Sensor de luminosidad (LDR)
O sensor é parte del Kit da Linker Mezzanine y deverá ser conectado en la entrada ADC1. Para detalles técnicos:
3. Sensor de Temperatura
O sensor é parte del Kit da Linker Mezzanine y deverá ser conectado en la entrada ADC2. Para detalles técnicos:
4. Botão Touch
O sensor é parte del Kit da Linker Mezzanine y deverá ser conectado en la entrada D1. Este botão irá ligar / desligar o sistema como um todo. O acesso a este botão é somente local. Para detalles técnicos: https://linksprite.com/wiki/index.php5? Title = Touch_…
5. Relé
O relé é parte do Kit da Linker Mezzanine y deverá ser conectado na entrada D2. Ele será utiizado para ligar / desligar o sistema de A / C. Para detalhes técnicos:
6. LED
O LED es parte del kit da Linker Mezzanine y deverá ser conectado en la entrada D4. O LED representará o sistema de iluminación de uma casa, seja algum cômodo interno da casa ou externo, como iluminación de um jardim. Foi adicionado um resistor de 10k ohm em sério com o já existente para diminuir a corrente used hair system, já que em experiências anteriores verificou-se conflitos com as portas analógicas. Para detalles técnicos:
7. Sensor de contato magnético
Este sensor para comprado una parte y otra parte de 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 pequeñas peças (ver foto del paso acima), o sensor proprimamente dito e um pequeño "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.
Paso 3: Aplicativo Para Controle Remoto
O aplicativo foi desenvolvido com o Ionic Framework, https://ionicframework.com/. Será necesario fazer o descargar e instalar una última versión.
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 iluminación mostrada o estado del sitio de iluminación, ligado o desligado. Quando o nível de luminosidade baixar do valor establecido, as luzes se acenderão automáticamente. 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 system de A / C da casa. También es posible definir el valor desejado de la temperatura. Assim que a temperatura da casa estiver maior do que a temperatura de acionamento, o A / C estará ligado y permanecerá ligado até a temperatura abaixar em 2 graus da tempreatura definida. Por ejemplo, vamos a considerar que una temperatura de 23 grados. Quando a temperatura interior chegar a 24 graus, o A / C estará 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.
- La temperatura es apenas informativa y la temperatura del interior de la casa.
- Luminosidade é apesas informativa e mostra o valor da luminosidade atual.
Segue em anexo os arquivos home.html e home.ts contendos os códigos para comunicação com a cloud AWS e atualização do app.
Paso 4: Criando Uma "coisa" Na AWS IoT
Para realizar la configuración de IoT en AWS, los siguientes pasos serán los siguientes:
1) Criar um projeto no AWS IoT atravé do link:
2) Clique "crea una cosa" e então, "Crea una sola cosa". Dê o nome do projeto e clique em Siguiente.
3) En la tela siguiente, haga clic en "Crear una cosa sin certificado". Tutorial de Nesse no iremos a utilizar certificados por consultas práticas, por lo que no es recomendable utilizar certificados de IoT sem.
4) Nesse momento, sua "coisa" já estará criada. Clique no botão da "coisa" que foi criado para abrir una tela com como opções. Nessa tela podemos ver os tópicosMQTT que podem ser usados para fazer a atualização dos dados y serem enviados para a podría, asimilar como é uma ótima ferramenta para solución de problemas. No código em Python que será apresentado em breve, foram utlizados alguns destes tópicos. También podemos ver una "sombra", pero no hay nada más que una información que esté en la placa base reflejada en la nube de AWS.
Paso 5: Programa Em Python
Como seguintes bibliotecas serão necessárias para una ejecución del programa:
importar spidevimportar tiempo importar registro importar json importar argparse
de libsoc importar gpio
desde 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 del programa:
importar spidevimportar tiempo importar registro importar json importar argparse
de libsoc importar gpio
desde 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') # Puerto analógico
BOTÓN = GPIO.gpio_id ('GPIO_A') RELE = GPIO.gpio_id ('GPIO_C') LED = GPIO.gpio_id ('GPIO_G')
pines = ((GPIO_CS, 'fuera'), (BOTÓN, '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)
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] y 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 - Luminosidad 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 = '{" estado ": {" deseado ": {" Luminosidade ":' + adcoutldr + '," 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 ejecutar (gpio):
system_status = 1
mientras que es cierto:
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 () si system_status == 1: value = readadc (gpio) print "SYSTEM_STATUS% d"% system_status time.sleep (3)
clase shadowCallbackContainer:
def _init _ (self, deviceShadowInstance): self.deviceShadowInstance = dispositivoShadowInstance
# Devolución de llamada de sombra personalizada
def customShadowCallback_Delta (self, payload, responseStatus, token): print ("Recibí un mensaje delta:") ### script de actualización de carga útil payloadDict = json.loads (payload) deltaMessage = json.dumps (payloadDict ["estado"]) imprimir "DELTA MESSAGE% s"% deltaMessage ### Solicitud para actualizar el estado informado newPayload = '{"estado": {"informado":' + 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ón de cosa
# Conexión basada en certificados de AWS IoT
myMQTTClient = AWSIoTMQTTClient ("DBpyAWS1116") myMQTTClient.configureEndpoint ("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("shared-home / linaro /, "/ home / linaro / shared / AWS /" SUA CHAVE "-private.pem.key", "/ home / linaro / shared / AWS /" SEU CERTIFICADO "-certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (- 1) # Cola de publicación sin conexión infinita myMQTTClient.configureDrainingFrequency (2) # Drenaje: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 sec myMQTTClient.configureMQTTOperationTimeout (5) # 5 sec #connect "y publique myMQTTClient. coisajsb "," conectado ", 0)
########################
####### Definición de sombra
# Init AWSIoTMQTTShadowClient
myAWSIoTMQTTShadowClient = Ninguno myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient ("DBpyAWS1116") myAWSIoTMQTTShadowClient.configureEndpoint ("SEU END-POINT.us-west-2.amazonaws.com", compartido de 8883) myAWSIoTMQTTShadowClient / home. 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 segundos myAWSIoTMQTTShadowMTOT.configure # 5 sec.
# Conéctese a AWS IoT
myAWSIoTMQTTShadowClient.connect ()
# Crea un deviceShadow con suscripción persistente
deviceShadowHandler = myAWSIoTMQTTShadowClient.createShadowHandlerWithName ("DBpyAWS1116", True) shadowCallbackContainer_Bot = shadowCallbackContainer (deviceShadowHandler)
# Escucha en deltas
deviceShadowHandler.shadowRegisterDeltaCallback (shadowCallbackContainer_Bot.customShadowCallback_Delta)
#########################
myMQTTClient.publish ("$ aws / things / DBpyAWS1116 / shadow / update", '{"estado": {"deseado": {"SystemStatus": 1, "SisIlumi": 0, "AC": 0, "Garagem": "Fechada", "Temperatura": 25, "Luminosidade": 123}}} ', 0)
if _name_ == "_main_":
con GPIO (pines) como gpio: ejecutar (gpio)
Paso 6: Finalización
Após ter concluido os pasados anteriores, deve-se inicializar o sistema ejecutando o código fornecido no passo 5 e inicializar o aplicación através do Ionic, usando o comando Ionic serve.
Para um posível troubleshoot, se recomienda usar una función MQTT Client TEST de AWS, y luego se puede verificar como mensagens enviadas pela dragonboard está sendo atualizada de forma correta na AWS Cloud: https://us-west-2.console.aws.amazon.com / iotv2 / hom…
Recomendado:
Convierta un teléfono inteligente sin usar en una pantalla inteligente: 6 pasos (con imágenes)
Convierta un teléfono inteligente sin usar en una pantalla inteligente: el tutorial de Deze está en het Engels, voor de Nederlandse versie klik hier. ¿Tiene un teléfono inteligente (antiguo) sin usar? Conviértalo en una pantalla inteligente usando Google Sheets y algo de lápiz y papel, siguiendo este sencillo tutorial paso a paso. Cuando hayas terminado
¡Conviértase en una página de inicio personalizada y minimalista !: 10 pasos
¡Conviértase en una página de inicio personalizada y minimalista !: ¿Ha tenido que cambiar al trabajo mayoritariamente remoto desde que COVID-19 se convirtió en una cosa? ¡Lo mismo! Trabajar desde casa con nuestras computadoras y a través de Internet a menudo significa que tenemos que realizar un seguimiento de muchos sitios web para el trabajo, la escuela o incluso … ¡por diversión
¿Tienes un nuevo Neopixel? Aquí hay una guía de inicio rápido: 5 pasos
¿Tienes un nuevo Neopixel? ¡Aquí hay una guía de inicio rápido !: Sé que en mi último instructivo dije que seré regular, pero no lo he hecho. Bueno, lo intenté, pero no tenía buenas ideas: Cerilla cubierta de cera: ¡KABOOM! * Vela de crayón: Fissssssss … ¡KABOOOM! ** Arte matemático elegante: ¡Me equivoqué de ángulos! De todos modos, estoy de vuelta
Cómo hacer una casa inteligente usando el módulo de relé de control Arduino »Wiki Ùtil Ideas de automatización del hogar: 15 pasos (con imágenes)
Cómo hacer una casa inteligente con el módulo de relé de control Arduino »Wiki Ùtil Ideas de automatización del hogar: en este proyecto de automatización del hogar, diseñaremos un módulo de relé inteligente para el hogar que puede controlar 5 electrodomésticos. Este módulo de relé se puede controlar desde un teléfono móvil o teléfono inteligente, control remoto IR o control remoto de TV, interruptor manual. Este relé inteligente también puede detectar el r
Inicio Haga una estación de soldadura de aire caliente barata: 4 pasos
Inicio Haga una estación de soldadura de aire caliente barata: Hola amigos. Hoy te mostraré Home Make a Cheap Air Hot Welding Station