Mục lục:
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-13 06:58
Projeto apresentado é parte do projeto cuối cùng do curso de IoT aplicado một Ngôi nhà thông minh
O projeto mostrado a seguir é parte do projeto end a ser apresentado no curso de IoT aplicada a Smart Home, quecompe 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 proprietário da casa se o portão encontra-se aberto ou fechado.
Bước 1: Materias N Needários
- Đặt 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 agentará a iluminação a ser ativada.
- Instalação das bibliotecas citadas no passo 5.
Bước 2: Cảm biến, Atuadores E Conexões
1. Tầng lửng liên kết:
Será needário conectar a sa khoáng Mezzanine na dragonboard. Para detalhes, liên kết tham khảo
2. Độ sáng của cảm biến (LDR)
O sensor é parte do Kit da Linker Mezzanine e deverá ser conectado na entrada ADC1. Para detalhes técnicos:
3. Cảm biến de Temperatura
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 địa phương. 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. Para detalhes técnicos:
6. LED
O LED é parte do kit da Linker Mezzanine e deverá ser conectado na entrada D4. O LED đại diện cho điện thoại di động, đại diện cho đèn LED, cômodo interno da casa ou externo, como a iluminação de um jardim. Foi adicionado um điện trở de 10k ohm em sério com o já beingente para diminuir a Corrente effizada pelo sistema, já que em Experiências anteriores verifyficou-se conflitos com as portas analógicas. Para detalhes técnicos:
7. Cảm biến 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 liên hợp 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 cảm biến 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.
Bước 3: Aplicativo Para Control Remoto
O aplicativo foi desenvolvido com o Ionic Framework, https://ionicframework.com/. Será needário fazer o download 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 board dragonboard para atualização dos trạng thái 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 Defdo, as ruzes 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 Defr 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 Defda. Por exelo, iremos coirar que a temperatura é de 23 graus. Quando a temperatura nội thất 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 repeattirá.
- Garagem Informará a atual posição da garam, se aberta ou fechada.
- Temperatura é apenas Informativa e mostra a temperatura do nội thất da casa.
- Luminosidade é apesas Informativa e mostra o valor da luminosidade atual.
Segue em anexo os arquivos home.html e home.ts context códigos para comunicação com một đám mây AWS e atualização làm ứng dụng.
Bước 4: Criando Uma "coisa" Na AWS IoT
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 "tạo ra một thứ" e então, "Tạo một thứ duy nhất". Dê o nome do projeto e clique em Next.
3) Na tela seguinte, clique em "Tạo một thứ mà không cần chứng chỉ". Nesse hướng dẫn não iremos useizar os Certificados por questões práticas, porém não é recomendado fazer o uso de IoT sem chứng chỉ.
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 para fazer a atualização dos dados a serem enviados para a Có thể, assim como é uma ótima ferramenta para xử lý sự cố. Không código 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 feedbacktida na AWS Cloud.
Bước 5: Lập trình Em Python
Như seguintes bibliotecas serão needárias para a executive do programma:
import spidevimport time import log log import json import argparse
từ libsoc nhập gpio
từ thời gian nhập ngủ từ ngày nhập datetime, datetime từ gpio_96boards nhập GPIO từ AWSIoTPythonSDK. MQTTLib nhập AWSIoTMQTTClient từ AWSIoTPythonSDK. MQTTLib
Segue abaixo código hoàn thành chương trình:
import spidevimport time import log log import json import argparse
từ libsoc nhập gpio
từ thời gian nhập chế độ ngủ từ ngày nhập datetime, datetime từ gpio_96boards nhập GPIO từ AWSIoTPythonSDK. MQTTLib nhập AWSIoTMQTTClient từ AWSIoTPythonSDK. MQTTLib nhập AWSIoTMQTTShadowClient
GPIO_CS = GPIO.gpio_id ('GPIO_CS') #Analog Cổng
BUTTON = GPIO.gpio_id ('GPIO_A') RELE = GPIO.gpio_id ('GPIO_C') LED = GPIO.gpio_id ('GPIO_G')
ghim = ((GPIO_CS, 'out'), (NÚT, 'in'), (RELE, 'out'), (LED, 'out'),)
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)
nếu Rele_Status == 0:
gpio.digital_write (RELE, GPIO. LOW)
##### Sistema de Iluminacao
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 - Nhiệt độ 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 - Độ sáng 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 ": {" mong muốn ": {" Luminosidade ":' + adcoutldr + '," Temperatura ":' + temperatura + '}}}' myMQTTClient.publish ("$ aws / things / DBpyAWS1116 / shadow / update", payload_temp, 0) trả về r
def desliga ():
gpio.digital_write (RELE, GPIO. LOW) gpio.digital_write (LED, GPIO. LOW)
def run (gpio):
system_status = 1
trong khi Đúng:
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)
class shadowCallbackContainer:
def _init _ (self, deviceShadowInstance): self.deviceShadowInstance = deviceShadowInstance
# Gọi lại Custom Shadow
def customShadowCallback_Delta (self, payload, responseStatus, token): print ("Đã nhận được thông báo delta:") ### payload update script payloadDict = json.loads (payload) deltaMessage = json.dumps (payloadDict ["state"]) print "DELTA MESSAGE% s"% deltaMessage ### Yêu cầu cập nhật trạng thái được báo cáo newPayload = '{"state": {"report":' + 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
####### Định nghĩa điều
# Kết nối dựa trên chứng chỉ AWS IoT
myMQTTClient = AWSIoTMQTTClient ("DBpyAWS1116") myMQTTClient.configureEndpoint ("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ home / linartro / shared, "/ home / linaro / shared / AWS /" SUA CHAVE "-private.pem.key", "/ home / linaro / shared / AWS /" SEU CERTIFICADO "-certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (- 1) # Infinite offline Xuất bản xếp hàng myMQTTClient.configureDrainingFrequency (2) # Draining: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 giây myMQTTClient.configureMQTTOperationTubimectlientlient. 5 coisajsb "," đã kết nối ", 0)
########################
####### Định nghĩa bóng
# Init AWSIoTMQTTShadowClient
myAWSIoTMQTTShadowClient = Không có myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient ("DBpyAWS1116") myAWSIoTMQTTShadowClient.configureEndpoint ("SEU END-POINT.us-west-2.amazonaws.com", 8883) myAWSIo / shared home ' CA.crt "," / home / linaro / shared / AWS / "SUA CHAVE" -private.pem.key "," / home / linaro / shared / AWS / "SEU CERTIFICADO-certificate.pem.crt")
# AWSIoTMQTTShadowClient cấu hìnhmyAWSIoTMQTTShadowClient.configureAutoReconnectBackoffTime (1, 32, 20) myAWSIoTMQTTShadowClient.configureConnectDisconnectTimeout (10) # 10 giây myAWSIoTMQTTShadowClient.configure 5 giâyQTTOperation
# Kết nối với AWS IoT
myAWSIoTMQTTShadowClient.connect ()
# Tạo một thiết bịShadow với đăng ký liên tục
deviceShadowHandler = myAWSIoTMQTTShadowClient.createShadowHandlerWithName ("DBpyAWS1116", True) shadowCallbackContainer_Bot = shadowCallbackContainer (deviceShadowHandler)
# Nghe trên delta
deviceShadowHandler.shadowRegisterDeltaCallback (shadowCallbackContainer_Bot.customShadowCallback_Delta)
#########################
myMQTTClient.publish ("$ aws / things / DBpyAWS1116 / shadow / update", '{"state": {"mong muốn": {"SystemStatus": 1, "SisIlumi": 0, "AC": 0, "Garagem": "Fechada", "Temperatura": 25, "Luminosidade": 123}}} ', 0)
nếu _name_ == "_main_":
với GPIO (chân) là gpio: run (gpio)
Bước 6: Finalização
Após ter concluido os passos anteriores, deve-se inicializar o sistema Operatingutando o código fornecido no passo 5 e inicializar o app através do Ionic, usando o comando Ionic serve.
Khắc phục sự cố para um Possível, recomenda-se usar a função MQTT Client TEST do AWS, onde é possível verifyficar 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…