جدول المحتويات:

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 خطوات (بالصور)
فيديو: Como Deixar o Código Python Rodando Automaticamente com o Computador Desligado 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، temperature do ar، incidência UV، velocidade do vento e condição da planta (seca / molhada). Alguns desses dados solidos localmente، enquanto outros são getidos 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: استخدام الأجهزة

استخدام الأجهزة
استخدام الأجهزة

Foi useizado for a Construção deste projeto:

1x Qualcomm Dragonboard 410c

1x Grove Seeed Sensor Mezzanine

1x مستشعر رؤية المياه

1x IMU 10OF Grove Sensor v1.0

1x Sunlight Grove Sensor v1.0

1x ماوس USB

1x Teclado USB

1x مراقب

عدد 1 كابو HDMI

1 منفذ Adaptador HDMI-VGA

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

الخطوة 2: Montagem Do Hardware

مونتاجيم دو هاردوير
مونتاجيم دو هاردوير

Após conectar a placa Sensor Mezzanine à dragonboard ، قم بتنفيذ ligação de acordo com o esquemático الأمامي ، 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 مراسلون يفعلون مستشعر المياه.

4: GND IMU-10DOF.

5: SDA / SCL conectado ao pino مراسلة تفعل IMU-10.

6: Pino Sig do مستشعر المياه conectado ao pino 2.

الخطوة 3: البرامج الثابتة Atmega328

Através da Sensors Mezzanine ، يمكن الوصول إليه من خلال التحكم الدقيق Atmega328 ، أو استخدام الوسائط المتعددة في Arduíno ، أو البرنامج ، أو الدليل ، أو استخدام IDE Arduíno instalada na DragonBoard. Vale ressaltar que a Mezzanine e a DragonBoard مع إمكانية استخدام نظام التشغيل المسبق للبرامج والتطبيقات الثابتة بدون تحكم دقيق.

O حظر البرامج الثابتة é Responsável بواسطة realizar as leituras dos sensores، gerenciando os protocolos de comunicação e operação dos mesmos، e após aquisição dos dados، os encaminha عبر porta serial para a DragonBoard.

* يجب توفير البرامج الثابتة في المكتبة. Elas podem ser encontradas em:

IMU-10DOF

مستشعر ضوء الشمس

البرامج الثابتة useizado pode ser encontrado aqui ou aqui:

الخطوة 4: Programação Em Python

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

Para o programa criado، foram Requários os seguintes import: 'urllib2'، 'json'، 'time'، 'serial'، 'paho.mqtt.publish'، 'psutil' e 'decimal'. تعريف فورام 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 () import serial #para o Arduino import paho.mqtt.publish as publish #para publicar import psutil #para configurar o url import decimal #para converter

O premiro passo é gravar em uma variável o endereço de onde serão getidos os dados da Estação Meteorológica (no caso estamos gravando na variável 'url'). Em seguida ، inicializamos duas variáveis ('i' e 'j') ، 49).

url = "https://www.fieldclimate.com/api/CIDIStationData/GetLast؟user_name=facens&user_passw=clima&station_name=002035C0" #Define o URL da estação

أنا = 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 varável irá abrir a URL JSON، portanto ao inicializarmos ela no início do 'while'، estamos então resetando toda vez que repetirmos o loop. يمكنك استخدام عنوان URL الخاص بـ 'urllib2.urlopen (url)' ، podendo também adicionar umumentso 'timeout = X' ، Sendo X uma quantidade em segundos limite para o URL ser aberto. قم بتثبيت البرنامج على عنوان URL dentro do tempo do timeout ، o programa realizar a função 'comJSON' mencionada anteriormente. Caso não consiga abrir URL no tempo estipulado ، realiza-se a função 'semJSON'. Ambos as funções são muito parecidas، tapo 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"

while (1): jsonurl = None #Inicializa a varivavel como لا شيء طباعة 'Passo:'، j print 'Atualizando dados' حاول: 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 بلا: طباعة "Erro ao atualizar dados" semJSON () #Se não abriu o URL ، معظم نظام التشغيل dados الحصول على localmente (do Arduino) مرر j + = 1 print '---------------------------------- -------------------------------------------------- -------------------------------------------- / n 'وقت النوم (1)

Na Primeira linha da função 'comJSON' ، recebemos todos os dados da URL já abertos numa variá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 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 mostadmos.

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

طباعة "\ nArduino"

إذا ardAgua == 1: اطبع 'Molhado' else: اطبع 'Seco' print 'Temperatura:'، ardTemp، '* C' print 'Pressao:'، ardPres، 'Pa' print 'Ultra-Violeta:'، ardUV، ' lx '

# استاكاو

طباعة '\ 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']

طباعة "البيانات:" ، البيانات

طباعة 'Velocidade do Vento:'، vel_vento، 'm / s' print 'Umidade do ar:'، umidade، '٪'

# تحويل

vel_vento = عشري. عشري (vel_vento.rstrip ()) أوميداد = عشري. عشري (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 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 'publish. مفرد (موضوع ، حمولة = tPayload ، اسم المضيف = mqttHost ، المنفذ = tPort ، tls = tTLS ، النقل = tTransport) '. لعبة função então acaba e retorna para o loop main.

#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" # Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" # configuraçes de comunicação useUnsecocketsTCPalse "tcp" tPort = 1883 tTLS = لا شيء في حالة useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = لا شيء إذا كان useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/ etc / ss- / ca الشهادات.crt "، 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 الموضوع =" القنوات / "+ 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 (بيانات) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade) #Organiza todas as variaveis em uma String para ser enviado print 'Enviando dados' حاول: publish.single (topic، payload = tPayload، hostname = mqttHost ، port = tPort، tls = tTLS، transport = tTransport) #Envia os dados time.sleep (0.5) اطبع "Dados enviados" باستثناء: طباعة "Erro ao enviar dados"

الخطوة 5: Configurando O Web Service

Configurando O Web Service
Configurando O Web Service

بالنسبة إلى البيئة ، يتم الحصول على خدمة الويب ، واستخدام منصة ThingSpeak. Para tal، entramos no site thingspeak.com e criamos uma conta. Após a criação e login na conta، nos dirigimos ao cabeçalho de menus -> Canais -> Meus Canais e então clicamos no botão "قناة نوفو". Ao clicar، escolhemos o nome do Canal، escrevemos uma descrição para ele، e então decidimos quantos dos 8 campos likizaríamos. لا كازو ، الاستخدامات 7.

Ao criar um canal، é gerado um ID do Canal، uma Chave de Escrita e uma Chave de Leitura. اسم المستخدم هل القناة نفسها إذا كنت تريد أن تفعل ذلك في القناة وشاف دي اسكريتا نا أبا "تشافيس". Para que o código Python envie as informações getidas para o canal é، required 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"

Além da conexão com o canal criado، também são implárias outras configurações no código em Python app.py:

useUnsecuredTCP = صحيح

useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" إذا كان useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = لا شيء في حالة الاستخدامUnsecuredWebsockets: tTransport = "websockets" tPort = 80 websockets "tTLS = {'ca_certs':" / etc / ssl / certs / ca-الشهادات.crt "، 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels / "+ channelID +" / publish / "+ مفتاح API

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

Tendo vinculado todos os dados do Canal à programação em Python، basta تنفيذي o código que todos os dados escolhidos são enviados ao Web Service. لا يوجد شيء يتكلم ، يمكنك الحصول على ما تريد القيام به أو مراقبة أنماط الحياة اليومية.

موصى به: