Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
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 och cloud da AWS. Para uma primeira iteração com a DragonBoard e IoT como um todo, decidiu-se fazer um system of 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 proprietário da casa se o portão encontra-se aberto ou fechado.
Steg 1: Materias Necessários
- Placera DragonBoard. https://www.amazon.com/DragonBoard-410C-IoT-Start …
- 96Boards Linker Mezzanine
- Sensor de luminozidade (LDR) som 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 or systema de A/C.
- LED acompanha a Linker Mezzanine, que representará a iluminação a ser ativada.
- Instalação das bibliotecas citadas no passo 5.
Steg 2: Sensorer, Atuadores E Conexões
1. Linker Mezzanine:
Será needsário conectar a placa Mezzanine and dragonboard. Para detalhes, konsultlänk
2. Sensor luminosidade (LDR)
O sensor é parte do Kit da Linker Mezzanine e deverá ser conectado na entrada ADC1. Para detalhes técnicos:
3. Temperaturgivare
O sensor é parte do Kit da Linker Mezzanine e deverá ser conectado na entrada ADC2. Para detalhes técnicos:
4. Botão Touch
O sensor é parte do Kit da Linker Mezzanine e deverá ser conectado na 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 da Linker Mezzanine e deverá ser conectado na entrada D2. Ele será utiizado para ligar/desligar o sistema de A/C.
6. LED
O LED é parte do kit da Linker Mezzanine e deverá ser conectado na entrada D4. O LED -representar o system av 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 system, 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 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 nästa projeto foi um N/A (normalmente aberto). Om det finns en sensor eller en sensor som rapporterar det. Om det finns en sensor eller en rapport som ser ser fechado ut.
Steg 3: Aplicativo Para Controle Remoto
O aplicativo foi desenvolvido com o Ionic Framework, https://ionicframework.com/. Det är nödvändigt att ladda ner och installera i slutändan.
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 iluminaçã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. Det är möjligt att uppnå en temperatur som överensstämmer med en temperatur som kan fungera som A/C -temperatur och permanenta temperaturer för två temperaturer. Exemplo, iremos considerar que a temperatura é de 23 grader. Känna en temperatur inuti vinäger på 24 grader, A/C será ligado e permanentecerá 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 och 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 contendos os códigos para comunicação com a cloud AWS e atualização do app.
Steg 4: Criando Uma "coisa" Na AWS IoT
Para fazer o setup för IoT och AWS, vi kan också säga att vi kan göra följande:
1) Criar um projeto no AWS IoT atravé do link:
2) Klicka på "skapa en sak" e então, "Skapa en enda sak". Dé o nome do projeto e clique em Next.
3) Klicka på "Skapa en sak utan certifikat". Nesse tutorial não iremos 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. Klicka inte botão da "coisa" que foi criado para abrir a tela com as opções. Nessa tela podemos ver os tópicosMQTT que podem ser usados para fazer a atualização dos dados a serem enviados para a Could, assim como é uma ótima ferramenta para felsökning. No código em Python que será apresentado em breve, foram utlizados alguns destes tópicos. Det finns en "skugga" som kan ge information om dragonboard -refletida och AWS Cloud.
Steg 5: Programa Em Python
Som seguintes bibliotecas serão necessárias para a execução do programa:
import spidevimport tid import loggning import json import argparse
från libsoc import gpio
från tid importera sömn från datetime importdatum, datetime från gpio_96boards importera GPIO från AWSIoTPythonSDK. MQTTLib importera AWSIoTMQTTClient från AWSIoTPythonSDK. MQTTLib
Segue abaixo código completeo to programa:
import spidevimport tid import loggning import json import argparse
från libsoc import gpio
från tid importera sömn från datetime importdatum, datetime från gpio_96boards importera GPIO från AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTClient från AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTShadowClient
GPIO_CS = GPIO.gpio_id ('GPIO_CS') #Analog port
KNAPP = GPIO.gpio_id ('GPIO_A') RELE = GPIO.gpio_id ('GPIO_C') LED = GPIO.gpio_id ('GPIO_G')
pins = ((GPIO_CS, 'out'), (KNAPP, 'in'), (RELE, 'ut'), (LED, 'ut'),)
def setdevices (deltaMessagePython):
System_Status = deltaMessagePython ['SystemStatus'] Rele_Status = deltaMessagePython ['AC'] Led_Status = deltaMessagePython ['SisIlumi']
##### AC
om Rele_Status == 1: gpio.digital_write (RELE, GPIO. HIGH)
om Rele_Status == 0:
gpio.digital_write (RELE, GPIO. LOW)
##### Sistema de Iluminacao
om Led_Status == 1: gpio.digital_write (LED, GPIO. HIGH) om 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 - Temperatur 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 - Luminosity gpio.digital_write (GPIO_CS, GPIO. HIGH) adcoutldr = (r [1] << 8) & 0b1100000000 adcoutldr = adcoutldr | (r [2] & 0xff) adcoutldr = str (adcoutldr) nu = datetime.utcnow () now_str = now.strftime ('%Y-%m-%dT%H:%M:%SZ') temperatura = "{:.2f} ". Format (adc_temp) payload_temp = '{" state ": {" wanted ": {" 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
medan det är sant:
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 () om system_status == 1: värde = readadc (gpio) skriv ut "SYSTEM_STATUS %d" %system_status time.sleep (3)
klass shadowCallbackContainer:
def _init _ (self, deviceShadowInstance): self.deviceShadowInstance = deviceShadowInstance
# Anpassad skuggåteruppringning
def customShadowCallback_Delta (self, payload, responseStatus, token): print ("Har tagit emot ett delta -meddelande:") ### nyttolast uppdateringsskript payloadDict = json.loads (nyttolast) deltaMessage = json.dumps (payloadDict ["state"]) print "DELTA MESSAGE %s" %deltaMessage ### Begäran om att uppdatera det rapporterade tillståndet 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
####### Thing definition
# AWS IoT -certifikatbaserad anslutning
myMQTTClient = AWSIoTMQTTClient ("DBpyAWS1116") myMQTTClient.configureEndpoint ("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/home/"/home/"/home/"/home/"/CA/home/"/home/"/home/"/home/"/home/"/home/"/home/"/home/"/home/"/home/"/home/"/home/"/home/"/CA/home/, "/home/linaro/shared/AWS/" SUA CHAVE "-private.pem.key", "/home/linaro/shared/AWS/" SEU CERTIFICADO "-certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (- 1) # Infinite offline Publicera kö myMQTTClient.configureDrainingFrequency (2) # Dränering: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 sec myMQTTClient.configureMQTTOperationTimeout (5) # 5 secTConnect (publicera my. MlTlMlKlIntMlQMlTlKlIntClIntClIntClIntClIntClient) coisajsb "," ansluten ", 0)
########################
######## Skuggdefinition
# Init AWSIoTMQTTShadowClient
myAWSIoTMQTTShadowClient = Inga myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient ("DBpyAWS1116") myAWSIoTMQTTShadowClient.configureEndpoint/onSonSonSonSonSon.amn./sammankoppling/sammanträde-signon/signon/signon/total-total-total-total-tjänst-tjänst. CA.crt ","/home/linaro/shared/AWS/"SUA CHAVE" -private.pem.key ","/home/linaro/shared/AWS/"SEU CERTIFICADO-certificate.pem.crt")
# AWSIoTMQTTShadowClient -konfigurationmyAWSIoTMQTTShadowClient.configureAutoReconnectBackoffTime (1, 32, 20) myAWSIoTMQTTShadowClient.configureConnectDisconnectTimeout (10) # 10 sec myAWSIoTMQTht.
# Anslut till AWS IoT
myAWSIoTMQTTShadowClient.connect ()
# Skapa en enhet Skugga med ihållande prenumeration
deviceShadowHandler = myAWSIoTMQTTShadowClient.createShadowHandlerWithName ("DBpyAWS1116", True) shadowCallbackContainer_Bot = shadowCallbackContainer (deviceShadowHandler)
# Lyssna på deltor
deviceShadowHandler.shadowRegisterDeltaCallback (shadowCallbackContainer_Bot.customShadowCallback_Delta)
#########################
myMQTTClient.publish ("$ aws/things/DBpyAWS1116/shadow/update", '{"state": {"wanted": {"SystemStatus": 1, "SisIlumi": 0, "AC": 0, "Garagem": "Fechada", "Temperatura": 25, "Luminosidade": 123}}} ', 0)
om _name_ == "_ huvud_":
med GPIO (pins) som gpio: kör (gpio)
Steg 6: Finalização
Após ter concluido os passos anteriores, deve-se inicializar o sistema executando o código fornecido no passo 5 e inicializar o app através do Ionic, usando o comando Ionic serve.
Para um eventuell felsökning, rekommendera och använd en MQTT Client TEST för AWS, onde é possível verificar e as mensagens enviadas for dragonboard está sendo atualizada de forma correta na AWS Cloud: https://us-west-2.console.aws.amazon.com/iotv2/hom …