Turinys:

„Irrigações Automatizadas Com Web Service“„Utilizando Python“: 5 žingsniai (su paveikslėliais)
„Irrigações Automatizadas Com Web Service“„Utilizando Python“: 5 žingsniai (su paveikslėliais)

Video: „Irrigações Automatizadas Com Web Service“„Utilizando Python“: 5 žingsniai (su paveikslėliais)

Video: „Irrigações Automatizadas Com Web Service“„Utilizando Python“: 5 žingsniai (su paveikslėliais)
Video: Become A Master Of SDXL Training With Kohya SS LoRAs - Combine Power Of Automatic1111 & SDXL LoRAs 2024, Liepa
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 atmosferica, temperatura do ar, incidência UV, velocidade do vento e condição da planta (seca/molhada). Alguns desertas dados são obtidos localmente, enquanto outros são obtidos por meio de um Web Service conectado à uma estação meteorológica (No caso, estamos utilizando a da Faculdade de Engenharia de Sorocaba). Após adquiridos, os dados serão disponibilizados em uma aplicação web baseada em ThingSpeak.

1 žingsnis: aparatinės įrangos naudojimas

Techninės įrangos naudojimas
Techninės įrangos naudojimas

Naudojimasis konstrukcijos projektavimui:

1x „Qualcomm Dragonboard 410c“

1x „Grove Seeed Sensor Mezzanine“

1x vandens matymo jutiklis

1x IMU 10OF griovelio jutiklis v1.0

1x „Sunlight Grove Sensor v1.0“

1x USB pelė

1x „Teclado USB“

1x monitorius

1x HDMI kabelis

1x HDMI-VGA adapteris

Aceso à dados da estação meteorologija FACENS

2 žingsnis: Montuokite aparatūrą

Montavimas su aparatūra
Montavimas su aparatūra

Apskaičiuokite vietą tarp jutiklio tarpinio sluoksnio ir drakono lentos, atlikite priekinę akordo jungtį arba priekinę priekinę dalį, siųskite:

1: „Conexão directta entre“arba jutiklis „Groove Sunlight v1.0“.

2: +5 V jungtis prie Vcc iki IMU-10DOF.

3: +5V e Gnd conectados aos pinos korespondentai daro vandens jutiklį.

4: GND IMU-10DOF.

5: SDA/SCL, suderinamas su IMU-10.

6: „Pino Sig do Water“jutiklis, prijungtas prie 2.

3 žingsnis: „Atmega328“programinė įranga

„Mezzanine“jutiklių jutikliai, turintys mikrovaldiklį „Atmega328“, „Arduíno“plačiaformos panaudojimo galimybės, tiesioginė programa ir „IDE Arduíno“įdiegimas naudojant „DragonBoard“. Vale ressaltar que a Mezzanine and a DragonBoard em conjunto possuem do to os periféricos requiredary on a programção and gravação do firmware no microcontrolador.

Ar programinės aparatinės įrangos embarcado ir atsakas į realizavimą kaip leituras dos sensores, gerenciando os protokolus de comunicação e operação dos mesmos, ir após and aquisição dos dados, os encaminha via porta serial of a DragonBoard.

*Prireikus, kad būtų įtraukta biblioteka, naudojama ne programinė įranga. Elas podem ser encontradas:

imu-10DOF

Saulės šviesos jutiklis

O programinės aparatinės įrangos naudojimas naudojant „encontrado aqui“arba „aqui“:

4 žingsnis: „Python“programa

Python programa
Python programa

Para o programa criado, foram requiredários os seguintes import: „urllib2“, „json“, „time“, „serial“, „paho.mqtt.publish“, „psutil“ir „decimal“. Foram definidos duas funções ('comJSON' e 'semJSON') que serão explicadas mais tarde.

importuoti urllib2, json #para pegar os dados da estacaoimport time #para o time.sleep () importuoti seriją #para o „Arduino“importuoti paho.mqtt.publish as paskelbti #para publicar import psutil #para configurar o url import decimal #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 vará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 varável 'jsonurl' como 'None'. Esta vará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. Jei norite, kad URL būtų rodomas kaip naudingas „urllib2.urlopen (url)“, jei norite, spustelėkite skirtuką „timeout = X“, atsiųskite X uma quantidade em segundos limite for URL ser aberto. Jei norite, kad programa pašalintų URL, kurį reikia atlikti naudojant skirtąjį laiką, o programa gali realizuoti „comJSON“meniu. Caso não consiga panaikina URL be tempo estipulado, supranta, kad yra įdomus „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' ir uma função derivada de 'comJSON'. „Iremos“paaiškino „comJSON“

nors (1): jsonurl = Nėra #Inicializa a varivavel como Nėra spausdinimo „Passo:“, j print „Atualizando dados“pabandykite: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos jei „jsonurl“nėra Nėra: spausdinkite „Dados atualizados“comJSON (jsonurl) #Se conseguiu abrir o URL, mostra todos os dados, išskyrus: jei jsonurl yra Nėra: spausdinkite „Erro ao atualizar dados“semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) pass j += 1 print “---------------------------------- -------------------------------------------------- -------------------------------------------- / n 'laikas.miegoti (1)

Na primeira linha da função 'comJSON', recebemos 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 convertids dentro de variáveis e, então, mostrando esses dados na tela. Recebidos os dados do Arduíno, receberemos os dados da estação, simplesmente acessando os sensores específicos dentro do objeto 'dados' (por examplelo ['ReturnDataSet'] ['sens_aver_6_5]') ir 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 ().strip ()) ardUV = plūdė (ard.readline (). rstrip ())

spausdinti „\ 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']

spausdinti „Duomenys:“, duomenys

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

#Konvertas

vel_vento = dešimtainis. Dešimtainis (vel_vento.rstrip ()) umidade = dešimtainis. Dešimtainis (umidade.rstrip ())

O próximo passo é enviar todos esses dados coletados. Taip pat galite tiksliai nustatyti, ar ID yra kanalas, Chave de Escrita e o Host ir įvairūs, konfigūruoti arba naudotiUnsecuredTCP, useUnsecuredWebsockets e useSSLWebsockets (usamos True, False, False). Criamos mais uma vará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. vienas (tema, naudingoji apkrova = tPayload, pagrindinio kompiuterio pavadinimas = mqttHost, port = tPort, tls = tTLS, transport = tTransport) “. A função então acaba e retorna para o loop principas.

#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 = Nėra, jei useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Nėra, jei useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/etc/ssl/ sertifikatai.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 tema =" kanalai/" + kanalo ID +"/paskelbti/" + apiKey #Cria variavel com o 'caminho' para o canal tPayload =" field1 = " + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (duomenys) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade) #Organiza todas as variaveis em uma String para ser enviado print 'Enviando dados' try: publis.single (tema, naudingoji apkrova = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0.5) print 'Dados enviados', išskyrus: print 'Erro ao enviar dados'

5 veiksmas: sukonfigūruokite „O Web Service“

„Configurando O Web Service“
„Configurando O Web Service“

Norėdami pavydėti žiniatinklio tarnybos, naudokite „ThingSpeak“platformą. Para tal, entramos nėra svetainės thingspeak.com ir criamos uma conta. Após a criação e login na 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. Nėra kazino, utilizamos 7.

Ao criar um canal, e gerado um ID do Canal, uma Chave de Escrita ir uma Chave de Leitura. Kanalo ID yra enkancra abaixo do nome do canal ir Chave de Escrita su „Chaves“. Para que o código Python envie as informationções obtidas para o canal é, requiredário configurá-lo ao ID do Canal:

channelID = "Insira o ID do Canal aqui"

„Chave de Escrita“tambemas:

apiKey = "Insira ir Chave de Escrita"

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

useUnsecuredTCP = Tiesa

useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" if useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Nėra, jei useUnsecuredWebsockets: tTransport = "websoles" tfsport websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificate.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels/" + channelID +"/paskelbti/" + apiKey

Para que a aplicação web realmente receba, por examplelo, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), e requiredario 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 (duomenys) + "& field6 =" + str (vel_vento) + "& field7 =" + str (drėgnas)

„Tendo vinculado todos os dados do Canal“- programa „Python“, geriausia vykdytoja arba kodavimo programa, skirta tėvams, escolhidos ir enviados ao Web Service. No ThingSpeak, e realus realizar todo o monitoramento através de gráficos.

Rekomenduojamas: