Innholdsfortegnelse:
- Trinn 1: Maskinvareutnyttelse
- Trinn 2: Montagem Do Hardware
- Trinn 3: Firmware Atmega328
- Trinn 4: Programação Em Python
- Trinn 5: Configurando O Web Service
Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:25
Neste projeto iremos desenvolver um system of 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). Dette kan også gjøres på en lokal måte, og det kan også gjøres for en webtjeneste som kan brukes til å bygge en meteorológica (ingen caso, estamos utilizando a da Faculdade de Engenharia de Sorocaba). Vi kan gi deg informasjon om hvordan du kan bruke webområdet til ThingSpeak.
Trinn 1: Maskinvareutnyttelse
Foi utilizado para a construção deste projeto:
1x Qualcomm Dragonboard 410c
1x Grove Seeed Sensor Mezzanine
1x vannsensor
1x IMU 10OF Grove Sensor v1.0
1x Sunlight Grove Sensor v1.0
1x USB -mus
1x Teclado USB
1x skjerm
1x Cabo HDMI
1x adapter-HDMI-VGA
Acesso à dados da estação meteorológica FACENS
Trinn 2: 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 direta entre o sensor Groove Sunlight v1.0.
2: +5V tilkobling til Vcc til IMU-10DOF.
3: +5V e Gnd conectados aos pinos correspondentes do Vannsensor.
4: GND IMU-10DOF.
5: SDA/SCL conectado ao pino correspondente do IMU-10.
6: Pino Sig do Water sensor conectado ao pino 2.
Trinn 3: Firmware Atmega328
Através da Sensors Mezzanine, eventuell tilgang til mikrokontrollator Atmega328, eller bruk av platformater Arduíno, og program-lo diretamente, use and IDE Arduíno installation on DragonBoard. Vale ressaltar que a Mezzanine e a DragonBoard em conjunto possoem todo os periféricos needsários para a programação and gravação do firmware no microcontrolador.
O fastvareembargering og respons på realisar som ledninger for sensorer, operasjonelle kommunikasjonsprotokoller og operasjonelle doser, og vi kan også få hjelp med å koble oss til seriell for DragonBoard.
*Viser nødvendig informasjon om bibliotecas som ikke bruker fastvare. Elas podem ser encontradas em:
imu-10DOF
Sollys sensor
O firmware utilizado pode ser encontrado aqui ou aqui:
Trinn 4: Programação Em Python
Para o programa criado, foram needsários os seguintes imports: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'desimal'. 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 publish #par publicar import psutil #para konfigurer ol import desimal #parakonverterer
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 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" #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. Du kan også bruke en URL -adresse til en funksjonell 'urllib2.urlopen (url)', og du kan også legge inn en argumentasjon om 'timeout = X', og vi kan kvantifisere dem på en begrenset måte for en URL -adresse. Se en programvare for å få en URL -adresse for å gjøre tempoet timeout, eller for å realisere en funksjon av "comJSON" mencionada anteriormente. 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' irá mostrar e enviar os dados da estação, enquanto 'semJSON' não). Como 'semJSON' é uma função derivada de 'comJSON'. Iremos forklarer somente en 'comJSON'
while (1): jsonurl = None #Inicializa a varivavel como None print 'Passo:', j print 'Atualizando dados' try: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos hvis jsonurl ikke er Ingen: skriv ut 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, mostra todos os dados unntatt: hvis jsonurl er None: print 'Erro ao atualizar dados' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) pass j += 1 print '---------------------------------- -------------------------------------------------- -------------------------------------------- / n 'gang. sover (1)
Na primeira linha da função 'comJSON', kan du lese mer om URL -adressen 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' (for eksempel '[' ReturnDataSet '] [' sens_aver_6_5] ') e então mostramos esta novos dados na.
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 ())
skrive ut "\ 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, '%'
#Konverter
vel_vento = desimal. Desimal (vel_vento.rstrip ()) umidade = desimal. Desimal (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. single (emne, nyttelast = tPayload, vertsnavn = mqttHost, port = tPort, tls = tTLS, transport = tTransport) '. A função então acaba e retorna para o loop principal.
#Envia Kanal-= "344243" #Canal criado para o grupo apikey = "1PK9ELK0L4AH8CVP" # Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" # configurações de Comunicação useUnsecuredTCP = Sant useUnsecuredWebsockets = false useSSLWebsockets = False hvis useUnsecuredTCP: ttransport = "tcp" tPort = 1883 tTLS = Ingen hvis useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Ingen hvis useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/etc/ssl/certs/ca- certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channel/" + channelID +"/publish/" + apiKey #Cria variavel com 'caminho' para o canal tPayload =" field1 = " + 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 (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0.5) print 'Dados enviados' unntatt: print 'Erro ao enviar dados'
Trinn 5: Configurando O Web Service
For enviar os dados obtidos ao Web Service, utilizamos and plataforma ThingSpeak. Para tal, entramos no site thingspeak.com e criamos uma conta. Her kan du logge inn med en meny med menyer -> Canais -> Meus Canais e então 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. No caso, utilizamos 7.
Ao criar um canal, é gerado um ID do Canal, uma Chave de Escrita og uma Chave de Leitura. O ID do 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 é, needsário configurá-lo ao ID to Canal:
channelID = "Insira o ID do Canal aqui"
E também com og Chave 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 = True
useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" if useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Ingen hvis useUnsecuredWebsockets: tTransport = "websockets" tTortSTS = TSTLS = tSportS 80 = tSportS 80STSSSTSSTSSSTSSTSSSTSSSSTSSTSSSTSSTSSSSSSSSSSSSSSTSSTSSSTSSTSSTSSST websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channel/" + channelID +"/publish/" + apiKey
Para que a aplicação web realmente receba, by exemplo, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), é needsario 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 (data) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade)
Tendo vinculado todos os dados do Canal à programação em Python, basta executer o código que todos us dados escolhidos são enviados ao Web Service. No ThingSpeak, é possível realizar todo o monitoramento através de gráficos.
Anbefalt:
SERVICE ROBOT: 8 trinn
SERVICE ROBOT: Denne roboten vil være en pålitelig assistent i alle dine gjengivelser. Roboten kommer med mange bevegelige lemmer, roterende hode og spinnende hjul. Det er 7 fargevalg for kroppen og 2 alternativer for øynene. DEN HAR SPINNHJUL
E.S.D.U (Emergency Service Droid Unit): 7 trinn
E.S.D.U (Emergency Service Droid Unit): I dag skal vi bygge en E.S.D.U (Emergency Service Droid Unit). E.S.D.U er delt inn i 3 klasser: Politi, Brann og Medic. Alle disse er ennå ikke fullt utviklet, men jeg håper vi kan oppgradere og utvikle dem sammen som en kommando
Kontrollere flere lysdioder med Python og Raspberry Pi's GPIO -pinner: 4 trinn (med bilder)
Kontrollere flere lysdioder med Python og Raspberry Pi sine GPIO -pinner: Denne instruksjonen viser hvordan du styrer flere GPIO -pinner på RaspberryPi for å drive 4 lysdioder. Det vil også introdusere deg for parametere og betingede utsagn i Python.Vår tidligere instruerbare bruk av din Raspberry Pi's GPIO -pins for å kon
Slik demonterer du en datamaskin med enkle trinn og bilder: 13 trinn (med bilder)
Slik demonterer du en datamaskin med enkle trinn og bilder: Dette er en instruksjon om hvordan du demonterer en PC. De fleste grunnkomponentene er modulære og fjernes lett. Det er imidlertid viktig at du er organisert om det. Dette vil bidra til å hindre deg i å miste deler, og også i å gjøre monteringen igjen
Service Monitor Script for Linux Servers: 4 trinn
Service Monitor Script for Linux Servers: Å ha et stabilt system som alltid kjører, selv om du bruker Linux, kan være en vanskelig oppgave. På grunn av kompleksiteten i moderne programvarepakker og dårlig koding, kan noen prosesser uunngåelig krasje fra tid til annen. Dette kan være en dårlig ting hvis du