Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
Proiectul prezentat este parte a proiectului final al cursului de IoT aplicat la Smart Home
O proiectare mostrado a urma este parte a proiectului final a ser prezentat nu curs de IoT aplicat la Smart Home, care constă în senzori și atuatori conectați în DrangonBoard + Linker Mezzanine, um aplicativ dezvoltat com o ionic (a inclus în scurt) e as informações / dados das "coisas" serão salvados na cloud da AWS. Para uma prima iteração com a DragonBoard e IoT as um tot, 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-condiționat de acord com uma temperatura pre -setada e um sensor de proximitate care va fi instalat no portão de uma garagem, com a intenția de informare a proprietății da casa se o portão encontra-se aberto ou fechado.
Pasul 1: Materias Necessários
- Plasați DragonBoard.
- 96Boards Linker Mezzanine
- Sensor de luminozitate (LDR) care acompanha a Linker Mezzanine.
- Sensor de temperatura care acompanha a Linker Mezzanine.
- Botão touch that acompanha a Linker Mezzanine.
- Relé acompanha a Linker Mezzanine, utlizado for ligar o systema de A / C.
- LED acompanha a Linker Mezzanine, that representará a iluminação a ser ativada.
- Instalação das bibliotecas citadas no passo 5.
Pasul 2: senzori, conectori și conexiuni
1. Linker Mezanin:
Será necessário conectar a placa Mezzanine na dragonboard. Pentru detalii, consultați linkul
2. Luminozitatea senzorului (LDR)
O sensor is part do Kit da Linker Mezzanine e deverá ser conectado na entrada ADC1. Pentru detalii tehnice:
3. Sensor de Temperatura
O sensor is part do Kit da Linker Mezzanine e deverá ser conectado na entrada ADC2. Pentru detalii tehnice:
4. Atingeți Botão
O sensor is parte do Kit da Linker Mezzanine e deverá ser conectado na entrada D1. Este botão irá ligar / desligar o system as um tot. O acesso a este botão este somente local. Pentru detalii tehnice: 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. El va fi utiizat pentru ligar / desligar o sistem de A / C. Para detalii tehnice:
6. LED
O LED este parte a kitului de la Linker Mezzanine și deveră este conectat la intrare D4. O LED representará o sistema de iluminação de uma casa, seja algum cômodo interno da casa ou externo, as a iluminação de um jardim. Foi adicionado um resistor de 10k ohm em sério com o já existent pentru diminuarea a curentei folosite pelo sistem, já que em experiências anteriores verificou-se conflitos com as portas analógicas. Pentru detalii tehnice:
7. Senzor de contact magnetic
Acest senzor a fost inclus în parte și nu face parte din Kit da Linker Mezzanine. El va fi folosit în uma janela ou no portão de uma garagem pentru informare se a janela / garagem está aberta ou fechada. O senzor este un format format de 2 mici părți (ver foto do Step acima), o senzor primordial și um mic "imă", care să se apropie de senzor să altereze sau să stea senzor. O senzor folosit în acest proiect a fost um / N (normal deschis). Când o imagine nu este apropiată de senzor, sau senzorul raportează starea deschisă. Când o imagine este apropiată de senzor, o stare raportată va fi dată.
Pasul 3: Aplicativ Pentru Control Remoto
O aplicație a fost dezvoltată cu Ionic Framework, https://ionicframework.com/. Será necessário fazer o download and a installationção da ultima versão.
O aplicație irá se comunicar (ler e atualizar os dados) com a cloud da AWS (AWS IoT- https://aws.amazon.com/iot/), care posteriormente va fi accesat pela placa dragonboard pentru atualização dos status dos sensores e atuadores.
- Sistema de Iluminação mostra o estado do sitesma de iluminação, ligado ou desligado. Când o nível de luminozitate se descarcă de valoare configurată, ca lumini se acordă automat. Când a intensitate de lumină crește al valorii definite, ca lumini se apagă.
- O botão A / C acionará o relé, care por sua vez acionará o sistema de A / C da casa. Também é possível definir o valor desejado de temperatura. Asim que a temperatura da casa estiver maior do that a temperature de acionamento, o A / C será ligado e permanecerá ligado até a temperatura abaixar em 2 graus da tempreatura definida. De exemplu, considerăm că temperatura este de 23 graus. Când o temperatură interioară ajunge la 24 graus, o A / C va fi legat și va rămâne ligat até la temperatura ajunge la 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.
Urmăriți-vă anexele arhivelor home.html și home.ts conțin codurile pentru comunicație cu un cloud AWS și actualizarea aplicației.
Pasul 4: Criando Uma "coisa" Na AWS IoT
Pentru fazer o setup do IoT na AWS, următoarele pasuri deveră sunt urmate:
1) Criar um projeto no AWS IoT atravé do link:
2) Faceți clic pe „creați un lucru” e então, „Creați un singur lucru”. Dê o nome do projeto e clique em Next.
3) În continuare, faceți clic pe "Creați un lucru fără certificat". Nesse tutorial não iremos use os certificados por questões práticas, porém não é recomandado fazer or use of IoT sem certificados.
4) Nesse moment, sua "coisa" já estará criada. Clique no botão da "coisa" that foi criado para abrir a tela com as opções. Nessa tela putem ver os tópicosMQTT that we can ser usados for fazer a atualização dos dados to serem enviados for a Could, asim as é uma ótima toola for troubleshooting. Niciun cod în Python care va fi prezentat pe scurt, foram utlizat unele dintre acestea. În ceea ce privește opțiunile prea putem să vedem o „umbră”, nimic nu mai este o informație care se află în dragonboard refletită în AWS Cloud.
Pasul 5: Programa Em Python
Ca bibliotecă următoare sunt necesare pentru un program de execuție:
import spidevimport timp import logare import json import argparse
din libsoc import gpio
din timp import somn de la data de import datetime, datetime de la gpio_96boards import GPIO din AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTClient din AWSIoTPythonSDK. MQTTLib
Urmăriți codul complet al programului:
import spidevimport timp import logare import json import argparse
din libsoc import gpio
din timp import somn de la data de import datetime, datetime de la gpio_96boards import GPIO din AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTClient din AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTShadowClient
GPIO_CS = GPIO.gpio_id ('GPIO_CS') #Analog Port
BUTON = GPIO.gpio_id ('GPIO_A') RELE = GPIO.gpio_id ('GPIO_C') LED = GPIO.gpio_id ('GPIO_G')
pini = ((GPIO_CS, 'out'), (BUTON, 'in'), (RELE, 'out'), (LED, 'out'),)
def setdevices (deltaMessagePython):
System_Status = deltaMessagePython ['SystemStatus'] Rele_Status = deltaMessagePython ['AC'] Led_Status = deltaMessagePython ['SisIlumi']
##### AC
dacă Rele_Status == 1: gpio.digital_write (RELE, GPIO. HIGH)
dacă Rele_Status == 0:
gpio.digital_write (RELE, GPIO. LOW)
##### Sistema de Iluminacao
dacă Led_Status == 1: gpio.digital_write (LED, GPIO. HIGH) dacă Led_Status == 0: gpio.digital_write (LED, GPIO. LOW)
readadc def (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 - Luminozitate gpio.digital_write (GPIO_CS, GPIO. HIGH) adcoutldr = (r] << 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 ": {" dorit ": {" Luminosidade ":' + adcoutldr + '," Temperatura ":' + temperatura + '}}}' myMQTTClient.publish ("$ aws / things / DBpyAWS1116 / shadow / update", payload_temp, 0) returnează r
def desliga ():
gpio.digital_write (RELE, GPIO. LOW) gpio.digital_write (LED, GPIO. LOW)
def run (gpio):
system_status = 1
în timp ce este adevărat:
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)
clasă shadowCallbackContainer:
def _init _ (self, deviceShadowInstance): self.deviceShadowInstance = deviceShadowInstance
# Rambursare personalizată Shadow
def customShadowCallback_Delta (self, payload, responseStatus, token): print ("A primit un mesaj delta:") ### payload update script payloadDict = json.loads (payload) deltaMessage = json.dumps (payloadDict ["state"]) print "DELTA MESSAGE% s"% deltaMessage ### Cerere de actualizare a stării raportate newPayload = '{"state": {"rapòte":' + 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
####### Definiția lucrului
Conexiune bazată pe certificatul AWS IoT
myMQTTClient = AWSIoTMQTTClient ("DBpyAWS1116") myMQTTClient.configureEndpoint ("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ home / linaro /, "/ 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 (publică) coisajsb "," conectat ", 0)
########################
####### Definiția umbrelor
# Init AWSIoTMQTTShadowClient
myAWSIoTMQTTShadowClient = Nici unul myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient ("DBpyAWS1116") myAWSIoTMQTTShadowClient.configureEndpoint ("SEU END-POINT.us-west-2.amazonaws.com" / 88C) 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.configureMQ
# Conectați-vă la AWS IoT
myAWSIoTMQTTShadowClient.connect ()
# Creați un deviceShadow cu abonament persistent
deviceShadowHandler = myAWSIoTMQTTShadowClient.createShadowHandlerWithName ("DBpyAWS1116", True) shadowCallbackContainer_Bot = shadowCallbackContainer (deviceShadowHandler)
# Ascultă pe delte
deviceShadowHandler.shadowRegisterDeltaCallback (shadowCallbackContainer_Bot.customShadowCallback_Delta)
#########################
myMQTTClient.publish ("$ aws / things / DBpyAWS1116 / shadow / update", '{"state": {"dorit": {"SystemStatus": 1, "SisIlumi": 0, "AC": 0, "Garagem": "Fechada", "Temperatura": 25, "Luminosidade": 123}}} ', 0)
dacă _name_ == "_main_":
cu GPIO (pini) ca gpio: run (gpio)
Pasul 6: Finalização
Após ter concluido os passos anterior, deve-se initializar o system executando o code fornecido no step 5 e initializar o app através do Ionic, folosind o comanda Ionic serve.
Pentru o posibilă depanare, vă recomandăm să folosiți o funcție MQTT Client TEST do AWS, unde este posibil să verificați și cum să trimiteți mesaje de pe dragonboard este actualizat de forma corectă în AWS Cloud: https://us-west-2.console.aws.amazon.com / iotv2 / hom …