Sisällysluettelo:
- Vaihe 1: Laitteiston käyttö
- Vaihe 2: Asenna laitteisto
- Vaihe 3: Laiteohjelmisto Atmega328
- Vaihe 4: Programação Em Python
- Vaihe 5: Määritä verkkopalvelu
Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:03
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 etsii paikallisia paikallisia paikkoja, pyysi tarjouksia Web -palvelusta, joka on saatavana meteorologian (ei caso, estamos utilizando da da Faculdade de Engenharia de Sorocaba) avulla. Após adquiridos, os dados serão disponibilizados em uma aplicação web baseada em ThingSpeak.
Vaihe 1: Laitteiston käyttö
Käytettävissä projektin rakentamiseen:
1x Qualcomm Dragonboard 410c
1x Grove Seeed Sensor Mezzanine
1x vettä nähnyt anturi
1x IMU 10OF Grove Sensor v1.0
1x Sunlight Grove Sensor v1.0
1x USB -hiiri
1x Teclado USB
1x näyttö
1x Cabo HDMI
1x HDMI-VGA-sovitin
Aceso à dados da estação meteorológica FACENS
Vaihe 2: Asenna laitteisto
Após conectar a placa Sensor Mezzanine à dragonboard, suorita ligação de acordo com o esquemático anterior, lähetä:
1: Conexão direct suunta tai anturi Groove Sunlight v1.0.
2: +5 V: n liitäntä Vcc: lle IMU-10DOF.
3: +5V e Gnd conectados aos pinosrespondentes do Water sensor.
4: GND IMU-10DOF.
5: SDA/SCL-yhteys IMU-10: n kanssa.
6: Pino Sig do Water -anturi liitettynä ao pino 2.
Vaihe 3: Laiteohjelmisto Atmega328
Através da Sensors Mezzanine, joka on saatavana mikrokontrollerina Atmega328, tai mesmo hyödyntäminen ja plataformas Arduíno, ja ohjelma-lo directtamente, hyödyntäen IDE Arduíno -asennusta DragonBoardiin. Vale ressaltar que a Mezzanine ja a DragonBoard em conjunto possuem todo os periféricos välttämättömät ohjelmalle ja gravação tehdä laiteohjelmisto ilman mikrokontrolleria.
Jos laiteohjelmiston suojaus tai vastaus on toteutettu 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 Series on a DragonBoard.
*Pode on välttämätön, mukaan lukien bibliotecas utilizadas ilman laiteohjelmistoa. Elas podem ser encontradas em:
imu-10DOF
Auringonvalon anturi
O laiteohjelmiston käyttö, salauksen salaus, vesi tai vesi:
Vaihe 4: Programação Em Python
Para o programa criado, foram välttämättömyys os seguintes tuonti: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' ja 'decimal'. Foram definidos duas funções ('comJSON' e 'semJSON') que serão explicadas mais tarde.
tuoda urllib2, json #para pegar os dados da estacaoimport time #para o time.sleep () tuoda sarja #para o Arduino tuonti paho.mqtt.publish as publish #para publicar import psutil #para configurar o url tuonti desimaali #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 ohjelma
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. Jos haluat käyttää URL -osoitetta tai käyttää hakua 'urllib2.urlopen (url)', podbed tammement, näytä argumentit 'timeout = X', lähetä X uma quantidade em segundos limit to URL ser aberto. Ohjelman seuraaminen voi poistaa URL -osoitteen, joka katkaisee aikakatkaisun, tai ohjelma voi toteuttaa toiminnon 'comJSON' mencionada anteriormente. Caso não consiga abrir URL no tempo estipulado, realise-se a função 'semJSON'. Ambos kuten 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' ja uma função derivada de 'comJSON'. Iremos selittää "comJSON"
while (1): jsonurl = Ei mitään #Inicializa a varivavel como Ei tulosta 'Passo:', j print 'Atualizando dados' try: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos jos jsonurl ei ole Ei mitään: tulosta 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, mostra todos os dados paitsi: jos jsonurl ei ole mitään: tulosta '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)
Ensisijainen linha da função 'comJSON', vastaanottaa todos os dados da URL da 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 convertida dentro de variáveis e, então, mostrando esses dados na tela. Vastaanota osados do Arduíno, vastaanotin osados da estação, yksinkertainen lisäys ja sensores específicos dentro do objeto 'dados' (por examplelo ['ReturnDataSet'] ['sens_aver_6_5]') ja 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 ())
tulosta "\ 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']
tulosta 'Data:', data
print 'Velocidade do Vento:', vel_vento, 'm/s' print 'Umidade do ar:', umidade, '%'
#Käännä
vel_vento = desimaali. desimaali (vel_vento.rstrip ()) umidade = desimaali. desimaali (umidade.rstrip ())
O próximo passo é enviar todos esses dados coletados. Paikka, tarkista kolokri ja ID -kanava, Chave de Escrita ja o Host eri vaihtoehdoilla, määritä asetukset tai käytäUnsecuredTCP, 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 = Ei mitään, jos useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Ei mitään, jos useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/etc/ssl/ certificate.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" kanavat/" + kanavatunnus +"/julkaise/" + apiKey #Cria variavel com o '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: publis.single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0.5) tulosta 'Dados enviados' paitsi: tulosta 'Erro ao enviar dados'
Vaihe 5: Määritä verkkopalvelu
Paranna kadehdus os dados obtidos ao Web Service -palveluun, jossa käytetään ThingSpeak -levyä. Para tal, entramos no site thingspeak.com and criamos uma conta. Apos 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. Ei kasinoa, käyttö 7.
Ao criar um -kanava, gerado um ID -kanava, Chave de Escrita ja Chave de Leitura. Kanavan ID -tunniste on suljettu kanavan ja Chave de Escritan välillä "Chaves". Para que o código Python envie as informações obtidas para o canal é, välttämätön konfiguraatio-lo ao ID do Canal:
channelID = "Insira tai ID do Canal aqui"
Tammikuu Chave de Escritassa:
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 = Totta
useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" if useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Ei mitään, jos useUnsecuredWebsockets: tTransport = "websors tt websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificate.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" kanavat/" + kanavatunnus +"/julkaise/" + apiKey
Esimerkkinä, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), välttämätön osoitus 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 (kosteus)
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, realisation realo todo o monitoramento através de gráficos.
Suositeltava:
MONITORAMENTO DA UMIDADE DO SOLO DE UMA HORTA UTILIZANDO ARDUINO E ANDROID: 15 vaihetta
MONITORAMENTO DA UMIDADE DO SOLO DE UMA HORTA UTILIZANDO ARDUINO E ANDROID: Idea do nosso projeto monitor and monitor and a umumidade do solo de uma horta e apresentar na tela do celular para acompanhamento real
Web -radio: 5 vaihetta (kuvilla)
Web -radio: Kuukausia sitten näin M5stickC -kehityskortin Banggoodissa ja ostin sellaisen pelattavaksi. Voit hankkia sen täältä. Kokeilin paljon luonnoksia, mutta lopulta kävin tämän sivun läpi ja päätin yrittää tehdä verkkoradion. Tätä kehityskomiteaa varten
Como Subir Datos De Un Acelerómetro a Ubidots, Utilizando Arduino YÚN: 6 vaihetta
Como Subir Datos De Un Acelerómetro and Ubidots, Utilizando Arduino YÚN: Arduino Y Ú N and microcontrolador basado en el ATmega32u4 y el Atheros AR9331. Siendo el Atheros ja prosessorin kapasiteetin sopivuus ja järjestelmän operatiivinen linux basado ja OpenWrt, el Arduino Y Ú N cuenta with one version llamada OpenWrt-Yun
Como Hacer Un Abanico Con Iluminación Utilizando Littlebits: 3 vaihetta
Como Hacer Un Abanico Con Illuminación Utilizando Littlebits: En el dia dia hoy les mostrare como hacer un abanico con illuminaci ó n utilizando littlebits
Service Monitor Script Linux -palvelimille: 4 vaihetta
Service Monitor Script Linux -palvelimille: Vakaan, aina toimivan järjestelmän saaminen, vaikka käytät Linuxia, voi olla vaikea tehtävä. Nykyaikaisten ohjelmistopakettien monimutkaisuuden ja huonon koodauksen vuoksi jotkin prosessit voivat väistämättä kaatua ajoittain. Tämä voi olla huono asia, jos