Sisukord:

Irrigações Automatizadas Com Web Service Utilizando Python: 5 sammu (koos piltidega)
Irrigações Automatizadas Com Web Service Utilizando Python: 5 sammu (koos piltidega)

Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 sammu (koos piltidega)

Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 sammu (koos piltidega)
Video: Become A Master Of SDXL Training With Kohya SS LoRAs - Combine Power Of Automatic1111 & SDXL LoRAs 2024, November
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 soovib kohalikke kohalikke ja veebipõhiseid teenuseid, mis on loodud ilma meteoroloogiata. Após adquiridos, os dados serão disponibilizados em uma aplicação web baseada em ThingSpeak.

Samm: riistvara kasutamine

Riistvara kasutamine
Riistvara kasutamine

Rakenduse konstruktsiooni kasutamine:

1x Qualcomm Dragonboard 410c

1x Grove Seeed Sensor Mezzanine

1x vesi näinud andur

1x IMU 10OF Grove Sensor v1.0

1x Sunlight Grove Sensor v1.0

1x USB -hiir

1x Teclado USB

1x monitor

1x HDMI kaabel

1x HDMI-VGA adapter

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

Samm: riistvara montaaž

Montaaž riistvaraga
Montaaž riistvaraga

Pärast seda, kui konstrueeritakse plaat Andur Mezzanine draakonplaadil, käivitage sideme sidumine com o esquemático anterior, saatke:

1: Conexão directta entre and sensor Groove Sunlight v1.0.

2: +5 V ühendused Vcc-ga IMU-10DOF-i jaoks.

3: +5V e Gnd conectados aos pinosrespondentses do Veeandur.

4: GND IMU-10DOF.

5: SDA/SCL, mis on ühendatud IMU-10-ga.

6: Pino Sig do Veesensori ühendus ao pino 2.

Samm: püsivara Atmega328

Através da Sensors Mezzanine, mis on saadaval mikrokontrolleri Atmega328 abil, Arduíno platvormide kasutamine, programmide loogiline kasutamine ja IDE Arduíno paigaldamine DragonBoardile. Vale ressaltar que a Mezzanine and a DragonBoard to conjunto possuem todo os periféricos needs as programmeão and gravação do firmware no microcontrolador.

Olete püsivara embarcado ja reageerite realiseerimiseks leitide ja sensores, gerenciando os protokollides de comunicação e operação dos mesmos, e após and aquisção dos dados, and encaminha via porta serial as a DragonBoard.

*Pode on vajalik, kaasa arvatud biblioteka kasutamine ilma püsivara kasutamiseta. Elas podem ser encontradas em:

imu-10DOF

Päikesevalguse andur

O püsivara kasutusvõimalus, mis on varustatud entsüklopeediga või veevarustusega:

Samm 4: Programação Em Python

Programação Em Python
Programação Em Python

Para või programm criado, foram vajadused os seguintes import: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'decimal. Foram definidos duas funções ('comJSON' e 'semJSON') que serão explicadas mais tarde.

impordi urllib2, json #para pegar os dados da estacaoimport time #para o time.sleep () impordi seeria #para o Arduino import paho.mqtt.publish as avaldada #para publicar import psutil #para konfiguraator o URL import kümnendkoht #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 sera 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 programa

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. Kui kasutate URL -i, siis kasutage URL -i „urllib2.urlopen (url)”, lisage mõni argument „timeout = X”, saatke X -i kvantideed ja piirkonnad URL -i jaoks aberto. Programm võib aidata sulgeda URL -i, mis võimaldab teil aeguda, või programm on realiseeritav ja lõbus 'comJSON' mencionada anteriormente. Caso não consiga abrir URL no tempo estipulado, realise-se a função 'semJSON'. Ambos as 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' on fun função derivada de 'comJSON'. Iremos selgitab sõna „comJSON”

samas (1): jsonurl = puudub #Inicializa a varivavel como Puudub print 'Passo:', j print 'Atualizando dados' try: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos kui jsonurl ei ole Puudub: printige 'Dados atualizados' comJSON (jsonurl) #Se secguiu abrir o URL, mostra todos os dados, välja arvatud: kui jsonurl pole Puudutage: printige '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)

Peamine linha da função 'comJSON', vastuvõtud todos os dados da URL já abertos numa vará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 convertides dentro de variáveis e, então, mostrando esses dados na tela. Arduíno issi vastuvõtmine, vastuvõtmine osadesse ja estação, lihtne acessando os sensores específicos dentro do objeto 'dados' (por examplelo ['ReturnDataSet'] ['sens_aver_6_5]') e 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 ())

print "\ 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']

print 'Andmed:', andmed

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

#Konverteeri

vel_vento = kümnendkoht. Kümnendarv (vel_vento.rstrip ()) umidade = kümnendkoht.

O próximo passo é enviar todos esses dados coletados. Para, iseenesest, kolokar ja ID kanalil, Chave de Escrita ja o Host erinevates versioonides, konfiguratsiooni muutmine või useUnsecuredTCP, 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 'avaldada. üksik (teema, kasulik koormus = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) '. A funcã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 useUnuredSuck "tcp" tPort = 1883 tTLS = Puudub, kui useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Puudub, kui useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/etc/ssl/ cert.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels/" + channelID +"/publis// + apiKey #Cria variavel com o 'caminho' para o canal tPayload = "field1 =" + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (andmed) + "& 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) print 'Dados enviados', välja arvatud: print 'Erro ao enviar dados'

Samm: veebiteenuse konfigureerimine

Veebiteenuse seadistamine
Veebiteenuse seadistamine

Kui kadestate veebipõhist teenust, kasutage ThingSpeak platvormi. Para talu, entramos no site thingspeak.com ja criamos uma conta. Após 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. Kasiinot pole, utiliit 7.

Ao criar um kanal, gerado um ID kanal, Chave de Escrita ja Chave de Leitura. Kanali ID on encontra abaixo do nome do canal ja Chave de Escrita koos abiga "Chaves". Para que o código Python envie as information as obtidas para o canal é, requiredário configurá-lo ao ID do Canal:

channelID = "Insira või ID do Canal aqui"

Chave de Escrita tammik:

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 = Tõsi

useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" if useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Puudub, kui useUnsecuredWebsockets: tTransport = "websovers" websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-sertifikaadid.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels/" + channelID +"/avaldada/" + apiKey

Para que and a applicação web realmente receba, por examplelo, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), here must indicar 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 (andmed) + "& field6 =" + str (vel_vento) + "& field7 =" + str (niisutatud)

Tendo vinculado todos os dados do Canal in the programção em Python, best executar or código que todos os dados escolhidos são enviados ao Web Service. No ThingSpeak, realiseerige see või monitoramento através de gráficos.

Soovitan: