Talaan ng mga Nilalaman:

Irrigações Automatizadas Com Web Service Utilizando Python: 5 Hakbang (na may Mga Larawan)
Irrigações Automatizadas Com Web Service Utilizando Python: 5 Hakbang (na may Mga Larawan)

Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 Hakbang (na may Mga Larawan)

Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 Hakbang (na may Mga Larawan)
Video: Become A Master Of SDXL Training With Kohya SS LoRAs - Combine Power Of Automatic1111 & SDXL LoRAs 2024, Hulyo
Anonim
Irrigações Automatizadas Com Web Service Utilizando Python
Irrigações Automatizadas Com Web Service Utilizando Python

Mag-isip ng mga proyekto sa pagsubaybay para sa 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). Ang mga Alguns ay naghahain ng mga lokal na lokasyon, enquanto outros são obtidos por meio de um Web Service na kumonekta sa lahat ng mga ito meteorológica (Walang caso, estamos utilizando a da Faculdade de Engenharia de Sorocaba). Ang mga adquiridos, ay naging sero disponibilizados em uma aplicação web baseada em ThingSpeak.

Hakbang 1: Hardware Utilizado

Hardware Utilizado
Hardware Utilizado

Gumagamit para sa isang construção deste projeto:

1x Qualcomm Dragonboard 410c

1x Grove Seeed Sensor Mezzanine

1x Sensor na Nakita ng Tubig

1x IMU 10OF Grove Sensor v1.0

1x Sunlight Grove Sensor v1.0

1x Mouse USB

1x Teclado USB

1x Monitor

1x Cabo HDMI

1x Adaptador HDMI-VGA

Acesso à maging da estação meteorológica FACENS

Hakbang 2: Montagem Do Hardware

Montagem Do Hardware
Montagem Do Hardware

Nakikipag-ugnay sa isang placa Sensor Mezzanine sa dragonboard, nagsasagawa ng isang ligação de acordo com o esquemático anterior, sendo:

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

2: + 5V conectado ao Vcc gawin IMU-10DOF.

3: + 5V e Gnd conectados aos pinos correspondentes gawin Water sensor.

4: GND IMU-10DOF.

5: SDA / SCL conectado ao pino correspondente gawin IMU-10.

6: Pino Sig do Water sensor conectado ao pino 2.

Hakbang 3: Firmware Atmega328

Ang mga sensor ng Sensor Mezzanine, ay maaari itong magamit sa microcontrolador Atmega328, o mesmo utilizado em plataformas Arduíno, e programá-lo diretamente, gamitin ang isang IDE Arduíno installada na DragonBoard. Mag-isip ng isang Mezzanine at isang DragonBoard upang maitaguyod ang mga ito sa pamamagitan ng isang programa upang mag-firmware na walang microcontrolador.

O firmware embarcado é responsável por realizar as leituras dos sensores, gerenciando os protocolos de comunicação and operação dos mesmos, e aposs a aquisição dos maging, os encaminha via porta serial para sa isang DragonBoard.

* Pode ser kinakailangan ng isang inclusão das bibliotecas utilizadas walang firmware. Elas podem ser encontradas em:

imu-10DOF

Sunlight Sensor

O firmware na gumagamit ng pode ser encontrado aqui ou aqui:

Hakbang 4: Programação Em Python

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

Para sa programa criado, foram necessários 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.

import urllib2, json #para pegar os dados da estacaoimport time #para o time.s Sleep () import serial #para o Arduino import paho.mqtt.publish as publish #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 (walang caso estamos gravando na variável 'url'). Sa loob ng isang taon, inisyado ang mga pangalan ('i' e 'j'), gamitin ang 'i' para pegar os maging 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 magiging mais atuais da estação

j = 0 #Passo gawin ang programa

Entrando no 'habang (1)', inicializamos a variável 'jsonurl' como 'Wala'. Mag-isip ng isang link sa isang URL JSON, portanto ao inicializarmos ela no início gawin 'habang', maaari mong i-reset ang ilan sa iyong mga repetirmos o loop. O próximo passo é abrir o URL usando a função 'urllib2.urlopen (url)', podendo também adicionar um argumento 'timeout = X', sendo X uma quantidade em segundos limite para o URL ser aberto. Ang programa ay gagamitin ang isang URL na gagawa ng oras sa pag-timeout, o programa na makakatanggap ng isang kasiyahan na 'comJSON' na sumasalamin sa anteriormente. Caso não consiga abrir a URL no tempo estipulado, realiza-se a função 'semJSON'. Ang mga sumusunod na kasiyahan sa iyo, ay maaari kang magtawag ng isang tao ('comJSON' na nagsulat ng mga ito bilang isang estação, enquanto 'semJSON' não). Como 'semJSON' é uma função derivada de 'comJSON'. Iremos explicar somente a 'comJSON'

habang (1): jsonurl = Wala #Inicializa a varivavel como Wala naka-print 'Passo:', j print 'Atualizando dijadikan' try: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos kung ang jsonurl ay wala: i-print ang 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, mostra todos os dados maliban: kung ang jsonurl ay Wala: i-print ang 'Erro ao atualizar dijadikan' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) pass j + = 1 print '---------------------------------- ---- -------------------------------------------- / n 'oras.makatulog (1)

Na primeira linha da função 'comJSON', recebemos todos os magiging da URL já abertos numa variável 'magiging'. 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 convertidas dentro de variáveis e, então, mostrando esses magiging na tela. Recebidos os dados do Arduíno, receberemos os dados da estação, simplesmente acessando os sensores específicos dentro do objeto 'naging' (por exemplo '[' ReturnDataSet '] [' sens_aver_6_5] ') e entario mostramos estes novos maging na tela também.

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 ())

i-print ang "\ nArduino"

kung ardAgua == 1: i-print ang 'Molhado' iba pa: i-print ang '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 = naging ['ReturnDataSet'] ['f_date'] vel_vento = dados ['ReturnDataSet'] ['sens_aver_6_5'] umidade = dados ['ReturnDataSet'] ['sens_aver_19_507']

i-print ang 'Data:', data

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

#Converte

vel_vento = decimal. Desimal (vel_vento.rstrip ()) umidade = decimal. Desimal (umidade.rstrip ())

O próximo passo é enviar todos esses maging coletados. Para sa iyo, precisamos colocar isang ID do canal, isang Chave de Escrita e o Host em variáveis, al configure o useUnsecuredTCP, useUnsecuredWebsockets at gamitinSSLWebsockets (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 sa servidor (com todas as variáveis convertidas) e então tentar publicar os dados no servidor usando 'publish. solong (paksa, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) '. Ang isang função então acaba at retorna para sa loop prinsipal.

#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" # Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" # configurações de comunicação useUnsecuredTCP = True useUnsecueWebWebWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsite "tcp" tPort = 1883 tTLS = Wala kung useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Wala kung gagamitinSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/ etc / ssl / certs / ca- sertipiko.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 paksa =" channel / "+ channelID +" / publish / "+ 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 dijadikan' try: publish.single (paksa, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.s Sleep (0.5) print 'Dados enviados' maliban: i-print ang 'Erro ao enviar dijadikan'

Hakbang 5: Configurando O Web Service

Configurando O Serbisyo sa Web
Configurando O Serbisyo sa Web

Para sa mga sumusunod na serbisyo sa Web, gagamitin ang isang talata sa ThingSpeak. Para tal, entramos no site bagaypeak.com e criamos uma conta. Narito ang isang criação at pag-login, kung saan ay nasa loob ng menu -> Canais -> Meus Canais at enticio clicamos no botão "Novo Canal". Ao clicar, escolhemos o nome do Canal, escrevemos uma descrição para sa ele, e então decidimos quantos dos 8 campos posíveis utilizaríamos. Walang caso, utilizamos 7.

Ao criar um canal, é gerado um ID do Canal, uma Chave de Escrita e uma Chave de Leitura. O ID do Canal se encontra abaixo do nome do canal e a Chave de Escrita na aba "Chaves". Para sa mga ito sa Python envie bilang impormasyon na nakuha para sa kanal, kailangan mong i-configure ang ID sa Canal:

channelID = "Insira o ID do Canal aqui"

Ito ay isang Chave de Escrita:

apiKey = "Insira a Chave de Escrita"

Alem da conexão com o canal criado, também são kinakailangan na gawin ang mga configurações no código em Python app.py:

useUnsecuredTCP = Totoo

useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" kung useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Wala kung useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = websockets "tTLS = {'ca_certs':" / etc / ssl / certs / ca-sertipiko.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 paksa =" mga channel / "+ channelID +" / publish / "+ apiKey

Para sa isang aplicação web realmente receba, halimbawa, ang lakas ng Temperatura walang campo 2 (campo que escolhemos para sa isang Temperatura), kailangan mong tukuyin ang "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 (umidade)

Tendo vinculado todos os dados do Canal à programação em Python, basta executive o código que todos os magiging escolhidos são enviados ao Web Service. Walang ThingSpeak, ito ay posible upang makita ang monitor o pag-monitor.

Inirerekumendang: