Inhoudsopgave:

Irrigações Automatizadas Com Web Service Utililizando Python - Ajarnpa (met afbeeldingen) - Ajarnpa
Irrigações Automatizadas Com Web Service Utililizando Python - Ajarnpa (met afbeeldingen) - Ajarnpa

Video: Irrigações Automatizadas Com Web Service Utililizando Python - Ajarnpa (met afbeeldingen) - Ajarnpa

Video: Irrigações Automatizadas Com Web Service Utililizando Python - Ajarnpa (met afbeeldingen) - Ajarnpa
Video: Intelligent Smart Zone Based Vehicle Speed Control System Using Arduino and RF Transmitter/Receiver 2024, November
Anonim
Irrigaçes Automatizadas Com Web Service Utililizando Python
Irrigaçes Automatizadas Com Web Service Utililizando Python

Neste projeto iremos desenvolver um sistema the 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 en condição da planta (seca/molhada). Alguns desses dados são obtidos localmente, enquanto outros são obtidos por meio de um Web Service conectado à uma estação meteorologica (No cao, estamos utilizando a da Faculdade de Engenharia de Sorocaba). Aanvragen, beschikbaar gestelde vragen en een webbasis van ThingSpeak.

Stap 1: Hardwaregebruik

Hardwaregebruik
Hardwaregebruik

Gebruikt voor een construção deste projeto:

1x Qualcomm Dragonboard 410c

1x Grove Seed Sensor Mezzanine

1x Waterzaadsensor

1x IMU 10OF Grove-sensor v1.0

1x Zonlicht Grove-sensor v1.0

1x muis USB

1x Teclado USB

1x Monitor

1x Cabo-HDMI

1x Adaptador HDMI-VGA

Acesso à dados da estação meteorologica FACENS

Stap 2: Montagem Do Hardware

Montagem Do Hardware
Montagem Do Hardware

Sluit een plaats aan op een Sensor Mezzanine à dragonboard, execute a ligação de acordo com o esquemático anterior, sendo:

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

2: +5V aansluiting oa Vcc op IMU-10DOF.

3: +5V en Gnd-aansluitingen en pinos correspondenten met Watersensor.

4: GND IMU-10DOF.

5: SDA/SCL-verbinding en pino-correspondentie met IMU-10.

6: Pino Sig do Watersensor aangesloten op pino 2.

Stap 3: Firmware Atmega328

Através da Sensors Mezzanine, met mogelijke toegang tot microcontrolador Atmega328, of mesmo utilizado em plataformas Arduíno, en programma-lo diretamente, utilizando a IDE Arduíno installatie op DragonBoard. Vale ressaltar que a Mezzanine and a DragonBoard em conjunto possuem todo os periféricos necessários for a programação en gravação firmware no microcontrolador.

O firmware embarcado é responsável por realizar as leituras dos sensores, gerenciando os protocolos de comunicação en operaço dos mesmos, en após aquisição dos dados, os encaminha via porta serial para a DragonBoard.

*Pode ser necessario a inclusão das bibliotecas utilizadas no firmware. Elas podem ser encontradas em:

imu-10DOF

Zonlichtsensor

O firmware utilizado pode ser encontrado aqui of aqui:

Stap 4: Programmeer Em Python

Programma Em Python
Programma Em Python

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

import urllib2, json #para pegar os dados da estacaoimport time #para o time.sleep() import serial #para o Arduino import paho.mqtt.publish as publish #para publicar import psutil #para configurar of 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 (geen 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 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'. Dit is een variatie op een URL-JSON, een begin en een begin met 'terwijl', een herhaling van een herhaling van een lus. O próximo passo é abrir o URL gebruikt een 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. Se o programmaa conseguir abrir a URL dentro do tempo do timeout, o programmaa irá realizar a função 'comJSON' mencionada anteriormente. Caso não consiga abrir a URL no tempo estipulado, realiza-se a função 'semJSON'. Ambos als 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' en een função derivada van 'comJSON'. Iremos expliciet een 'comJSON'

while(1): jsonurl = None #Inicializa a varivavel como None print 'Passo:', j print 'Atualizando dados' try: jsonurl = urllib2.urlopen(url, timeout = 5) #tenta abrir of url em no máximo 5 segundos als jsonurl niet None is: print 'Dados atualizados' comJSON(jsonurl) #Se conseguiu abrir o URL, mostra todos os dados behalve: if jsonurl is None: print 'Erro ao atualizados dados' semJSON() #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) pass j += 1 print '---------------------------------- -------------------------------------------------- --------------------------------------------\n' time.sleep (1)

Na primeira linha da função 'comJSON', recebemos todos os dados da URL ja abertos numa variável 'dados'. Het is mogelijk om gebruik te maken van Arrays, dat wil zeggen een aantal gebruikers ('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 en jogando as Strings convertidas dentro de variáveis e, então, mostrando esses dados. Recebidos os dados do Arduíno, receberemos os dados da estação, simplesmente acessando os sensores específicos dentro do objeto 'dados' (por exemplo '['ReturnDataSet']['sens_aver_6_5]') most dados e teestão's.

def comJSON(jsonurl): #envia todos os dados dados = json.loads(jsonurl.read()) #carrega os dados JSON da page aberta #Arduino ard = serial. Serial('/dev/tty96B0', 115200) # initialize 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())

druk "\nArduino" af

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 'Gegevens:', gegevens

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

#Converteren

vel_vento = decimaal. Decimaal(vel_vento.rstrip()) umidade = decimaal. Decimaal(umidade.rstrip())

O próximo passo é enviar todos esses dados coletados. Para isso, precisamos colocar a ID do canal, a Chave de Escrita e o Host em variáveis, além de configurar o useUnsecuredTCP, useUnsecuredWebsockets en 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) en então tentar publicar os dados no servidor usando 'publish. single(topic, payload=tPayload, hostname=mqttHost, port=tPort, tls=tTLS, transport=tTransport)'. Een função então acaba e retorna para o loop principal.

#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" #Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" #configuraçests de comunicaço = useUnsecuredSpeak "tcp" tPort = 1883 tTLS = Geen indien useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Geen indien useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs':"/etc/sca-l/ certificates.crt", 'tls_version':ssl. PROTOCOL_TLSv1} tPort = 443 topic = "channels/" + 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 dados' probeer: publish.single(topic, payload=tPayload, hostname=mqttHost, port=tPort, tls=tTLS, transport=tTransport) #Envia os dados time.sleep(0.5) print 'Dados enviados' behalve: print 'Erro ao enviar dados'

Stap 5: Configurando O-webservice

Configurando O-webservice
Configurando O-webservice

Voor het gebruik van websites en webservices, gebruikt u een platforma-ThingSpeak. Para tal, entramos geen site thingspeak.com en criamos uma conta. U kunt inloggen op de lijst met menu's en menu's -> Cannais -> Meus Cannais en clicamos no botão "Novo Canal". Ao clicar, escolhemos o nome do Canal, escrevemos uma descrição para ele, en decidimos quantos dos 8 campos possíveis utilizaríamos. Geen caso, gebruik 7.

Oa criar um canal, é gerado um ID do Canal, uma Chave de Escrita en uma Chave de Leitura. O ID do Canal se encontra abaixo do nome do canal e a Chave de Escrita na aba "Chaves". Para que o código Python envie als informações obtidas para o canal é, necessário configurá-lo ao ID do Canal:

channelID = "Insira of ID do Canal aqui"

E também com a Chave de Escrita:

apiKey = "Insira a Chave de Escrita"

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

useUnsecuredTCP = True

useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" if useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Geen indien useUnsecuredWebsockets: tTransport = "websockets" gebruik TLSPort = websockets" tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt", 'tls_version':ssl. PROTOCOL_TLSv1} tPort = 443 topic = "channels/" + channelID + "/publish/" + API sleutel

Para que a aplicação web realmente receba, por exemplo, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), é necessario 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(data) + "&field6=" + str(vel_vento) + "&field7=" + str(umidade)

Het is mogelijk om de programma's voor het uitvoeren van programma's en Python, de uitvoerbare documenten en het uitvoeren van de programma's voor het uitvoeren van programma's en voor webservices te downloaden. No ThingSpeak, een mogelijke realizar om te controleren op grafische afbeeldingen.

Aanbevolen: