Orodha ya maudhui:

Irrigações Automatizadas Com Huduma ya Mtandao Utilizando Python: Hatua 5 (na Picha)
Irrigações Automatizadas Com Huduma ya Mtandao Utilizando Python: Hatua 5 (na Picha)

Video: Irrigações Automatizadas Com Huduma ya Mtandao Utilizando Python: Hatua 5 (na Picha)

Video: Irrigações Automatizadas Com Huduma ya Mtandao Utilizando Python: Hatua 5 (na Picha)
Video: COMO FAZER IRRIGAÇÃO AUTOMÁTICA PARA JARDIM - AUTOMATIZADA COM ALEXA :) 2024, Novemba
Anonim
Irrigações Automatizadas Com Huduma ya Mtandao Utilityando Chatu
Irrigações Automatizadas Com Huduma ya Mtandao Utilityando Chatu

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 por meio de um Web Service conectado à uma estação meteorológica (Hakuna mpango, utumiaji wa Kituo cha Engenharia de Sorocaba). Após adquiridos, os dados serão disponibilizados em uma aplicação web baseada em ThingSpeak.

Hatua ya 1: Utilizado wa vifaa

Vifaa vya Utilizado
Vifaa vya Utilizado

Matumizi ya huduma kwa ajili ya ujenzi wa mpango huu:

1x Qualcomm Dragonboard 410c

1x Grove Seed Sensor Mezzanine

Sensorer ya Maji ya Maji ya 1x

1x IMU 10OF Grove Sensor v1.0

1x Nuru ya Grove Sensor v1.0

1x Panya USB

1x Teclado USB

Mfuatiliaji wa 1x

1x Cabo HDMI

1x Adaptador HDMI-VGA

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

Hatua ya 2: Montagem Fanya vifaa

Montagem Do Vifaa vya ujenzi
Montagem Do Vifaa vya ujenzi

Sawa inayofanana na sensorer ya Mezzanine kwenye ubao wa joka, fanya 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 fanya IMU-10DOF.

3: + 5V e Gnd conectados aos pinos waandishi wanafanya sensa ya Maji.

4: GND IMU-10DOF.

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

6: Pino Sig kufanya sensa ya Maji conectado ao pino 2.

Hatua ya 3: Firmware Atmega328

Através da Sensors Mezzanine, ni uwezekano wa kupata microcontrolador Atmega328, kwa njia ya utumiaji wa programu ya Arduíno, na programu hii, utumie IDE Arduíno instalada na DragonBoard. Utaftaji wa Mezzanine na DragonBoard ni pamoja na njia inayofaa ya kufanya kazi kwa programu ya programu na programu ya firmware bila microcontrolador.

O firmware firmware is a audiável for realizar as leituras dos sensores, gerenciando os protocolos de comunicação and operação dos mesmos, and a apos a aquisição dos dados, os encaminha via porta serial para a DragonBoard.

* Pode inahitajika kutumia inciplas bibliotecas utilizadas no firmware. Elas podem ser encontradas em:

imu-10DOF

Sensor ya jua

O firmware utilizado pode ser encontrado aqui ou aqui:

Hatua ya 4: Programu ya Em Python

Programu ya Em Python
Programu ya Em Python

Para o programa criado, foram needários os seguintes imports: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'decimal'. Foram definidos duas funções ('comJSON' e 'semJSON') ni nini maana ya maelezo mafupi zaidi.

kuagiza urllib2, json #para pegar os dados da estacaoimport time #para o time.sleep () kuagiza serial #para o Arduino kuagiza paho.mqtt.publish kama kuchapisha #para publicar kuagiza psutil #para configurar o url kuagiza 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 variáveis ('i' e 'j'), utilizando 'i' para pegar os dados mais atuais do Array que iremos receiver kupitia 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" #Fafanua URL yako

i = 49 #Para pegar os dados mais atuais da estação

j = 0 #Passo hufanya programu

Entrando no 'while (1)', inicializamos a variável 'jsonurl' como 'Hamna'. Esta variável irrr a URL JSON, portanto ao inicializarmos ela no início do 'while', ni pamoja na kuweka upya orodha ya watu wanaosema tena kitanzi. Je! Unataka kutumia URL kutumia URL ya urllib2.urlopen (url) ', podendo também adicionar um argumento' timeout = X ', sendo X uma quantidade em segundos limite for URL URL. Tazama programu yako ikiwa unaleta URL ya muda wa kumaliza muda, na programu hii inaweza kutambuliwa kwa njia ya msingi ya 'comJSON'. Caso não consiga abrir a URL no tempo estipulado, realiza-se a função 'semJSON'. Ambos as funções são muito parecidas, tendo como diferença os dados da estação ('comJSON' ilá mostrar e enviar os dados da estação, enquanto 'semJSON' não). Como 'semJSON' ni uma função derivada de 'comJSON'. Iremos explicar somente ni 'comJSON'

wakati (1): jsonurl = Hakuna #Ininstiza como ya varivavel Hakuna chapa 'Passo:', j chapa 'Atualizando dados' jaribu: jsonurl = urllib2.urlopen (url, muda wa kumaliza = 5) #tenta abrir o url em no máximo 5 segundos ikiwa jsonurl sio Hamna: chapa 'Dados atualizados' comJSON (jsonurl) #Se unajumuisha URL, most todos os dados isipokuwa: ikiwa jsonurl haipo: chapa 'Erro ao atualizar dados' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (fanya Arduino) pita j + = 1 chapa '---------------------------------- -------------------------------------------------- -------------------------------------------- / n 'wakati (1)

Na primeira linha da função 'comJSON', vipokezi todos os dados da URL ni zaidi ya 'dados'. Esta it is receiver um objeto com duas Arrays, kwa sababu ya shughuli zingine za kutumia uma ('ReturnDataSet'). Kutumia huduma hii ni moja kwa moja, unaweza kufanya hivyo kwa njia ya siri na kufanya mfululizo kwa njia ya simu (kusoma mstari ()) kwa njia ya Arduíno ikiwa ni pamoja na Minyororo kama vile minyororo inayotokana na dhana za aina tofauti, sehemu nyingine, maandishi mengi zaidi. 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 notvos notos.

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 #Rece os osos do Arduíno ardAgua = int (ard.readline (). rstrip ()) ardTemp = kuelea (ard.readline (). rstrip ()) ardPres = int (ard.readline ().rstrip ()) ardUV = kuelea (ard.readlineline), rstrip ())

chapa "\ nArduino"

ikiwa ardAgua == 1: chapa 'Molhado' mwingine: chapisha 'Seco' chapisha 'Temperatura:', ardTemp, '* C' chapa 'Pressao:', ardPres, 'Pa' print 'Ultra-Violeta:', ardUV, ' lx '

#Estacao

chapa '\ nJSON' chapa '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']

chapisha 'Data:', data

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

#Badilisha

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

O próximo passo ni enviar todos esses dados coletados. Para isso, precisamos colocar a ID do canal, a Chave de Escrita e o Host in variáveis, além de configurar o useUnsecuredTCP, useUnsecuredWebsockets and useSSLWebsockets (usamos True, False, False). Criamos mais uma variável que irá guardar o 'caminho' para o canal, e uma outra for guardar, em String, o que será enviado para o servidor (com todas as variáveis convertidas) in então tentar publicar os dados no servidor usando 'chapisha. moja (mada, malipo ya malipo = tPata mzigo, jina la mwenyeji = mqttHost, bandari = tPort, tls = tTLS, usafirishaji = Usafirishaji) '. Função então acaba e retorna para o loop kuu.

#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" # Código dado pelo ThingSpeak mqttHost = "mqtt. "tcp" tPort = 1883 tTLS = Hakuna ikiwa matumiziUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Hakuna ikiwa matumiziSSLWebsockets: kuagiza ssl tTransport = "websockets" tTLS = {'ca_certs': "/ etc / ssl / certs / caert vyeti. 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' try: publish.single (mada, malipo ya mzigo = tPayload, hostname = mqttHost, bandari = tPort, tls = tTLS, usafirishaji = Usafirishaji) #Envia os dados time. lala (0.5) chapa 'Dados enviados' isipokuwa: chapa 'Erro ao enviar dados'

Hatua ya 5: Configurando O Huduma ya Wavuti

Sanidi O Huduma ya Wavuti
Sanidi O Huduma ya Wavuti

Para enviar os dados obtidos ao Web Service, utilizamos a plataforma ThingSpeak. Bado tal, entramos hakuna tovuti thingspeak.com na criamos uma conta. Maagizo haya ni ya kuingia kwenye akaunti, na tunakutajia orodha ya menyu -> Manispaa -> Njia za Wakaazi na sehemu za "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. Hakuna caso, utilizamos 7.

Canal um canal, é gerado um ID do Canal, uma Chave de Escrita na uma Chave de Leitura. O ID kufanya 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 is, needário configurá-lo ao ID do Canal:

channelID = "Insira o ID kufanya Mfereji wa maji"

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 needárias outras configurações no código em Python programu.py:

useUnsecuredTCP = Kweli

useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" ikiwa matumiziUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Hakuna ikiwa useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTort = 80 tTort = 80 tets websockets "tTLS = {'ca_certs':" / etc / ssl / certs / ca-certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 mada =" vituo / "+ channelID +" / chapisha / "+ apiKey

Para for a aplicação web realmente recebe, for exemplo, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), inahitajika kwa sababu ya "field2 =" + variável_temperatura, como no código a seguir:

tPayload = "uwanja1 =" + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (data + "& shamba6 =" + str (vel_vento) + "& uwanja7 =" + str (umidade)

Tendo vinculado todos os dados do Canal kwa programu ya Chatu, hufanya kazi kwa njia hii ikiwa ni pamoja na utumiaji wa huduma za Wavuti. No ThingSpeak, ni uwezekano wa kutambuliwa kwa njia ya ufuatiliaji wa mikutano.

Ilipendekeza: