การเริ่มต้นบ้านอัจฉริยะ - Projeto Final: 6 ขั้นตอน
การเริ่มต้นบ้านอัจฉริยะ - Projeto Final: 6 ขั้นตอน
Anonim
การเริ่มต้นบ้านอัจฉริยะ - Projeto Final
การเริ่มต้นบ้านอัจฉริยะ - Projeto Final

Projeto apresentado é parte do projeto final do curso de IoT aplicado a Smart Home

ใช้งานส่วนใหญ่ แยกจากกัน ทำโปรเจ็กต์ ขั้นสุดท้าย ใช้งานจริง ไม่ต้องใช้ IoT แอป สมาร์ทโฮม, เซ็นเซอร์และรูปภาพเชื่อมต่อกับ DrangonBoard + Linker Mezzanine, ใช้งานผ่าน ionic (รวม) ข้อมูล/dados das "coisas" มากกว่า กับ cloud da AWS. Para uma primeira iteração com a DragonBoard e IoT como um todo, ตัดสินใจเลือก fazer um sistema de acendimento automático de luzes, com um sensor de luminosidade, uma chave liga/desliga para ativar um aparelhodo de ar-concordo de ar-concordo -setada e um sensor de proximidade que será instalado no portão de uma garagem, com ข้อมูลที่เกี่ยวข้อง ao proprietário da casa se o portão encontra-se aberto ou fechado.

ขั้นตอนที่ 1: Materias Necessários

Materias Necessários
Materias Necessários
Materias Necessários
Materias Necessários
  1. วาง DragonBoard
  2. 96Boards Linker Mezzanine
  3. Sensor de luminozidade (LDR) กับ Linker Mezzanine
  4. เซ็นเซอร์อุณหภูมิ 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 presidentará a iluminação a ser ativada. เพิ่มเติม
  8. Instalação das bibliotecas citadas ไม่มี passo 5.

ขั้นตอนที่ 2: เซ็นเซอร์ Atuadores E Conexões

เซนเซอร์, Atuadores E Conexões
เซนเซอร์, Atuadores E Conexões
เซนเซอร์, Atuadores E Conexões
เซนเซอร์, Atuadores E Conexões

1. Linker Mezzanine:

ความจำเป็นในการใช้ conectar a placa Mezzanine และ dragonboard รายละเอียดเพิ่มเติม ลิงค์ที่ปรึกษา

2. เซนเซอร์ลูมิโนซิเดด (LDR)

O sensor é parte do Kit da Linker Mezzanine และ deverá ser conectado na entrada ADC1. รายละเอียดทางเทคนิค:

3. เซ็นเซอร์อุณหภูมิ

O sensor é parte do Kit da Linker Mezzanine และ deverá ser conectado na entrada ADC2. รายละเอียดทางเทคนิค:

4. Botão Touch

O sensor é parte do Kit da Linker Mezzanine และ 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. รายละเอียดทางเทคนิค:https://linksprite.com/wiki/index.php5?title=Touch_…

5. รีเล

O relé é parte do Kit da Linker Mezzanine และ deverá ser conectado na entrada D2. Ele será utiizado para ligar/desligar o sistema de A/C. Para รายละเอียดทางเทคนิค:

6. LED

O LED é parte do kit da Linker Mezzanine และ deverá ser conectado na entrada D4. O LED ตัวแทน o sistema de iluminação de uma casa, seja algum cômodo interno da casa ou externo, como a iluminação de um jardim ความต้านทานของ 10k โอห์ม อยู่ที่การตั้งค่าก่อนหน้า ที่มีอยู่ การใช้งานจริงของระบบย่อย, จากประสบการณ์ก่อนหน้า ยืนยัน-se conflitos com เป็นพอร์ตแอนะล็อก รายละเอียดทางเทคนิค:

7. เซนเซอร์ de contato magnético

Este sensor foi เปรียบเทียบ 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 เซ็นเซอร์ proprimamente dito e um pequeno "imã", que ao aproximar-se do sensor irá alterar o estado do sensor. O เซ็นเซอร์ utlizado neste projeto foi um N/A (normalmente aberto) Quando o imã não está próximo do sensor, o เซ็นเซอร์ reportará estado aberto Quando o imã estiver próximo do sensor, o estado reportado será fechado.

ขั้นตอนที่ 3: Aplicativo Para Controle Remoto

แอปพลิเคชัน Para Controle Remoto
แอปพลิเคชัน Para Controle Remoto

สำหรับการใช้งานจริง foi desenvolvido com o Ionic Framework, https://ionicframework.com/ Será necessário fazer o ดาวน์โหลด e a 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.

- ระบบ 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, เป็น 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 ความกล้าหาญ 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. ตัวอย่าง iremos พิจารณา que a temperatura é de 23 graus Quando อุณหภูมิภายใน chegar 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 ข้อมูล a atual posição da garagem, se aberta ou fechada

- Temperatura é apenas informativa และ mostra a temperatura do interior da casa.

- Luminosidade é apesas informativa e mostra o valor da luminosidade atual.

Segue em anexo os arquivos home.html และ home.ts contendos os códigos para comunicação com a cloud AWS e atualização do app.

ขั้นตอนที่ 4: Criando Uma "coisa" บน AWS IoT

Criando Uma
Criando Uma

ตัวกำหนดการตั้งค่าสำหรับ IoT กับ AWS, ระบบปฏิบัติการ แยกจากกัน:

1) ลิงก์ Criar um projeto ไม่มี AWS IoT ที่ลิงก์:

2) กลุ่ม "สร้างสิ่ง" และ "สร้างสิ่งเดียว" Dê o nome do projeto e clique em ถัดไป

3) Na tela seguinte, clique em "สร้างสิ่งไม่มีใบรับรอง" กวดวิชา Nesse การใช้งาน 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 เป็น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 Troubleshooting. ไม่มี código em Python que será apresentado em breve, foram utlizados alguns destes tópicos. ข้อมูลอ้างอิงจาก "shadow", que nada mais é que a informação que está na dragonboard refletida na AWS Cloud.

ขั้นตอนที่ 5: Programa Em Python

ในฐานะที่เป็น seguintes bibliotecas serão necessárias para a execução do programa:

นำเข้าเวลา spidevimport นำเข้าบันทึก นำเข้า json นำเข้า argparse

จาก libsoc นำเข้า gpio

จากเวลานำเข้าสลีปจากวันที่นำเข้าวันที่เวลา วันที่เวลาจาก gpio_96boards นำเข้า GPIO จาก AWSIoTPythonSDK. MQTTLib นำเข้า AWSIoTMQTTClient จาก AWSIoTPythonSDK. MQTTLib

Segue abaixo código สมบูรณ์ ทำ programa:

นำเข้าเวลา spidevimport นำเข้าบันทึก นำเข้า json นำเข้า argparse

จาก libsoc นำเข้า gpio

จากเวลานำเข้าสลีปจากวันที่นำเข้าวันที่และเวลา วันที่และเวลาจาก gpio_96boards นำเข้า GPIO จาก AWSIoTPythonSDK. MQTTLib นำเข้า AWSIoTMQTTClient จาก AWSIoTPythonSDK. MQTTLib นำเข้า AWSIoTMQTTShadowClient

GPIO_CS = GPIO.gpio_id('GPIO_CS') #พอร์ตอนาล็อก

ปุ่ม = GPIO.gpio_id('GPIO_A') RELE = GPIO.gpio_id('GPIO_C') LED = GPIO.gpio_id('GPIO_G')

หมุด = ((GPIO_CS, 'ออก'), (ปุ่ม, 'เข้า'), (RELE, 'ออก'), (LED, 'ออก'),)

def setdevices (deltaMessagePython):

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

##### AC

ถ้า Rele_Status == 1: gpio.digital_write (RELE, GPIO. HIGH)

ถ้า Rele_Status == 0:

gpio.digital_write(RELE, GPIO. LOW)

##### ระบบ Iluminacao

ถ้า Led_Status == 1: gpio.digital_write (LED, GPIO. HIGH) ถ้า Led_Status == 0: gpio.digital_write (LED, GPIO. LOW)

def readadc (gpio):

gpio.digital_write (GPIO_CS, GPIO.สูง)

time.sleep(0.0002) gpio.digital_write(GPIO_CS, GPIO. LOW) r = spi.xfer2([0x01, 0xA0, 0x00])#ADC2 - อุณหภูมิ 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.สูง)

time.sleep(0.0002) gpio.digital_write(GPIO_CS, GPIO. LOW) r = spi.xfer2([0x01, 0x80, 0x00])#ADC1 - ความสว่าง 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') อุณหภูมิ = "{:.2f}".format(adc_temp) payload_temp = '{"state":{"desired": {"Luminosidade": ' + adcoutldr + ', "Temperatura": ' + อุณหภูมิ + '}}}' myMQTTClient.publish ("$aws/things/DBpyAWS1116/shadow/update", payload_temp, 0) ส่งคืน r

def desliga():

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

def รัน (gpio):

system_status = 1

ในขณะที่จริง:

time.sleep(2) button_value = gpio.digital_read(BUTTON) พิมพ์ ("----") time.sleep(0.25) if button_value == 1: if system_status == 0: system_status = 1 else: system_status = 0 desliga () ถ้า system_status == 1: ค่า = readadc(gpio) พิมพ์ "SYSTEM_STATUS %d" %system_status time.sleep(3)

คลาส shadowCallbackContainer:

def _init_(ตัวเอง, deviceShadowInstance): self.deviceShadowInstance = deviceShadowInstance

# การโทรกลับเงาแบบกำหนดเอง

def customShadowCallback_Delta (ตัวเอง payload, responseStatus, token): print ("ได้รับข้อความเดลต้า:") ### สคริปต์อัปเดต payload payloadDict = json.loads (payload) deltaMessage = json.dumps (payloadDict ["state"]) พิมพ์ "DELTA MESSAGE %s" %deltaMessage ### ขออัปเดตสถานะที่รายงาน 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

####### คำจำกัดความของสิ่ง

# การเชื่อมต่อตามใบรับรอง AWS IoT

myMQTTClient = AWSIoTMQTTClient("DBpyAWS1116") myMQTTClient.configureEndpoint("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/home/linaro/shared./AWS/root-CA, "/home/linaro/shared/AWS/"SUA CHAVE"-private.pem.key", "/home/linaro/shared/AWS/"SEU CERTIFICADO"-certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing(- 1) # อนันต์ออฟไลน์ เผยแพร่การจัดคิว myMQTTClient.configureDrainingFrequency(2) # การระบายน้ำ: 2 Hz myMQTTClient.configureConnectDisconnectTimeout(10) # 10 วินาที myMQTTClient.configureMQTTOperationTimeout(5) # 5 วินาที #เชื่อมต่อและเผยแพร่ TT myMQTTClient.connect() myMQ" coisajsb", "เชื่อมต่อ", 0)

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

####### คำจำกัดความของเงา

# เริ่ม AWSIoTMQTTShadowClient

myAWSIoTMQTTShadowClient = ไม่มี myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient("DBpyAWS1116") myAWSIoTMQTTShadowClient.configureEndpoint ("SEU END-POINT.us-west-2.amazonaws.com", 8883) myAWSIoTMQTTsentials/configures" 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 วินาที myAWSIoTMQTTShadowClient.configureMQTTOperationTimeout(5) # 5 วินาที

# เชื่อมต่อกับ AWS IoT

myAWSIoTMQTTShadowClient.connect()

# สร้างอุปกรณ์เงาด้วยการสมัครสมาชิกถาวร

deviceShadowHandler = myAWSIoTMQTTShadowClient.createShadowHandlerWithName ("DBpyAWS1116", จริง) shadowCallbackContainer_Bot = shadowCallbackContainer (deviceShadowHandler)

# ฟังใน deltas

อุปกรณ์ShadowHandler.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)

ถ้า _name_ == "_main_":

ด้วย GPIO(พิน) เป็น gpio: run(gpio)

ขั้นตอนที่ 6: Finalização

Finalização
Finalização

ข้อสรุป เกี่ยวกับปัญหาก่อนหน้า, เริ่มต้นใช้งาน o ระบบดำเนินการ o código ผ่านด่าน 5 ก่อน เริ่มต้น o แอป através ทำ Ionic, ใช้ o comando Ionic เสิร์ฟ

การแก้ไขปัญหาที่เป็นไปได้, ขอแนะนำให้ใช้ MQTT Client TEST do AWS, ยืนยันตัวตนและยืนยันตัวตนในฐานะบุรุษ enviadas pela dragonboard está sendo atualizada de forma correta na AWS Cloud: https://us-west-2.console.aws.amazon.com/iotv2/hom…