Sisällysluettelo:

Irrigações Automatizadas Com Web Service Utilizando Python: 5 vaihetta (kuvilla)
Irrigações Automatizadas Com Web Service Utilizando Python: 5 vaihetta (kuvilla)

Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 vaihetta (kuvilla)

Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 vaihetta (kuvilla)
Video: Como Deixar o Código Python Rodando Automaticamente com o Computador Desligado 2024, Heinäkuu
Anonim
Irrigações Automatizadas Com Web Service Utilizando Python
Irrigações Automatizadas Com Web Service Utilizando Python

Neste projeto iremos desenvolver um system de monitoramento para plantações, que irá obter dados de umidade relativa do ar, pressão atmosférica, temperatura do ar, incidência UV, velocidade do vento e condição da planta (seca/molhada). Alguns etsii paikallisia paikallisia paikkoja, pyysi tarjouksia Web -palvelusta, joka on saatavana meteorologian (ei caso, estamos utilizando da da Faculdade de Engenharia de Sorocaba) avulla. Após adquiridos, os dados serão disponibilizados em uma aplicação web baseada em ThingSpeak.

Vaihe 1: Laitteiston käyttö

Laitteiston käyttö
Laitteiston käyttö

Käytettävissä projektin rakentamiseen:

1x Qualcomm Dragonboard 410c

1x Grove Seeed Sensor Mezzanine

1x vettä nähnyt anturi

1x IMU 10OF Grove Sensor v1.0

1x Sunlight Grove Sensor v1.0

1x USB -hiiri

1x Teclado USB

1x näyttö

1x Cabo HDMI

1x HDMI-VGA-sovitin

Aceso à dados da estação meteorológica FACENS

Vaihe 2: Asenna laitteisto

Laitteiston asennus
Laitteiston asennus

Após conectar a placa Sensor Mezzanine à dragonboard, suorita ligação de acordo com o esquemático anterior, lähetä:

1: Conexão direct suunta tai anturi Groove Sunlight v1.0.

2: +5 V: n liitäntä Vcc: lle IMU-10DOF.

3: +5V e Gnd conectados aos pinosrespondentes do Water sensor.

4: GND IMU-10DOF.

5: SDA/SCL-yhteys IMU-10: n kanssa.

6: Pino Sig do Water -anturi liitettynä ao pino 2.

Vaihe 3: Laiteohjelmisto Atmega328

Através da Sensors Mezzanine, joka on saatavana mikrokontrollerina Atmega328, tai mesmo hyödyntäminen ja plataformas Arduíno, ja ohjelma-lo directtamente, hyödyntäen IDE Arduíno -asennusta DragonBoardiin. Vale ressaltar que a Mezzanine ja a DragonBoard em conjunto possuem todo os periféricos välttämättömät ohjelmalle ja gravação tehdä laiteohjelmisto ilman mikrokontrolleria.

Jos laiteohjelmiston suojaus tai vastaus on toteutettu leituras dos sensores, gerenciando os protocolos de comunicação e operação dos mesmos, e após and aquisição dos dados, os encaminha via Porta Series on a DragonBoard.

*Pode on välttämätön, mukaan lukien bibliotecas utilizadas ilman laiteohjelmistoa. Elas podem ser encontradas em:

imu-10DOF

Auringonvalon anturi

O laiteohjelmiston käyttö, salauksen salaus, vesi tai vesi:

Vaihe 4: Programação Em Python

Ohjelma Em Python
Ohjelma Em Python

Para o programa criado, foram välttämättömyys os seguintes tuonti: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' ja 'decimal'. Foram definidos duas funções ('comJSON' e 'semJSON') que serão explicadas mais tarde.

tuoda urllib2, json #para pegar os dados da estacaoimport time #para o time.sleep () tuoda sarja #para o Arduino tuonti paho.mqtt.publish as publish #para publicar import psutil #para configurar o url tuonti desimaali #para converter

O primeiro passo é gravar em uma variável o endereço de onde serão obtidos os dados da Estação Meteorológica (no caso estamos gravando na variável 'url'). Em seguida, inicializamos duas variáveis ('i' e 'j'), utilizando 'i' para pegar os dados mais atuais do Array que iremos receber via JSON (como a posição mais recente da Array será a 49, inicializamos 'i' como) 49) e 'j' para contar quantas vezes o código já rodou.

url = "https://www.fieldclimate.com/api/CIDIStationData/GetLast?user_name=facens&user_passw=clima&station_name=002035C0" #Define o URL da estação

i = 49 #Para pegar os dados mais atuais da estação

j = 0 #Passo do ohjelma

Entrando no 'while (1)', inicializamos a variável 'jsonurl' como 'None'. Esta variável irá abrir a URL JSON, portanto ao inicializarmos ela no início do 'while', estamos então resetando ela toda vez que repetirmos o loop. Jos haluat käyttää URL -osoitetta tai käyttää hakua 'urllib2.urlopen (url)', podbed tammement, näytä argumentit 'timeout = X', lähetä X uma quantidade em segundos limit to URL ser aberto. Ohjelman seuraaminen voi poistaa URL -osoitteen, joka katkaisee aikakatkaisun, tai ohjelma voi toteuttaa toiminnon 'comJSON' mencionada anteriormente. Caso não consiga abrir URL no tempo estipulado, realise-se a função 'semJSON'. Ambos kuten funções são muito parecidas, tendo como diferença os dados da estação ('comJSON' irá mostrar e enviar os dados da estação, enquanto 'semJSON' não). Como 'semJSON' ja uma função derivada de 'comJSON'. Iremos selittää "comJSON"

while (1): jsonurl = Ei mitään #Inicializa a varivavel como Ei tulosta 'Passo:', j print 'Atualizando dados' try: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos jos jsonurl ei ole Ei mitään: tulosta 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, mostra todos os dados paitsi: jos jsonurl ei ole mitään: tulosta 'Erro ao atualizar dados' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) pass j += 1 print '---------------------------------- -------------------------------------------------- -------------------------------------------- / n 'time.sleep (1)

Ensisijainen linha da função 'comJSON', vastaanottaa todos os dados da URL da abertos numa variável 'dados'. Esta irá receber um objeto com duas Arrays, das quais iremos somente usar uma ('ReturnDataSet'). Realizada esta operação, iremos então inicializar o Serial do Arduíno e ler as linhas (readline ()) que o Arduíno está imprimindo e jogando as Strings convertida dentro de variáveis e, então, mostrando esses dados na tela. Vastaanota osados do Arduíno, vastaanotin osados da estação, yksinkertainen lisäys ja sensores específicos dentro do objeto 'dados' (por examplelo ['ReturnDataSet'] ['sens_aver_6_5]') ja então mostramos estes novos dad.

def comJSON (jsonurl): #envia todos os dados dados = json.loads (jsonurl.read ()) #carrega os dados JSON da página já aberta #Arduino ard = serial. Serial ('/dev/tty96B0', 115200) # inicializa a variavel que receberá os dados do Arduíno #Recebe os dados do Arduíno ardAgua = int (ard.readline (). rstrip ()) ardTemp = float (ard.readline (). rstrip ()) ardPres = int (ard.readline ().rstrip ()) ardUV = float (ard.readline (). rstrip ())

tulosta "\ nArduino"

if ardAgua == 1: print 'Molhado' else: print 'Seco' print 'Temperatura:', ardTemp, '*C' print 'Pressao:', ardPres, 'Pa' print 'Ultra-Violeta:', ardUV, ' lx '

#Estacao

print '\ nJSON' print 'URL:', jsonurl #Recebe os dados da estação data = dados ['ReturnDataSet'] ['f_date'] vel_vento = dados ['ReturnDataSet'] ['sens_aver_6_5'] umidade = dados ['ReturnDataSet'] ['sens_aver_19_507']

tulosta 'Data:', data

print 'Velocidade do Vento:', vel_vento, 'm/s' print 'Umidade do ar:', umidade, '%'

#Käännä

vel_vento = desimaali. desimaali (vel_vento.rstrip ()) umidade = desimaali. desimaali (umidade.rstrip ())

O próximo passo é enviar todos esses dados coletados. Paikka, tarkista kolokri ja ID -kanava, Chave de Escrita ja o Host eri vaihtoehdoilla, määritä asetukset tai käytäUnsecuredTCP, useUnsecuredWebsockets e useSSLWebsockets (usamos True, False, False). Criamos mais uma variável que irá guardar o 'caminho' para o canal, e uma outra para guardar, em String, o que será enviado para o servidor (com todas as variáveis convertidas) e então tentar publicar os dados no servidor usando 'public. single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) '. A função então acaba e retorna para o loop princip.

#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" #Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" #configurações de comunicação useUnuredSuckUp "tcp" tPort = 1883 tTLS = Ei mitään, jos useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Ei mitään, jos useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/etc/ssl/ certificate.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" kanavat/" + kanavatunnus +"/julkaise/" + apiKey #Cria variavel com o 'caminho' para o canal tPayload =" field1 = " + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (data) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade) #Organiza todas as variaveis em uma String para ser enviado print 'Enviando dados' try: publis.single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0.5) tulosta 'Dados enviados' paitsi: tulosta 'Erro ao enviar dados'

Vaihe 5: Määritä verkkopalvelu

Määritä verkkopalvelu
Määritä verkkopalvelu

Paranna kadehdus os dados obtidos ao Web Service -palveluun, jossa käytetään ThingSpeak -levyä. Para tal, entramos no site thingspeak.com and criamos uma conta. Apos a criação e login in contact, nos dirigimos ao cabeçalho de menus -> Canais -> Meus Canais e então clickamos no botão "Novo Canal". Ao clickar, escolhemos o nome do Canal, escrevemos uma descrição para ele, e então decidimos quantos dos 8 campos possíveis utilizaríamos. Ei kasinoa, käyttö 7.

Ao criar um -kanava, gerado um ID -kanava, Chave de Escrita ja Chave de Leitura. Kanavan ID -tunniste on suljettu kanavan ja Chave de Escritan välillä "Chaves". Para que o código Python envie as informações obtidas para o canal é, välttämätön konfiguraatio-lo ao ID do Canal:

channelID = "Insira tai ID do Canal aqui"

Tammikuu Chave de Escritassa:

apiKey = "Insira ja Chave de Escrita"

Além da conexão com o canal criado, também são needsárias outras configurações no código em Python app.py:

useUnsecuredTCP = Totta

useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" if useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Ei mitään, jos useUnsecuredWebsockets: tTransport = "websors tt websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificate.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" kanavat/" + kanavatunnus +"/julkaise/" + apiKey

Esimerkkinä, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), välttämätön osoitus o "field2 ="+variável_temperatura, como no código a seguir:

tPayload = "field1 =" + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (data) + "& field6 =" + str (vel_vento) + "& field7 =" + str (kosteus)

Tendo vinculado todos os dados do Canal à programção em Python, best executar or código que todos os dados escolhidos são enviados ao Web Service. No ThingSpeak, realisation realo todo o monitoramento através de gráficos.

Suositeltava: