Πίνακας περιεχομένων:

Irrigações Automatizadas Com Web Service Utilizando Python: 5 βήματα (με εικόνες)
Irrigações Automatizadas Com Web Service Utilizando Python: 5 βήματα (με εικόνες)

Βίντεο: Irrigações Automatizadas Com Web Service Utilizando Python: 5 βήματα (με εικόνες)

Βίντεο: Irrigações Automatizadas Com Web Service Utilizando Python: 5 βήματα (με εικόνες)
Βίντεο: Become A Master Of SDXL Training With Kohya SS LoRAs - Combine Power Of Automatic1111 & SDXL LoRAs 2024, Ιούλιος
Anonim
Irrigações Automatizadas Com Web Service Utilizando Python
Irrigações Automatizadas Com Web Service Utilizando Python

Neste projeto iremos desenvolver um sistema 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 desses dados são obtidos localmente, enquanto outros são obtidos for meio de um Web Service conectado and uma ãuma estação meteorológica (No caso, estamos utilisando a da Faculdade de Engenharia de Sorocaba). Após adquiridos, os dados serão disponibilizados em uma aplicação web baseada em ThingSpeak.

Βήμα 1: Χρήση υλικού

Χρήση υλικού
Χρήση υλικού

Χρησιμοποιήστε το για την κατασκευή ενός προορισμού:

1x Qualcomm Dragonboard 410c

Ημιώροφος 1x Grove Seeed Sensor

Αισθητήρας 1x νερού

1x IMU 10OF Grove Sensor v1.0

1x Sunlight Grove Sensor v1.0

1x USB ποντικιού

1x Teclado USB

1x οθόνη

1x Cabo HDMI

1x Adaptador HDMI-VGA

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

Βήμα 2: Montagem Do Hardware

Υλικό Montagem Do
Υλικό Montagem Do

Após conectar a placa 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 conectado ao Vcc do IMU-10DOF.

3: +5V e Gnd conectados aos pinos ανταποκριτές do Water sensor.

4: GND IMU-10DOF.

5: SDA/SCL conectado ao pinorespondente do IMU-10.

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

Βήμα 3: Firmware Atmega328

Através da Sensors Mezzanine, και έχετε τη δυνατότητα να χρησιμοποιήσετε τον μικροελεγκτή Atmega328, ή να χρησιμοποιήσετε τις πλατφόρμες Arduíno, και να λάβετε οδηγίες, να χρησιμοποιήσετε ένα IDE Arduíno instalada στο DragonBoard. Μπορείτε να κάνετε μετατροπές στο Mezzanine και a DragonBoard που μπορούν να συνδεθούν με προγράμματα και μηχανισμούς χωρίς μικροελεγκτή.

Από το υλικολογισμικό που αποκτά απάντηση για την πραγματοποίηση των δεδομένων σας, μπορείτε να χρησιμοποιήσετε το πρωτόκολλο για την επικοινωνία και τη λειτουργία των μηνυμάτων, να κάνετε μια εγγραφή στο δίκτυό σας, να συνδεθείτε μέσω της σειριακής πύλης για το DragonBoard.

*Πραγματοποιήστε αναγκαία χρήση βιβλιοθηκών χωρίς χρήση υλικολογισμικού. Elas podem ser encontradas em:

imu-10DOF

Αισθητήρας ηλιακού φωτός

Το υλικολογισμικό χρησιμοποιεί τον κωδικό πρόσβασης για το encontrado aqui ou aqui:

Βήμα 4: Programação Em Python

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

Para o programa criado, foram needários os seguintes εισαγωγές: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'δεκαδικό'. 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.sleep () serial import #para o Arduino import paho.mqtt. δημοσίευση ως δημοσίευση #para publicar import psutil #para configurar o url import δεκαδικό #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'), χρησιμοποιήστε '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 programa

Καταχωρήστε όχι 'ενώ (1)', inicializamos a variável 'jsonurl' como 'None'. Εκτός από την απόκτηση μιας διεύθυνσης URL JSON, είναι δυνατή η είσοδος σε ένα "ενώ", θα πρέπει να επαναφέρετε και να επαναλάβετε το βρόχο. Μπορείτε να χρησιμοποιήσετε μια διεύθυνση URL ή να χρησιμοποιήσετε μια διεύθυνση 'urllib2.urlopen (url)', να υποβάλετε μια παράμετρο για το 'timeout = X', να στείλετε ποσοτικά λίγα βήματα για το URL και να χρησιμοποιήσετε. Μπορείτε να παρακολουθήσετε μια διεύθυνση URL για να κάνετε ένα χρονικό όριο, ή να πραγματοποιήσετε μια λειτουργία προώθησης «comJSON». Μπορείτε να χρησιμοποιήσετε μια διεύθυνση URL χωρίς ρυθμό, να πραγματοποιήσετε μια λειτουργία «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' ή uma função derivada de 'comJSON'. Iremos explicar somente a 'comJSON'

ενώ (1): jsonurl = Καμία #Inicializa a varivavel como Καμία εκτύπωση 'Passo:', j print 'Atualizando dados' try: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos εάν το jsonurl δεν είναι Κανένα: εκτύπωση 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, mostra todos os dados εκτός από: αν το jsonurl δεν είναι: print 'Erro ao atualizar dados' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) pass j += 1 print '---------------------------------- ------------------------------------------------------ ---------------------------------------------- / n 'ώρα. ύπνος (1)

Πρώτα απ 'όλα, μπορείτε να χρησιμοποιήσετε το' comJSON ', να λάβετε πληροφορίες για το δίκτυό σας από τη διεύθυνση URL και να λάβετε περισσότερες πληροφορίες για το' 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 convertidas 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 exemplo '[' ReturnDataSet '] [' sens_aver_6_5] ') e então mostramos estes nomo Το

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 = float (ard.readline (). rstrip ())

εκτύπωση "\ nArduino"

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

#Estacao

εκτύπωση '\ nJSON' εκτύπωση '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']

εκτύπωση 'Δεδομένα:', δεδομένα

εκτύπωση 'Velocidade do Vento:', vel_vento, 'm/s' print 'Umidade do ar:', umidade, '%'

#Μετατροπή

vel_vento = δεκαδικό. Δεκαδικό (vel_vento.rstrip ()) umidade = δεκαδικό. Δεκαδικό (umidade.rstrip ())

O próximo passo é enviar todos esses dados coletados. Παραδείγματος χάριν, precisamos colocar a ID do canal, a Chave de Escrita e o Host em variáveis, além de configurar o useUsecuredTCP, useUnsecuredWebsockets και 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) και então tentar publicar os dados no servidor usando 'δημοσιεύουν. ενιαίο (θέμα, ωφέλιμο φορτίο = tPayload, όνομα κεντρικού υπολογιστή = mqttHost, θύρα = tPort, tls = tTLS, μεταφορά = tTransport) ». Ένα 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ções de comunicaçescu = tr "tcp" tPort = 1883 tTLS = Καμία αν χρησιμοποιείταιUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Καμία αν χρησιμοποιείταιSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs'://etc/sl certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" κανάλια/" + channelID +"/δημοσίευση/" + apiKey #Cria variavel com o 'caminho' para o canal tPayload =" field1 = " + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (δεδομένα) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade) #Organiza todas as variaveis em uma String para ser enviado print 'Enviando dados' try: published.single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0.5) εκτύπωση 'Dados enviados' εκτός από: print 'Erro ao enviar dados'

Βήμα 5: Configurando O Web Service

Configurando O Web Service
Configurando O Web Service

Χρησιμοποιήστε το Web Service, χρησιμοποιήστε μια πλατφόρμα ThingSpeak. Παράλληλα, δεν υπάρχει ιστότοπος thingspeak.com και criamos uma conta. Απαιτείται ένας κωδικός σύνδεσης και σύνδεσης, χωρίς διευκρινίσεις ή για να δείτε τα μενού -> Canais -> Meus Canais και entico clicamos χωρίς botão "Novo Canal". Ao clicar, escolhemos o nome do Canal, escrevemos uma descrição para ele, e então decidimos quantos dos 8 campos possíveis utilizaríamos. No 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 que o código Python envie as informações obtidas para o canal é, needário configurá-lo ao ID do Canal:

channelID = "Insira o ID do Canal aqui"

E também com a Chave de Escrita:

apiKey = "Insira a Chave de Escrita"

Όλες οι ρυθμίσεις του καναλιού, μπορούν να χρησιμοποιηθούν για να διαμορφώσουν τις παραμέτρους χωρίς εφαρμογή Python app.py:

useUnsecuredTCP = Αλήθεια

useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" εάν useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Καμία αν useUnsecuredWebsockets: tTportTsTLT = TSport = "tTportport" websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" κανάλια/" + channelID +"/δημοσίευση/" + apiKey

Για να εφαρμόσετε μια πραγματική ιστοσελίδα, μπορείτε να χρησιμοποιήσετε, για παράδειγμα, για να δείξετε τη θερμοκρασία 2 campo (για τους θερμοκρασίες της θερμοκρασίας), είναι απαραίτητη η ένδειξη "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 (δεδομένα) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade)

Τελειώστε το todos os dados do Canal à programação em Python, basta εκτελεστή ή código que todos os dados escolhidos são enviados ao Web Service. No ThingSpeak, είναι πιθανό να πραγματοποιήσετε το to monitoramento através de gráficos.

Συνιστάται: