Indholdsfortegnelse:
- Trin 1: Hardwareudnyttelse
- Trin 2: Montagem gør hardware
- Trin 3: Firmware Atmega328
- Trin 4: Programação Em Python
- Trin 5: Configurando O Web Service
Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Neste projeto iremos desenvolver um systemema 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). Det kan også bruges til at lokalisere, og vi kan også bruge webtjenester til at oprette en meteorológica (ingen caso, estamos utilizando a da Faculdade de Engenharia de Sorocaba). Vi kan tilbyde, at vi kan levere en tilgængelig hjemmeside til ThingSpeak.
Trin 1: Hardwareudnyttelse
Foi utilizado para a construção deste projeto:
1x Qualcomm Dragonboard 410c
1x Grove Seeed Sensor Mezzanin
1x vandsået sensor
1x IMU 10OF Grove Sensor v1.0
1x Sunlight Grove Sensor v1.0
1x mus USB
1x Teclado USB
1x skærm
1x Cabo HDMI
1x adapter-HDMI-VGA
Acesso à dados da estação meteorológica FACENS
Trin 2: Montagem gør hardware
Após conectar a placa Sensor Mezzanine à dragonboard, udfør en ligação de acordo com o esquemático anterior, sendo:
1: Direkte adgang til sensor Groove Sunlight v1.0.
2: +5V tilslutning af Vcc til IMU-10DOF.
3: +5V e Gnd conectados aos pinos correspondentes do Water sensor.
4: GND IMU-10DOF.
5: SDA/SCL-forbindelse til pino-korrespondent til IMU-10.
6: Pino Sig do Water sensor conectado ao pino 2.
Trin 3: Firmware Atmega328
Através da Sensors Mezzanine, muligvis adgang til mikrokontrolator Atmega328, eller brug af platformater Arduíno, program-lo diretamente, udnyttelse og IDE-installation af 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 firmware embarcado é responsável por realizar as leituras dos sensores, gerenciando os protocolos de comunicação e operação dos mesmos, e após and aquisição dos dados, os encaminha via porta serial para a DragonBoard.
*Tilbage til toppen Elas podem ser encontradas em:
imu-10DOF
Sollys sensor
O firmware udnytter pode ser encontrado aqui ou aqui:
Trin 4: Programação Em Python
Para o programa criado, foram nødvendários os seguintes imports: '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 publish #par publicar import psutil #para konfigurar ol 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 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å bruge en URL til en funktionsadresse 'urllib2.urlopen (url)', der kan også bruges til at argumentere 'timeout = X', og vi kan angive en mængde, der er begrænset til en URL -adresse. Se et program, hvor du kan bruge en URL til at gøre tempoet til en timeout, eller til at realisere en funktionsmæssig '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: udskriv 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, mostra todos os dados undtagen: 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', 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' (f.eks. '[' 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 ())
udskriv "\ 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 = decimal. Decimal (vel_vento.rstrip ()) umidade = decimal. Decimal (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, værtsnavn = mqttHost, port = tPort, tls = tTLS, transport = tTransport) '. En função então acaba e retorna para o loop principal.
#Envia Kanalid = "344.243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" # Código Dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" # configurações de Comunicação useUnsecuredTCP = True 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' undtagen: print 'Erro ao enviar dados'
Trin 5: Configurando O Web Service
For enviar os dados obtidos ao Web Service, utilizamos and plataforma ThingSpeak. Paral tal, entramos no site thingspeak.com e criamos uma conta. Du kan også logge ind med flere menuer -> 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. Ingen caso, anvendelser 7.
Ao criar um canal, é gerado um ID do Canal, uma Chave de Escrita e uma Chave de Leitura. O ID for 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 = Falsk mqttHost = "mqtt.thingspeak.com" if useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Ingen hvis useUnsecuredWebsockets: tTransport = "websockets" tTLSTSTSSS = tSTSSSTSSSS = tSportS80STSSSSSTS =STSSSTSSSSSSSSSSTSSTSSTSSTSSTSSTSSSSSSSTSSTSSTSSTSSTSSTSSTS 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, for example, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), é needario 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.
Anbefalede:
SERVICE ROBOT: 8 trin
SERVICE ROBOT: Denne robot vil være en pålidelig assistent i alle dine gengivelser. Robotten kommer med mange bevægelige lemmer, roterende hoved og roterende hjul. Der er 7 farveindstillinger til kroppen og 2 muligheder for øjnene. DET HAR SPINNINGSHJUL
E.S.D.U (Emergency Service Droid Unit): 7 trin
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 opdelt i 3 klasser: Politi, Brand og Medic. Alle disse er endnu ikke fuldt udviklede, men jeg håber, at vi kan opgradere og udvikle dem sammen som en kommando
Tryk på ON-OFF-kontakten med UTSOURCE-service: 3 trin
Touch ON-OFF Switch Med UTSOURCE Service: Vi har allerede oprettet en touch switch ved hjælp af en NPN transistor. Men denne switch havde kun en funktion til at tænde kredsløbet, men ingen måde at slukke for kredsløbet uden at afbryde strømmen. I dette kredsløb skal vi bygge en berøringsafbryder
Sådan adskilles en computer med nemme trin og billeder: 13 trin (med billeder)
Sådan adskilles en computer med nemme trin og billeder: Dette er en instruktion om, hvordan du adskiller en pc. De fleste af de grundlæggende komponenter er modulopbyggede og nemme at fjerne. Det er dog vigtigt, at du er organiseret omkring det. Dette hjælper med at forhindre dig i at miste dele og også ved at lave genmonteringen til
Web-tilsluttet SMART LED-animationsur med webbaseret kontrolpanel, synkroniseret tidsserver: 11 trin (med billeder)
Web-tilsluttet SMART LED-animationsur Med webbaseret kontrolpanel, tidsserver synkroniseret: Historien om dette ur går langt tilbage-mere end 30 år. Min far var banebrydende for denne idé, da jeg bare var 10 år gammel, længe før LED -revolutionen - tilbage da LED'erne var 1/1000 lysstyrken i deres nuværende blændende glans. En sand