İçindekiler:

Irrigações Automatizadas Com Web Service Utilizando Python: 5 Adım (Resimlerle)
Irrigações Automatizadas Com Web Service Utilizando Python: 5 Adım (Resimlerle)

Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 Adım (Resimlerle)

Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 Adım (Resimlerle)
Video: ChatGPT'de eklentileri öğrenmek ve botu maksimuma çıkarmak 2024, Kasım
Anonim
Irrigações Automatizadas Com Web Hizmeti Python Kullanıyor
Irrigações Automatizadas Com Web Hizmeti Python Kullanıyor

Neste Projeto iremos desenvolver um sistema de monitoramento para Plantações, que irá obter dados de umidade relativa yapmak ar, PRESSAO atmosférica, ar yapmak temperatura incidência UV, velocidade vento e condição da planta (seca / molhada) yapmak. Alguns desses yerel ayarlar, enquanto outros são obtidos por meio de um Web Service conectado à uma estação meteorológica (Caso yok, estamos utilizando ve Faculdade de Sorocaba de Engenharia de). ThingSpeak'e bağlı web temelleri için izinler.

Adım 1: Donanım Kullanımı

Donanım Kullanımı
Donanım Kullanımı

Bir construção deste projeto için Foi utilizado para:

1x Qualcomm Dragonboard 410c

1x Grove Seeed Sensör Ara Kat

1x Su Tohum Sensörü

1x IMU 10OF Grove Sensörü v1.0

1x Güneş Işığı Korusu Sensörü v1.0

1x Fare USB

1x Teclado USB

1x Monitör

1x Kabin HDMI

1x Adaptör HDMI-VGA

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

Adım 2: Montaj Donanımı Yapın

Montaj Donanımı
Montaj Donanımı

Após conectar a placa Sensor Mezzanine à dragonboard, bir ligação de acordo com o esquemático anterior yürütün, gönder:

1: Conexão doğrudan giriş o sensör Groove Sunlight v1.0.

2: +5V bağlantı ve Vcc IMU-10DOF.

3: +5V e Gnd conectados aos pinos muhabirleri Su sensörü yapar.

4: GND IMU-10DOF.

5: IMU-10 için SDA/SCL bağlantısı.

6: Pino Sig do Su sensörü conectado ao pino 2.

Adım 3: Ürün Yazılımı Atmega328

Através de Sensors Mezzanine, Atmega328'in en olası mikro denetleyicisi, Arduíno, e-programá-lo diretamente, DragonBoard'da bir IDE Arduíno kurulumundan yararlanma. Vale ressaltar que a Mezzanine ve bir DragonBoard em conjunto possuem todo os periferikos, bir program için gerekli donanımlar için mikro kontrol cihazı yok.

Donanım yazılımı ambargosu ve gerçek zamanlı olarak algılayıcılar, iletişim protokolleri ve iletişim protokolleri, iletişim kuralları ve uygulamaları, DragonBoard porta serileri aracılığıyla encaminha işletim sistemi.

*Pode ser necessario a inclusão das bibliotecas utilizadas hiçbir bellenim kullanmaz. Elas podem ser encontradas em:

imu-10DOF

Güneş Işığı Sensörü

O üretici yazılımı utilizado pode ser encontrado aqui ou aqui:

Adım 4: Programação Em Python

Programaço Em Python
Programaço Em Python

Para o programa criado, foram necessários os seguintes ithalatları: 'urllib2', 'json', 'zaman', 'serial', 'paho.mqtt.publish', 'psutil' ve 'decimal'. Foram tanımları duas funções ('comJSON' ve 'semJSON') que serão explicadas mais tarde.

urllib2, json #para pegar os dados da estacaoimport time #para o time.sleep() import serial #para o Arduino paho.mqtt.publish as yayınlamak #para publicar import psutil #para configurar o url import ondalık #para dönüştürücü

O primeiro passo é gravar em uma değişken o endereço de onde serao obtidos os dados da Estação Meteorológica (caso estamos gravando na variável 'url' yok). Em seguida, inicializamos duas variáveis ('i' e 'j'), utilizando 'i' para pegar os dados mais atuais do Array que iremos JSON aracılığıyla (array será a 49, inicializamos 'i' 49) e 'j' parasal niceliksel değerler 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 programı

Giriş yok 'while(1)', inicializamos bir değişken 'jsonurl' commo 'Hiçbiri'. Bir URL'yi kısaltın JSON, 'while' ile ilgili hiçbir şey bilmiyor, döngüyü yeniden başlatıyor. 'urllib2.urlopen(url)', 'zaman aşımı=X' için URL'yi kullanma ve URL'yi değiştirme. Bir URL dentro do tempo do timeout, o programa irá realizar a função 'comJSON' mencioonada anteriormente'yi kısaltın. Caso não consiga bir URL'yi kısaltır, tempo tahmini yok, bir função 'semJSON' gerçekleştirin. Ambos olarak eğlenceler são muito parecidas, como como diferença os dados da estação ('comJSON' irá Mostrar ve enviar os dados da estação, enquanto 'semJSON' não). Como 'semJSON', 'comJSON'dan türetilmiştir. Iremos, bir 'comJSON'u açıklıyor

while(1): jsonurl = Yok #Inicializa a varivavel como Yok print 'Passo:', j print 'Atualizando dados' deneyin: jsonurl = urllib2.urlopen(url, zaman aşımı = 5) #tenta abrir o url em no máximo 5 segundos jsonurl Yok değilse: 'Dados atualizados' yazdır comJSON(jsonurl) #Se conseguiu abrir o URL, çoğu todos os dados hariç: jsonurl Yok ise: 'Erro ao atualizados' yazdır semJSON() #Se não abriu o URL, Mostra os dados obtidos localmente (Arduino yap) pass j += 1 baskı '-------------------------------- -------------------------------------------------- --------------------------------------------\n' zaman.uyku (1)

En önemli 'comJSON', URL'deki en büyük değişikliklerden biri. Diziler, bazı durumlarda kullanılabilir ('ReturnDataSet'). Gerçekleştirme, ilk çalıştırma, Arduíno e ler as linhas (readline()) que o Arduíno está imprimindo ve jogando as Strings convertidas dentro de Variáveis e, então, Mostrando esses dados na tela. Arduíno'ya ilişkin bilgiler, en iyi uygulamalara ilişkin bilgiler, basit uygulamalara ilişkin tüm algılayıcılara ilişkin özellikler, "dados" nesnelerini (örnek olarak '['ReturnDataSet']['sens_aver_6_5]') daha fazla bilgi edinme.

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) # Arduíno'nun bir değişkeni olduğunu gösteren bir değişkendir #Recebe işletim sistemi uygulamaları Arduíno ardAgua = int(ard.readline().rstrip()) ardTemp = float(ard.readline().rstrip()) ardPres = int(ard.readline ().rstrip()) ardUV = kayan nokta(ard.readline().rstrip())

"\nArduino" yazdır

if ardAgua == 1: 'Molhado' yazdırın başka: yazdır 'Seco' yazdır 'Temperatura:', ardTemp, '*C' yazdır 'Pressao:', ardPres, 'Pa' yazdır 'Ultra-Violeta:', ardUV, ' lüks

#Estacao

'\nJSON' yazdır 'URL:' yazdır, 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']

'Veri:', verileri yazdır

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

#Dönüştür

vel_vento = ondalık. Decimal(vel_vento.rstrip()) umidade = ondalık. Decimal(umidade.rstrip())

O proximo passo é enviar todos eses dados coletados. Para isso, precisamos colocar a ID do canal, bir Chave de Escrita e o Host em değişkenleri, além de yapılandırma o useUnsecuredTCP, useUnsecuredWebsockets ve useSSLWebsockets (usamos True, False, False). Criamos mais uma variável que irá guardar o 'caminho' para o kanal, e uma outra para guardar, em String, o que será enviado para o sunucu (değişken dönüştürücüler olarak com todas) ve hiçbir hizmet sağlayıcı yok usando 'yayınlamak. single(konu, payload=tYük, ana bilgisayar adı=mqttHost, bağlantı noktası=tPort, tls=tTLS, taşıma=tTransport)'. Bir função então acaba e retorna para o loop prensibi.

#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" #Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" #configurações de comunicação useUnsecuredões de comunicação useUnsecuredões FalsoTcp = True use FalsoTCP =UnsecuredCuredTCP = True use "tcp" tPort = 1883 tTLS = UseUnsecuredWebsockets ise yok: tTransport = "websockets" tPort = 80 tTLS = useSSLWebsockets ise yok: import ssl tTransport = "websockets" tTLS = {'ca_certs':"/etc/ssca- sertifikalar.crt", 'tls_version':ssl. PROTOCOL_TLSv1} tPort = 443 konu = "channels/" + channelID + "/publish/" + apiKey #Cria variavel com o 'caminho' para o kanal tPayload = "field1=" + str(ardAgua) + "&field2=" + str(ardTemp) + "&field3=" + str(ardPres) + "&field4=" + str(ardUV) + "&field5=" + str(veri) + "&field6=" + str(vel_vento) + "&field7=" + str(umidade) #Organiza todas as variaveis em uma String para ser enviado print 'Enviando dados' deneyin: yayınlama.single(konu, payload=tPayload, hostname=mqttHost, port=tPort, tls=tTLS, transport=tTransport) #Envia os dados time.sleep(0.5) 'Dados enviados' yazdırın, hariç: 'Erro ao enviar dados' yazdır

Adım 5: Configurando O Web Hizmeti

Configurando O Web Hizmeti
Configurando O Web Hizmeti

ThingSpeak'i bir platformda kullanan Web Hizmeti için en iyi seçenek. Para tal, entramos hiçbir sitethingspeak.com ve criamos uma conta. Tüm girişler için giriş yapın, menüler için bkz. -> Canais -> Canais ve En clicamos no 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. Caso yok, utilizamos 7.

Ao criar um kanal, é gerado um ID do Canal, uma Chave de Escrita ve uma Chave de Leitura. O ID, Canal se encontra abaixo do nome do canal e a Chave de Escrita na aba "Chaves". Para que o código Python, canal é, necessário configurá-lo ao ID do Canal:

channelID = "Insira o ID do Canal aqui"

E também com ve Chave de Escrita:

apiKey = "Insira a Chave de Escrita"

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

useUnsecuredTCP = Doğru

useUnsecuredWebsockets = FalseuseSSLWebsockets = Yanlış mqttHost = useUnsecuredTCP ise "mqtt.thingspeak.com": tTransport = "tcp" tPort = 1883 tTLS = useUnsecuredWebsockets ise yok: tTransport = "WebPortsockets iftsTLs kullan: tSls Yok" websockets" tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt", 'tls_version':ssl. PROTOCOL_TLSv1} tPort = 443 konu = "kanallar/" + kanal kimliği + "/yayınla/" + APIAnahtarı

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(veri) + "&field6=" + str(vel_vento) + "&field7=" + str(umidade)

Python'da Canal ve Programaçma Programları'nı yürütür, Web Service'i yönetir. No ThingSpeak, muhtemelen yapılacaklar veya monitörler için gerçek bir gerçek.

Önerilen: