Tartalomjegyzék:
- 1. lépés: Hardverhasználat
- 2. lépés: Montagem Do Hardware
- 3. lépés: Firmware Atmega328
- 4. lépés: Programação Em Python
- 5. lépés: A webszolgáltatás konfigurálása
Videó: Irrigações Automatizadas Com Web Service Utilizando Python: 5 lépés (képekkel)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:43
Neste projeto iremos desenvolver um system 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 (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. lépés: Hardverhasználat
Foi hasznosítás a konstrukcióhoz:
1x Qualcomm Dragonboard 410c
1x Grove Seeed Sensor Mezzanine
1x vízlátó érzékelő
1x IMU 10OF Grove Sensor v1.0
1x Sunlight Grove Sensor v1.0
1x USB egér
1x Teclado USB
1x monitor
1x Cabo HDMI
1x HDMI-VGA adapter
Acesso à dados da estação meteorológica FACENS
2. lépés: Montagem Do Hardware
Após conectar a placa Sensor Mezzanine à dragonboard, execute a ligação de acordo com o esquemático anterior, sendo:
1: Conexão directta entre o érzékelő Groove Sunlight v1.0.
2: +5 V csatlakozás a Vcc-hez az IMU-10DOF-hoz.
3: +5V e Gnd conectados aos pinosrespondentses do Vízérzékelő.
4: GND IMU-10DOF.
5: Az SDA/SCL kapcsolódik az IMU-10-hez.
6: Pino Sig do vízérzékelő a 2 pino.
3. lépés: Firmware Atmega328
Através da Sensors Mezzanine, a rendelkezésre álló mikrokontroller Atmega328, vagy mesmo utilizado em plataformas Arduíno, e programá-lo directtamente, az IDE Arduíno telepítése a DragonBoard-hoz. Vale ressaltar que a Mezzanine és a DragonBoard em conjunto possuem todo os periféricos requiredários for programção and gravação do firmware no microcontrolador.
O firmware embarcado és reagation for realizar as leituras dos sensores, gerenciando os protocolos de comunicação and operação dos mesmos, e após and aquisição dos dados, os encaminha via DragonBoard.
*Szükséges a kód, beleértve a bibliotecas használatát, nincs firmware. Elas podem ser encontradas em:
imu-10DOF
Napfény érzékelő
O firmware -használat, a titkosítás és az aqui:
4. lépés: Programação Em Python
Para o program criado, foram requiredários os seguintes import: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'decimal'. 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 () import serial #para o Arduino import paho.mqtt.publish as közzététel #para publicar import psutil #para configurar o 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 (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 receber via JSON (como a posição mais recente da Array sera 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 program
Entrando no 'while (1)', inicializamos a variável 'jsonurl' como 'None'. Esta variável irá abrir a URL JSON, portanto ao inicializarmos ela no início do 'while', estamos então resetando ela toda vez que repetirmos o loop. O próximo passo é abrir o URL usando a função 'urllib2.urlopen (url)', podendo também, nézze meg a argumentum 'timeout = X', küldje X uma quantidade em segundos limite para o URL ser aberto. A program következményei között szerepel egy URL -cím, amely időtúllépést végez, vagy a program megvalósítja a „comJSON” menzionális funkciót. Caso não consiga abrir a URL no tempo estipulado, realise-se a função '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'
while (1): jsonurl = Nincs #Inicializa a varivavel como Nincs nyomtatás 'Passo:', j print 'Atualizando dados' try: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos ha a jsonurl nem létezik Nincs: print 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, mostra todos os dados, kivéve: ha jsonurl nincs: print 'Erro ao atualizar dados' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) pass j += 1 print '---------------------------------- -------------------------------------------------- -------------------------------------------- / n 'time.sleep (1)
A 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 examplelo
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 ().rstrip ()) ardUV = float (ard.readline (). rstrip ())
nyomtatás "\ nArduino"
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 'Data:', data
print 'Velocidade do Vento:', vel_vento, 'm/s' print 'Umidade do ar:', umidade, '%'
#Konvertálj
vel_vento = tizedes. Tizedes (vel_vento.rstrip ()) umidade = tizedes. Tizedes (umidade.rstrip ())
O próximo passo é enviar todos esses dados coletados. Ez is, pontos colocar és ID csatorna, 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 'public. single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport)”. A função então acaba e retorna para o loop princip.
#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" #Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" #configurações de comunicação useUnuredSuckUp "tcp" tPort = 1883 tTLS = Nincs, ha useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Nincs, ha useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/etc/ssl/ cert.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels/" + channelID +"/közzététel/" + apiKey #Cria variavel com o 'caminho' para o canal tPayload =" field1 = " + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (adat) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade) #Organiza todas as variaveis em uma String para ser enviado print 'Enviando dados' try: publis.single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0.5) print 'Dados enviados', kivéve: print 'Erro ao enviar dados'
5. lépés: A webszolgáltatás konfigurálása
Az irigyléshez használható webszolgáltatás, a ThingSpeak platform használata. Para tal, entramos no site thingspeak.com and criamos uma conta. Após a criação e login in contact, nos dirigimos ao cabeçalho de menus -> Canais -> Meus Canais e então clickamos no botão "Novo Canal". Ao clickar, escolhemos o nome do Canal, escrevemos uma descrição para ele, e então decidimos quantos dos 8 campos possíveis utilizaríamos. Nincs caso, hasznosítás 7.
Ao criar um canal, és gerado um ID do Canal, uma Chave de Escrita és uma Chave de Leitura. O ID do Canal se encontra abaixo do nome do canal e a Chave de Escrita és a "Chaves". Para que o código Python envie as informationções obtidas para o canal é, requiredário configurá-lo ao ID do Canal:
channelID = "Insira o ID do Canal aqui"
Chambé de Escrita:
apiKey = "Insira a Chave de Escrita"
Além da conexão com o canal criado, também são needsárias outras configurações no código em Python app.py:
useUnsecuredTCP = Igaz
useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" if useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Nincs if useUnsecuredWebsockets: tTransport = "websors" websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificate.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels/" + channelID +"/közzététel/" + apiKey
Para que a aplicação web realmente receba, por examplelo, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), e requiredario 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 (adatok) + "& field6 =" + str (vel_vento) + "& field7 =" + str (nedves)
Tendo vinculado todos os dados do Canal à programção em Python, best executar or código que todos os dados escolhidos são enviados ao Web Service. No ThingSpeak, é possível realizar todo o monitoramento através de gráficos.
Ajánlott:
MONITORAMENTO DA UMIDADE DO SOLO DE UMA HORTA UTILIZANDO ARDUINO E ANDROID: 15 lépés
MONITORAMENTO DA UMIDADE DO SOLO DE UMA HORTA UTILIZANDO ARDUINO E ANDROID: Az ideia do nosso projeto é monitoron a umidade do solo de uma horta e apresentar na tela do celular para acompanhamento real
Como Subir Datos De Un Acelerómetro a Ubidots, Utilizando Arduino YÚN: 6 lépés
Como Subir Datos De Un Acelerómetro and Ubidots, Utilizando Arduino YÚN: Arduino Y Ú N es un microcontrolador basado en el ATmega32u4 y el Atheros AR9331. Siendo el Atheros és processzor capaz de soportar and system operativo linux basado en OpenWrt, el Arduino Y Ú N cuenta with a version of OpenWrt-Yun
Como Hacer Un Abanico Con Iluminación Utilizando Littlebits: 3 lépés
Como Hacer Un Abanico Con Illuminación Utilizando Littlebits: En el dia de hoy les mostrare como hacer un abanico con illuminaci ó n utilizando littlebits. Este és akut; proyecto puede ser utilizado en una habitaci ó n oscura para que este iluminada
"Charlotte Web" stílusú LED szál óra: 10 lépés (képekkel)
"Charlotte's Web" stílusú LED-es izzóóra: Amióta először megláttam a LED izzólámpákat, azt gondoltam, hogy az izzószálaknak valamire jónak kell lenniük, de ez egy helyi elektronikai alkatrészbolt bezárásáig tartott. vásárolni néhány izzót azzal a szándékkal, hogy összetörje
Service Monitor Script Linux szerverekhez: 4 lépés
Szolgáltatásfigyelő szkript Linux -kiszolgálók számára: Stabil, mindig futó rendszer, még akkor is, ha Linuxot használ, nehéz feladat lehet. A modern szoftvercsomagok összetettsége és a rossz kódolás miatt elkerülhetetlen, hogy egyes folyamatok időnként összeomlanak. Ez rossz dolog lehet, ha