Sommario:
- Fase 1: Materias Necessários
- Passaggio 2: Sensori, Attuatori e Connessioni
- Passaggio 3: Aplicativo Para Controle Remoto
- Passaggio 4: Criando Uma "coisa" Na AWS IoT
- Passaggio 5: programma Em Python
- Passaggio 6: finalizzazione
Video: Avviare una casa intelligente - Finale del progetto: 6 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
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 da "coisas" serão salvados na cloud da AWS. Per prima cosa iteração com a DragonBoard e IoT come fare, decidere 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 con una 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.
Fase 1: Materias Necessários
- Posiziona DragonBoard.
- 96Boards Linker Mezzanine
- Sensor de luminozidade (LDR) que acompanha a Linker Mezzanine.
- Sensore di 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, che rappresenta un'iluminação a ser ativada.
- Instalação das bibliotecas citadas no passo 5.
Passaggio 2: Sensori, Attuatori e Connessioni
1. Soppalco linker:
Se necessario collegare un piano Mezzanine na dragonboard. Per i dettagli, link consultivo
2. Sensore di luminosità (LDR)
Il sensore è parte del Kit da Linker Mezzanine e deve essere collegato all'ingresso ADC1. Per maggiori dettagli tecnici:
3. Sensore di temperatura
Il sensore è parte del Kit da Linker Mezzanine e deve essere collegato all'ingresso ADC2. Per maggiori dettagli tecnici:
4. Botão Touch
Il sensore è parte del Kit da Linker Mezzanine e deve essere collegato all'ingresso D1. Este botão irá ligar/desligar o sistema como um todo. O acesso a este botão é somente locale. Per dettagli tecnici: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 system de A/C. Para detalhes técnicos:
6. LED
Il LED è parte del kit da Linker Mezzanine e deve essere collegato all'ingresso D4. O LED rappresenta o sistema di illuminazione di una casa, seja algum come interno di casa o esterno, come un'illuminazione di un giardino. Per aggiungere un resistore da 10k ohm in sério com o já esistente per diminuire una corrente utilizzata per il sistema, já que em experiências anteriori verificou-se conflitos com as portas analógicas. Per maggiori dettagli tecnici:
7. Sensore di contatto magnetico
Questo sensore se 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 il sensore è formato da 2 pequenas peças (ver foto do Step acima), o sensor propriamente dito e um pequeno "imã", que ao aproximar-se do sensor irá alterar o stado 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ã estater próximo do sensor, o estado reportado será fechado.
Passaggio 3: Aplicativo Para Controle Remoto
O aplicativo foi desenvolvido com o Ionic Framework, https://ionicframework.com/. Se necessario fazer o scarica e installa l'ultima versione.
O aplicativo 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 sensors e attuadores.
- Sistema de Iluminação mostra o stado 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. Assim que a temperatura da casa estivar 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. Per esempio, iremos considerar que a temperature é de 23 graus. Quando a 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 si contendono i codici per la comunicazione con un cloud AWS e l'aggiornamento dell'app.
Passaggio 4: Criando Uma "coisa" Na AWS IoT
Per fazer o setup do IoT na AWS, i passaggi successivi devono essere seguiti:
1) Criar um projeto no AWS IoT atravé do link:
2) Clique "crea una cosa" e então, "Crea una cosa singola". Dê o nome do projeto e clique em Next.
3) Na tela seguinte, clique em "Crea una cosa senza certificato". Nesse tutorial não iremos utilizar os certificates por questões práticas, porém não é raccomandato fazer o use de IoT sem certificados.
4) Nesse momento, sua "coisa" já estará criada. Clique no 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 per fazer atualização dos dos a serem enviados per a Could, assim como é uma ótima ferramenta per troubleshooting. No código em Python que será apresentado em breve, foram utlizados alguns destes tópicos. Non ci sono molte opzioni su "shadow", che non sono mai state fornite da un'informazione su Dragonboard riflessa su AWS Cloud.
Passaggio 5: programma Em Python
As seguintes bibliotecas serão necessárias para a execução do programa:
import spidevimport time import logging import json import argparse
da libsoc import gpio
from time import sleep from datetime import date, datetime from gpio_96boards import GPIO da AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTClient da AWSIoTPythonSDK. MQTTLib
Segue abaixo codice completo del programma:
import spidevimport time import logging import json import argparse
da libsoc import gpio
from time import sleep from datetime import date, datetime from gpio_96boards import GPIO da AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTClient da AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTShadowClient
GPIO_CS = GPIO.gpio_id('GPIO_CS') #Porta analogica
PULSANTE = GPIO.gpio_id('GPIO_A') RELE = GPIO.gpio_id('GPIO_C') LED = GPIO.gpio_id('GPIO_G')
pin = ((GPIO_CS, 'fuori'), (PULSANTE, 'in'), (RELE, 'fuori'), (LED, 'fuori'),)
def setdevices(deltaMessagePython):
System_Status = deltaMessagePython['SystemStatus'] Rele_Status = deltaMessagePython['AC'] Led_Status = deltaMessagePython['SisIlumi']
##### AC
if Rele_Status == 1: gpio.digital_write(RELE, GPIO. HIGH)
se Rele_Status == 0:
gpio.digital_write(RELE, GPIO. LOW)
##### Sistema di illuminazione
if Led_Status == 1: gpio.digital_write(LED, GPIO. HIGH) if 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 - 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') temperatura = "{:.2f}".format(adc_temp) payload_temp = '{"state":{"desired": {"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):
stato_sistema = 1
mentre vero:
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
# Richiamata Shadow personalizzata
def customShadowCallback_Delta(self, payload, responseStatus, token): print("Ricevuto un messaggio delta:") ### script di aggiornamento del payload payloadDict = json.loads(payload) deltaMessage = json.dumps(payloadDict["state"]) print "DELTA MESSAGE %s" %deltaMessage ### Richiesta di aggiornamento dello stato riportato 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
####### Definizione della cosa
# Connessione basata su certificato AWS IoT
myMQTTClient = AWSIoTMQTTClient("DBpyAWS1116") myMQTTClient.configureEndpoint("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentials("/home/linaro/shared/AWS"root, "/home/linaro/shared/AWS/"SUA CHAVE"-private.pem.key", "/home/linaro/shared/AWS/"SEU CERTIFICADO"-certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing(- 1) # Infinite offline Publish queuing myMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec myMQTTClient.configureMQTTOperationTimeout(5) # 5 sec #connect and publish myMQTTClient.connect() myMQTTClient.publish() coisajsb", "connesso", 0)
########################
####### Definizione dell'ombra
# Init AWSIoTMQTTShadowClient
myAWSIoTMQTTShadowClient = Nessuno myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient("DBpyAWS1116") myAWSIoTMQTTShadowClient.configureEndpoint("SEU END-POINT.us-west-2.amazonaws.com",/888QTTroroot"red/figure/8883) myAWSIoClient 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
# Connettiti ad AWS IoT
myAWSIoTMQTTShadowClient.connect()
# Crea un dispositivo Shadow con abbonamento persistente
deviceShadowHandler = myAWSIoTMQTTShadowClient.createShadowHandlerWithName("DBpyAWS1116", True) shadowCallbackContainer_Bot = shadowCallbackContainer(deviceShadowHandler)
# Ascolta su delta
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_":
con GPIO(pin) come gpio: run(gpio)
Passaggio 6: finalizzazione
Dopo aver concluso i passaggi precedenti, deve essere avviato il sistema di esecuzione o il codice fornito al passo 5 e avviato l'app su Ionic, utilizzando il comando Ionic serve.
Per poter risolvere i problemi, consigliare di utilizzare una funzione MQTT Client TEST su AWS, non è possibile verificare e come mensagens enviadas pela dragonboard está sendo atualizada de forma corretta na AWS Cloud:
Consigliato:
Sicurezza cyber-fisica del parcheggio intelligente e del controllo del traffico: 6 passaggi
Sicurezza informatica e fisica del parcheggio intelligente e del controllo del traffico: Internet sta crescendo con miliardi di dispositivi tra cui automobili, sensori, computer, server, frigoriferi, dispositivi mobili e molto altro a un ritmo senza precedenti. Ciò introduce molteplici rischi e vulnerabilità nell'infrastruttura, nel funzionamento e
Sveglia intelligente: una sveglia intelligente realizzata con Raspberry Pi: 10 passaggi (con immagini)
Sveglia intelligente: una sveglia intelligente realizzata con Raspberry Pi: hai mai desiderato un orologio intelligente? Se è così, questa è la soluzione per te! Ho realizzato Smart Alarm Clock, questo è un orologio con cui puoi modificare l'ora della sveglia in base al sito web. Quando la sveglia suona, ci sarà un suono (cicalino) e 2 luci si accenderanno
Progetto casa intelligente EF230: 7 passaggi
Progetto EF230 Smart Home: Parti e materiali necessari: 1 Arduino MKR 10003 Breadboard2 Mini fotocellule1 Transistor NPN1 Mini interruttore di alimentazione1 LED – RGB (4 poli)1 LED (colore a scelta)1 Diodo 1N41481 Resistenze da 10K Ohm5 Resistore da 100 Ohm1 Sensore di temperatura TMP361 DAGU 48:1
Proteggi in modo intelligente la tua casa intelligente: 14 passaggi
Proteggi in modo intelligente la tua casa intelligente: sto partecipando al concorso sicuro e protetto. Se ti piace il mio tutorial, per favore votalo! Ti mostrerò come proteggere in modo semplice ed economico la tua casa e il suo ambiente. Contiene dei segmenti in cui imparerai come: 1. Configura y
Come installare Fedora su uno SheevaPlug e avviare una scheda SD.: 13 passaggi
Come installare Fedora su uno SheevaPlug e avviare una scheda SD.: Ho visto un post su SheevaPlug su Slashdot e poi su Popular Mechanics. Sembrava un dispositivo interessante esegue @ 2.5w, senza ventole, stato solido e senza bisogno di un monitor. Per anni ho portato in giro un vecchio monitor CRT