Sisukord:
- Samm: riistvara kasutamine
- Samm: riistvara montaaž
- Samm: püsivara Atmega328
- Samm 4: Programação Em Python
- Samm: veebiteenuse konfigureerimine
Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 sammu (koos piltidega)
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:50
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 soovib kohalikke kohalikke ja veebipõhiseid teenuseid, mis on loodud ilma meteoroloogiata. Após adquiridos, os dados serão disponibilizados em uma aplicação web baseada em ThingSpeak.
Samm: riistvara kasutamine
Rakenduse konstruktsiooni kasutamine:
1x Qualcomm Dragonboard 410c
1x Grove Seeed Sensor Mezzanine
1x vesi näinud andur
1x IMU 10OF Grove Sensor v1.0
1x Sunlight Grove Sensor v1.0
1x USB -hiir
1x Teclado USB
1x monitor
1x HDMI kaabel
1x HDMI-VGA adapter
Aceso à dados da estação meteorológica FACENS
Samm: riistvara montaaž
Pärast seda, kui konstrueeritakse plaat Andur Mezzanine draakonplaadil, käivitage sideme sidumine com o esquemático anterior, saatke:
1: Conexão directta entre and sensor Groove Sunlight v1.0.
2: +5 V ühendused Vcc-ga IMU-10DOF-i jaoks.
3: +5V e Gnd conectados aos pinosrespondentses do Veeandur.
4: GND IMU-10DOF.
5: SDA/SCL, mis on ühendatud IMU-10-ga.
6: Pino Sig do Veesensori ühendus ao pino 2.
Samm: püsivara Atmega328
Através da Sensors Mezzanine, mis on saadaval mikrokontrolleri Atmega328 abil, Arduíno platvormide kasutamine, programmide loogiline kasutamine ja IDE Arduíno paigaldamine DragonBoardile. Vale ressaltar que a Mezzanine and a DragonBoard to conjunto possuem todo os periféricos needs as programmeão and gravação do firmware no microcontrolador.
Olete püsivara embarcado ja reageerite realiseerimiseks leitide ja sensores, gerenciando os protokollides de comunicação e operação dos mesmos, e após and aquisção dos dados, and encaminha via porta serial as a DragonBoard.
*Pode on vajalik, kaasa arvatud biblioteka kasutamine ilma püsivara kasutamiseta. Elas podem ser encontradas em:
imu-10DOF
Päikesevalguse andur
O püsivara kasutusvõimalus, mis on varustatud entsüklopeediga või veevarustusega:
Samm 4: Programação Em Python
Para või programm criado, foram vajadused 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.
impordi urllib2, json #para pegar os dados da estacaoimport time #para o time.sleep () impordi seeria #para o Arduino import paho.mqtt.publish as avaldada #para publicar import psutil #para konfiguraator o URL import kümnendkoht #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 programa
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. Kui kasutate URL -i, siis kasutage URL -i „urllib2.urlopen (url)”, lisage mõni argument „timeout = X”, saatke X -i kvantideed ja piirkonnad URL -i jaoks aberto. Programm võib aidata sulgeda URL -i, mis võimaldab teil aeguda, või programm on realiseeritav ja lõbus 'comJSON' mencionada anteriormente. Caso não consiga abrir 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' on fun função derivada de 'comJSON'. Iremos selgitab sõna „comJSON”
samas (1): jsonurl = puudub #Inicializa a varivavel como Puudub print 'Passo:', j print 'Atualizando dados' try: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos kui jsonurl ei ole Puudub: printige 'Dados atualizados' comJSON (jsonurl) #Se secguiu abrir o URL, mostra todos os dados, välja arvatud: kui jsonurl pole Puudutage: printige '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)
Peamine linha da função 'comJSON', vastuvõtud todos os dados da URL já abertos numa vará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 convertides dentro de variáveis e, então, mostrando esses dados na tela. Arduíno issi vastuvõtmine, vastuvõtmine osadesse ja estação, lihtne acessando os sensores específicos dentro do objeto 'dados' (por examplelo ['ReturnDataSet'] ['sens_aver_6_5]') e então mostramos estes novos dad.
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 ())
print "\ 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 'Andmed:', andmed
print 'Velocidade do Vento:', vel_vento, 'm/s' print 'Umidade do ar:', umidade, '%'
#Konverteeri
vel_vento = kümnendkoht. Kümnendarv (vel_vento.rstrip ()) umidade = kümnendkoht.
O próximo passo é enviar todos esses dados coletados. Para, iseenesest, kolokar ja ID kanalil, Chave de Escrita ja o Host erinevates versioonides, konfiguratsiooni muutmine või 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 'avaldada. üksik (teema, kasulik koormus = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) '. A funcã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 useUnuredSuck "tcp" tPort = 1883 tTLS = Puudub, kui useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Puudub, kui useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/etc/ssl/ cert.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels/" + channelID +"/publis// + apiKey #Cria variavel com o 'caminho' para o canal tPayload = "field1 =" + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (andmed) + "& 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', välja arvatud: print 'Erro ao enviar dados'
Samm: veebiteenuse konfigureerimine
Kui kadestate veebipõhist teenust, kasutage ThingSpeak platvormi. Para talu, entramos no site thingspeak.com ja 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. Kasiinot pole, utiliit 7.
Ao criar um kanal, gerado um ID kanal, Chave de Escrita ja Chave de Leitura. Kanali ID on encontra abaixo do nome do canal ja Chave de Escrita koos abiga "Chaves". Para que o código Python envie as information as obtidas para o canal é, requiredário configurá-lo ao ID do Canal:
channelID = "Insira või ID do Canal aqui"
Chave de Escrita tammik:
apiKey = "Insira ja 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 = Tõsi
useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" if useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Puudub, kui useUnsecuredWebsockets: tTransport = "websovers" websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-sertifikaadid.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels/" + channelID +"/avaldada/" + apiKey
Para que and a applicação web realmente receba, por examplelo, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), here must 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 (andmed) + "& field6 =" + str (vel_vento) + "& field7 =" + str (niisutatud)
Tendo vinculado todos os dados do Canal in the programção em Python, best executar or código que todos os dados escolhidos são enviados ao Web Service. No ThingSpeak, realiseerige see või monitoramento através de gráficos.
Soovitan:
Castle Planter (koos Tinkercadi koodiplokkidega): 25 sammu (koos piltidega)
Castle Planter (koos Tinkercadi koodiplokkidega): selle disaini teostamine võttis mul üsna kaua aega ja kuna minu kodeerimisoskus on vähemalt öeldes piiratud, loodan, et see õnnestus hästi :) Kasutades juhiseid, peaksite saama taaslooge selle disaini kõik aspektid ilma
Diy makroobjektiiv koos teravustamisega (erinev kui kõik muud DIY makroobjektiivid): 4 sammu (koos piltidega)
Diy makroobjektiiv koos teravustamisega (erinev kui kõik muud DIY makroobjektiivid): olen näinud palju inimesi, kes teevad makroläätsi tavalise komplekti objektiiviga (tavaliselt 18–55 mm). Enamik neist on objektiiv, mis on lihtsalt tagurpidi kaamera külge kinnitatud või esielement eemaldatud. Mõlemal variandil on varjuküljed. Objektiivi kinnitamiseks
Kitroniku leiutajakomplekti kasutamine koos Adafruit CLUE -ga: 4 sammu (koos piltidega)
Kitroniku leiutajakomplekti kasutamine koos Adafruit CLUE -ga: Kitronik Leiutaja komplekt BBC micro: bit jaoks on suurepärane sissejuhatus elektroonikaga mikrokontrolleritele, kasutades leivaplaati. See komplekti versioon on mõeldud kasutamiseks koos odava BBC mikro: bitiga. Üksikasjalik õpetusraamat, mis tuleb
Aktiivse muusikapeo LED -latern ja Bluetooth -kõlar koos pimedas helendava PLA -ga: 7 sammu (koos piltidega)
Aktiivse muusikapeo LED -latern ja Bluetooth -kõlar koos helendusega pimedas PLA: Tere, ja aitäh, et häälestasite minu juhendatavaks! Igal aastal teen koos oma pojaga, kes on nüüd 14., huvitava projekti. Oleme ehitanud nelikopteri, ujumistempo. (mis on ka juhendatav), CNC korpuse pink ja Fidget Spinners
3 KANALI AUDIO MIXER koos FM -raadiosaatjaga: 19 sammu (koos piltidega)
3 KANALI AUDIO MIXER, mis on integreeritud FM -raadiosaatjaga: Hei kõik, selles artiklis ma aitan teil ehitada oma 3 KANALI AUDIO MIXER koos FM -raadiosaatjaga