Memulakan Rumah Pintar - Projeto Akhir: 6 Langkah
Memulakan Rumah Pintar - Projeto Akhir: 6 Langkah
Anonim
Memulakan Rumah Pintar - Projeto Final
Memulakan Rumah Pintar - Projeto Final

Projeto apresentado is parte do projeto final do curso de IoT aplicado sebuah Rumah Pintar

O projeto mostrado a seguir é parte do projeto final a ser apresentado no curso de IoT aplicada a Smart Home, que αποτελείταιe de sensores e atuadores conectados na DrangonBoard + Linker Mezzanine, um aplicativo desenvolvido com o ionic (ser incluido em 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 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 pra -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.

Langkah 1: Materias Necessários

Materias Necessários
Materias Necessários
Materias Necessários
Materias Necessários
  1. Tempatkan DragonBoard.
  2. 96Boards Linker Mezzanine
  3. Sensor de luminozidade (LDR) que acompanha a Linker Mezzanine.
  4. Sensor de temperatura que acompanha a Linker Mezzanine.
  5. Botão touch que acompanha a Linker Mezzanine.
  6. Relé acompanha a Linker Mezzanine, utlizado para ligar o systema de A / C.
  7. LED acompanha a Linker Mezzanine, que representará a iluminação a ser ativada.
  8. Instalação das bibliotecas citadas no passo 5.

Langkah 2: Sensores, Atuadores E Conexões

Sensores, Atuadores E Conexões
Sensores, Atuadores E Conexões
Sensores, Atuadores E Conexões
Sensores, Atuadores E Conexões

1. Mezzanine penghubung:

Sera mustário conectar placa Mezzanine na dragonboard. Para detalhes, pautan perunding

2. Sensor luminosidade (LDR)

Sensor O Parte do Kit da Linker Mezzanine dan deverá ser conectado na entrada ADC1. Para detalhes técnicos:

3. Sensor de Temperatura

Sensor o parte do Kit da Linker Mezzanine dan de cone con conectado na entrada ADC2. Para detalhes técnicos:

4. Botão Touch

Sensor o parte do Kit da Linker Mezzanine dan deverá ser conectado na entrada D1. Este botão irá ligar / desligar o sistema como um todo. O acesso a este botão adalah sesuatu yang tempatan. Para detalhes técnicos: https://linksprite.com/wiki/index.php5? Title = Sentuh_…

5. Relé

Lihatlah Kit da Linker Mezzanine e deverá ser conectado na entrada D2. Ele será utiizado para ligar / desligar o sistema de A / C. Para melepaskan técnicos:

6. LED

O LED adalah komponen kit da Linker Mezzanine e deverá ser conectado na entrada D4. O LED representasi 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á υπάρχον untuk para penguasaan sebuah corente utilizada pelo sistema, já que em experências anteriores verificou-se conflitos com sebagai portas analógicas. Para detalhes técnicos:

7. Sensor de contato magnético

Sensor Este juga merangkumi bahagian dan Kit Kit 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.

Langkah 3: Remoto Aplicativo Para Controle

Aplicativo Para Controle Remoto
Aplicativo Para Controle Remoto

O aplicativo juga desenvolvido com o Ionic Framework, https://ionicframework.com/. Será mustário fazer o muat turun dan 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 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, seperti 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. Oleh contoh, iremos mempertimbangkan suhu sebagai 23 graus. Quando a temperatura interior chegar 24 graus, o A / C será ligado dan permanecerá ligado at a temperatura chegar 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 contendos os códigos para comunicação com a cloud AWS e atualização do app.

Langkah 4: Criando Uma "coisa" Na AWS IoT

Criando Uma
Criando Uma

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) Clique "buat sesuatu" e então, "Buat satu perkara". Dê o nome do projeto e clique em Seterusnya.

3) Na tela seguinte, klik "Buat sesuatu tanpa sijil". 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. Clique no botão da "coisa" que foi criado para abrir a tela com sebagai opções. Nessa tela podemos ver os tópicosMQTT que podem ser usados para fazer a atualização dos dados serem enviados para a Could, assim como é uma ótima ferramenta untuk menyelesaikan masalah. Tidak ada cidigo em Python que será apresentado em breve, foram utlizados alguns destes tópicos. Nas opções também podemos ver a "shadow", que nada mais é que a informação que está na dragonboard refletida na AWS Cloud.

Langkah 5: Programa Em Python

Sebagai seguintes bibliotecas serão requárias para a execução do programa:

import spidevimport time import logging import json import argparse

dari libsoc import gpio

dari waktu import import dari tarikh import datetime, datetime dari gpio_96boards import GPIO dari AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTClient dari AWSIoTPythonSDK. MQTTLib

Segue abaixo código completeo do programa:

import spidevimport time import logging import json import argparse

dari libsoc import gpio

dari waktu import impas dari tarikh import datetime, datetime dari gpio_96boards import GPIO dari AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTClient dari 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')

pin = ((GPIO_CS, 'keluar'), (BUTTON, 'in'), (RELE, 'out'), (LED, 'out'),)

def setdevices (deltaMessagePython):

System_Status = deltaMessagePython ['SystemStatus'] Rele_Status = deltaMessagePython ['AC'] Led_Status = deltaMessagePython ['SisIlumi']

##### AC

jika Rele_Status == 1: gpio.digital_write (RELE, GPIO. HIGH)

jika Rele_Status == 0:

gpio.digital_write (RELE, GPIO. LOW)

##### Sistema de Iluminacao

jika Led_Status == 1: gpio.digital_write (LED, GPIO. HIGH) jika 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 - Suhu 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) now = datetime.utcnow () now_str = now.strftime ('% Y-% m-% dT% H:% M:% SZ') temperatura = "{:.2f} ". Format (adc_temp) payload_temp = '{" state ": {" dikehendaki ": {" Luminosidade ":' + adcoutldr + '," Temperatura ":' + temperatura + '}}}' myMQTTClient.publish ("$ aws / things / DBpyAWS1116 / shadow / kemas kini", payload_temp, 0) kembali r

def desliga ():

gpio.digital_write (RELE, GPIO. LOW) gpio.digital_write (LED, GPIO. LOW)

larian def (gpio):

sistem_status = 1

Walaupun Betul:

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 yang lain: system_status = 0 desliga () jika system_status == 1: nilai = readadc (gpio) cetak "SYSTEM_STATUS% d"% system_status time.sleep (3)

bayangan kelasCallbackContainer:

def _init _ (diri, deviceShadowInstance): self.deviceShadowInstance = deviceShadowInstance

# Panggilan balik Bayangan Tersuai

def customShadowCallback_Delta (diri, muatan, responsStatus, token): cetak ("Menerima mesej delta:") ### skrip kemas kini payloadDict = json.loads (muatan) deltaMessage = json.dumps (payloadDict ["state"]) cetak "DELTA MESSAGE% s"% deltaMessage ### Permintaan untuk mengemas kini keadaan yang dilaporkan newPayload = '{"state": {"dilaporkan":' + 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

####### Definisi perkara

# Sambungan berasaskan sijil AWS IoT

myMQTTClient = AWSIoTMQTTClient ("DBpyAWS1116") myMQTTClient.configureEndpoint ("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ rumah / AWSrow /, "/ home / linaro / shared / AWS /" SUA CHAVE "-private.pem.key", "/ home / linaro / shared / AWS /" SEU CERTIFICADO "-certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (- 1) # Terbit luar talian Terbitkan beratur myMQTTClient.configureDrainingFrequency (2) # Draining: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 sec myMQTTClient.configureMQTTOperationTimeout (5) # 5titikonPerhatian.connect coisajsb "," bersambung ", 0)

########################

####### Definisi bayangan

# Init AWSIoTMQTTShadowClient

myAWSIoTMQTTShadowClient = Tidak ada myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient ("DBpyAWS1116") myAWSIoTMQTTShadowClient.configureEndpoint ("SEU END-POINT.us-west-2.amazonaws.com" / osandua / oConderAsmedia/Asmedia/Asmedia/Asmedia/rsmt/wsws/smbb) CA.crt "," / home / linaro / shared / AWS / "SUA CHAVE" -private.pem.key "," / home / linaro / shared / AWS / "SEU CERTIFICADO-sijil.pem.crt")

# AWSIoTMQTTShadowClient konfigurasimyAWSIoTMQTTShadowClient.configureAutoReconnectBackoffTime (1, 32, 20) myAWSIoTMQTTShadowClient.configureConnectDisconnectTimeout (10) # 10 saat myAWSIoTMQTTShadowClient (5)

# Sambung ke AWS IoT

myAWSIoTMQTTShadowClient.connect ()

# Buat peranti Bayangkan dengan langganan berterusan

deviceShadowHandler = myAWSIoTMQTTShadowClient.createShadowHandlerWithName ("DBpyAWS1116", True) shadowCallbackContainer_Bot = shadowCallbackContainer (perantiShadowHandler)

# Dengarkan di delta

deviceShadowHandler.shadowRegisterDeltaCallback (shadowCallbackContainer_Bot.customShadowCallback_Delta)

#########################

myMQTTClient.publish ("$ aws / things / DBpyAWS1116 / shadow / update", '{"state": {"dikehendaki": {"SystemStatus": 1, "SisIlumi": 0, "AC": 0, "Garagem": "Fechada", "Temperatura": 25, "Luminosidade": 123}}} ', 0)

jika _nama_ == "_main_":

dengan GPIO (pin) sebagai gpio: run (gpio)

Langkah 6: Finalização

Finalização
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 melayani.

Selesaikan permasalahan, umpan balik dengan menggunakan FunQão MQTT Client TEST do AWS, onde é possível verificar e as mensagens enviadas pela dragonboard está sendo atualizada de forma correta na AWS Cloud: https://us-west-2.console.aws.amazon.com / iotv2 / hom…

Disyorkan: