Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
Projeto apresentado é parte do projeto final do IoT applikavimas išmaniesiems namams
O projeto mostrado a seguir é parte do projeto final and 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. informacija/dados das "coisas" serija salvadosas ir debesis da AWS. Jei norite, kad tai būtų „DragonBoard“ir „IoT como“, tada reikia nuspręsti, kaip tai padaryti, ar ne, automatinė automatizavimo sistema, „luzes“, „luminesidade“jutiklis, „uma chave liga“/„desliga para ativar um aparelho de ar-condicionado de acordo“. -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.
1 žingsnis: Materias Necessários
- Įdėkite „DragonBoard“.
- „96Boards Linker Mezzanine“https://www.96boards.org/product/linkspritesensork…
- Šviesos jutiklis (LDR) yra kartu su „Linker Mezzanine“.
- Temperatūros jutiklis pridedamas prie „Linker Mezzanine“.
- Botão touch que kartu su Linker Mezzanine.
- Išbandykite „Linker Mezzanine“, utlizado para ligar arba systema de A/C.
- Šviesos diodas pridedamas prie „Linker Mezzanine“, kuris atstovauja iliuminacijai ir serijai.
- Instalação das bibliotecas citadas no passo 5.
2 žingsnis: Sensores, Atuadores E Conexões
1. „Linker Mezzanine“:
Būtinai paskirstykite aikštę „Mezzanine“ir „dragonboard“. Detaliau, paskaitykite nuorodą
2. Jutiklio apšvietimas (LDR)
O jutiklis yra „Part da Linker Mezzanine“ir deverá serijos ADC1 prijungimo prievado dalis. Detaliau apie televiziją:
3. Temperatūros jutiklis
O jutiklis yra „Part da Linker Mezzanine“ir deverá serijos ADC2 prijungimo prievado dalis. Detaliau apie televiziją:
4. „Botão Touch“
O jutiklis yra „Part da Linker Mezzanine“ir „Deverá“serijos su įvestimi D1 dalis. Este botão irá ligar/desligar o system como um todo. O acesso a este botão é somente local. 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 system de A/C. Išsami informacija apie televiziją:
6. LED
Šviesos diodas, skirtas „Linker Mezzanine“ir „D4“jungčių rinkiniui. O LED reprezentacinė sistema, skirta iluminacão de uma casa, seja algum cômodo interno da casa ou externo, como and iluminação de um jardim. Jei norite susidoroti su 10 k ohm rezistoriumi, jis gali būti išjungtas ir sumažintas, o tai gali būti panaudota pelo sistemai, o tai leidžia patirti anteriores verificou-se conflitos com as portas analógicas. Detaliau apie televiziją:
7. Jutiklis de contato magnético
Šis jutiklis yra skirtas „Part da Linker Mezzanine“daliai ir netaisyklėms. Ele será usado em uma janela ou no portão de uma garagem para informar se a janela/garagem está aberta ou fechada. O jutiklis yra suprojektuotas iš 2 pequenas peças (ver foto do Step acima), o sensor proprimamente dito e um pequeno "imã", que ao aproximar-se do sensor oná alterar or estado do sensor. O jutiklis nėra visiškai suprojektuotas N/A (normalus 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.
3 žingsnis: „Aplicativo Para Controle Remoto“
„Ionic Framework“programos aprašymas, https://ionicframework.com/. Reikalingas fazer arba atsisiųsti ir įdiegti galutinę versiją.
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, kaip 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 system de A/C da casa. Também é possível apibrėžimas arba valor desejado da temperatura. Assim que a temperatura da casa estiver maior do que a temperatura de acionamento, o A/C será ligado e permanencerá ligado até a temperatura abaixar em 2 graus da tempreatura definida. Pavyzdžiui, iremos harkina, kad yra 23 temperatūra. Išskirtinio temperatūros interjero cheras su 24 gramais, arba oro kondicionavimo serija ir nuolatinė ligado temperatūra ir 20 laipsnių temperatūros chegar, desligando então. Depois o ciclo se repetirá.
- Garagem informará a atual posição da garagem, se aberta ou fechada.
- Temperatūra ir apenos informacinė sistema.
- Luminosidade é apesas informativa e mostra o valor da luminosidade atual.
Sekite aneksą ir arquivos home.html e home.ts contendos os códigos para comunicação com a cloud AWS ir atualização do app.
4 žingsnis: Criando Uma „coisa“Na AWS IoT
Fazer ar setup for IoT with AWS, os seguintes passos deverão ser seguidos:
1) Criar um projeto no AWS IoT atravé do link:
2) Paspaudimas „sukurti daiktą“ir „sukurti vieną daiktą“. Dê o nome do projeto e clique em Next.
3) Na tela seguinte, clique em "Sukurti daiktą be sertifikato". „Nesse“mokymo programa, skirta naudoti sertifikatus, skirtus užduotims gauti, nėra jokių rekomendacijų ir patarimų, kaip naudotis IoT sem sertifikatais.
4) Nesse momento, sua "coisa" já estará criada. Spustelėkite „bot“ir „coisa“, nes tai yra abipusė ir tinkama. Nessa tela podemos ver os tópicosMQTT que podem ser usados para fazer a atualização dos dados a serem enviados para a Can, assim como é uma ótima ferramenta para trikčių šalinimas. No 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 more é que a informationção que está na dragonboard refletida with AWS Cloud.
5 žingsnis: „Python“programa
Kaip seguintes bibliotecas serão vajadiai para a execução do programa:
importas spidevimportas laikas importas registravimas importas json importas argparse
iš libsoc import gpio
nuo laiko importavimo miego nuo datos importavimo datos, datos laiko nuo gpio_96boards importuoja GPIO iš AWSIoTPythonSDK. MQTTLib importuoja AWSIoTMQTTClient iš AWSIoTPythonSDK. MQTTLib
Programos „Segue abaixo código“užbaigimas:
importas spidevimportas laikas importas registravimas importas json importas argparse
iš libsoc import gpio
nuo laiko importavimo miego nuo datos importavimo datos, datos laiko nuo gpio_96boards importuoja GPIO iš AWSIoTPythonSDK. MQTTLib importuoja AWSIoTMQTTClient iš 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')
smeigtukai = ((GPIO_CS, 'out'), (BUTTON, „in“), (RELE, „out“), (LED, „out“),)
def setdevices („deltaMessagePython“):
System_Status = deltaMessagePython ['SystemStatus'] Rele_Status = deltaMessagePython ['AC'] Led_Status = deltaMessagePython ['SisIlumi']
##### AC
jei Rele_Status == 1: gpio.digital_write (RELE, GPIO. HIGH)
jei Rele_Status == 0:
gpio.digital_write (RELE, GPIO. LOW)
##### Sistema de Iluminacao
jei Led_Status == 1: gpio.digital_write (LED, GPIO. HIGH) jei 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 - Temperatūra gpio.digital_write (GPIO_CS, GPIO. HIGH) adcout = (r [1 [1] << 8) & 0b1100000000 adcout = adcout | (r [2] ir 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 - šviesumas gpio.digital_write (GPIO_CS, GPIO. HIGH) adcoutldr = (r [1] << 8) & 0b1100000000 adcoutldr = adcoutldr | (r [2] ir 0xff) adcoutldr = str (adcoutldr) dabar = datetime.utcnow () now_str = now.strftime ('%Y-%m-%dT%H:%M:%SZ') temperatura = "{:.2f} ". Format (adc_temp) payload_temp = '{" state ": {" nori ": {" 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):
system_status = 1
nors tiesa:
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
# Pasirinktinis šešėlio atšaukimas
def customShadowCallback_Delta (self, payload, responseStatus, token): print ("Gautas delta pranešimas:") ### payload update script payloadDict = json.loads (payload) deltaMessage = json.dumps (payloadDict ["state"]) print "DELTA MESSAGE %s" %deltaMessage ### Prašymas atnaujinti pranešamą būseną 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
####### Dalyko apibrėžimas
# AWS IoT sertifikatu pagrįstas ryšys
myMQTTClient = AWSIoTMQTTClient ("DBpyAWS1116") myMQTTClient.configureEndpoint ("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/home/lin/s/"/shared/root/lin/), "/home/linaro/shared/AWS/" SUA CHAVE "-private.pem.key", "/home/linaro/shared/AWS/" SEU CERTIFICADO "-certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (- 1) # Begalinis neprisijungęs paskelbti eilėje myMQTTClient.configureDrainingFrequency (2) # Drenažas: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 sek. MyMQTTClient.configureMQTTOperationTimeout (5) #t coisajsb "," prijungtas ", 0)
########################
####### Šešėlių apibrėžimas
# Init AWSIoTMQTTShadowClient
myAWSIoTMQTTShadowClient = Nėra myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient ("DBpyAWS1116") myAWSIoTMQTTShadowClient.configureEndpoint ("SEU END-POINT.us-west-2TSair.amcow.info 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 sek.
# Prisijunkite prie AWS IoT
myAWSIoTMQTTShadowClient.connect ()
# Sukurkite įrenginįShadow su nuolatine prenumerata
deviceShadowHandler = myAWSIoTMQTTShadowClient.createShadowHandlerWithName ("DBpyAWS1116", tiesa) shadowCallbackContainer_Bot = shadowCallbackContainer (deviceShadowHandler)
# Klausykitės deltų
deviceShadowHandler.shadowRegisterDeltaCallback (shadowCallbackContainer_Bot.customShadowCallback_Delta)
#########################
myMQTTClient.publish ("$ aws/things/DBpyAWS1116/shadow/update", '{"state": {"nori": {"SystemStatus": 1, "SisIlumi": 0, "AC": 0, "Garagem": „Fechada“, „Temperatura“: 25, „Luminosidade“: 123}}} ', 0)
jei _vardas_ == "_main_":
su GPIO (smeigtukai) kaip gpio: paleisti (gpio)
6 žingsnis: Baigimas
Após ter concluido os passos anteriores, deve-se inicializar o system executando o código fornecido no passo 5 e inicializar o app através do Ionic, usando o comando Ionic serve.
Norėdami išspręsti problemą, rekomenduokite naudoti MQTT kliento testą, kad atliktumėte AWS, patikrinkite, ar jis yra patikimas ir kaip žiniatinklio autorius, norėdami pažvelgti į drakono lentą, kad gautumėte AWS debesies formą: