Sadržaj:
- Korak 1: Utilizado hardvera
- 2. korak: Montagem Do Hardware
- Korak 3: Firmware Atmega328
- Korak 4: Programirajte Em Python
- Korak 5: Konfigurirajte O web uslugu
Video: Irrigações Automatizadas Com Web usluga Korištenje Pythona: 5 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
Neste projeto iremos desenvolver um system de monitorramento para plantações, que irá obter dados de umidade relativa do ar, pressão atmosférica, temperature 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.
Korak 1: Utilizado hardvera
Foi utilizado para a construção deste projeto:
1x Qualcomm Dragonboard 410c
1x Mezanin sa senzorom Groe Seeed
1x senzor za curenje vode
1x IMU 10OF Grove senzor v1.0
1x Sunlight Grove Sensor v1.0
1x USB miš
1x Teclado USB
1x monitor
1x Cabo HDMI
1x Adaptador HDMI-VGA
Acesso à dados da estação meteorológica LICA
2. korak: 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 senzoru Groove Sunlight v1.0.
2: +5V spojen na Vcc do IMU-10DOF.
3: +5V e Gnd conectados aos pinos korespondentes do Senzor vode.
4: GND IMU-10DOF.
5: SDA/SCL povezivanje ao pino korespondente do IMU-10.
6: Pino Sig do senzor za vodu conectado ao pino 2.
Korak 3: Firmware Atmega328
Através da Sensors Mezzanine, koji ima dodatni pristup mikrokontrolatoru Atmega328, ili više koristi plataforma Arduíno, programski-lo-diretamente, koristi IDE Arduino instaliran na DragonBoard-u. Vale ressaltar que a Mezzanine e DragonBoard em consonto possuem todo os periféricos neophodários para a programção e gravação do firmware no microcontrolador.
O ugradnji firmvera morate reagirati kao reagiranjem kao senzorima, gerenciando os protocolos de comunicação i operação dos mesmos, e após a aquisição dos dados, os encaminha putem porta serijskog programa za DragonBoard.
*Podesite potrebne stavke koje uključuju biblioteke koje ne koriste firmver. Elas podem ser encontradas em:
imu-10DOF
Senzor sunčeve svjetlosti
O upotrebi firmvera pode ser encontrado aqui ou aqui:
Korak 4: Programirajte Em Python
Za program criado, za nužne potrebe osigurate uvoz: 'urllib2', 'json', 'vrijeme', 'serijski', 'paho.mqtt.publish', 'psutil' i 'decimalni'. 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 published #para publicar import psutil #para konfigurator o url import decimal #para pretvarač
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 variaá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 prijemu passo é abrir o URL usando a função 'urllib2.urlopen (url)', podendo também adicionar um argumento 'timeout = X', sendo X uma quantidade em segundos limite para or URL ser aberto. Postupite u skladu s programom ili URL -om koji određuje tempo do vremenskog ograničenja, a program realizira funkcionalnu 'comJSON' prethodnu opciju. Caso não consiga abrir a URL no tempo estipulado, realizirajte-funkcionirajte kao 'semJSON'. Ambos kao 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 derivata de 'comJSON'. Iremos objašnjava nešto "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 ako jsonurl nije Nijedan: ispišite 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, mostra todos os dados osim: if jsonurl is 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 'vrijeme.spavati (1)
Na primjeru 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 exemplo '[' ReturnDataSet '] [' sens_aver_6_5] ') e então mostramos estes novos dados na tela tamb.
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 ())
ispis "\ nArduino"
ako je ardAgua == 1: ispišite 'Molhado' inače: ispišite 'Seco' print 'Temperatura:', ardTemp, '*C' print 'Pressao:', ardPres, 'Pa' print 'Ultra-Violeta:', ardUV, ' lx '
#Estacao
ispiši '\ nJSON' ispiši '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']
ispisati 'Podaci:', podaci
ispis 'Velocidade do Vento:', vel_vento, 'm/s' print 'Umidade do ar:', umidade, '%'
#Pretvori
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 and ID do channel, a Chave de Escrita e or 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 'objaviti. single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) '. Função então acaba e retorna para o loop principal.
#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" #Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" #configurações de comunicação = UPSovanProgramiraniSigurniTrabeSigurniUporabljeniSigurniIse koristiSigurniPoritaniIbezSigurnikoristiIbezSigurniPoristirajIbezSigurniPoristirajSigurnoPrivazniSigurniPrivazniStanovi "tcp" tPort = 1883 tTLS = Ništa ako useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Ništa ako useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/etc/s-sl certifikati.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" kanali/" + identifikator kanala +"/objava/" + apiKey #Cria variavel com o 'caminho' para o kanalu tPayload =" field1 = " + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (podaci) + "& polje6 =" + str (vel_vento) + "& field7 =" + str (umidade) #Organiza todas as variaveis em uma String para ser enviado print 'Enviando dados' try: published.single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0.5) print 'Dados enviados' osim: print 'Erro ao enviar dados'
Korak 5: Konfigurirajte O web uslugu
Za dodatne informacije o web servisu, koristite platforma ThingSpeak. Para tal, entramos no site thingspeak.com e criamos uma conta. Após a criação and login on conta, nos dirigimos ao cabeçalho de menus -> Canais -> Meus Canais e então clicamos no botão "Novi kanal". Ao clicar, escolhemos o nome do Canal, escrevemos uma descriptionção para ele, e então decidimos quantos dos 8 campos possíveis utilizaríamos. Nema caso, iskoristi 7.
Ao criar um kanal, é gerado um ID do Canal, uma Chave de Escrita e 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 vidi kao informacije o kanalu é, potrebno je konfigurirati-lo ao ID do kanala:
channelID = "Unesi ID u Canal aqui"
E também com a Chave de Escrita:
apiKey = "Insira a Chave de Escrita"
Além da conexão com o channel criado, também são neophodárias outras configurações no código em Python app.py:
useUnsecuredTCP = Istina
useUnsecuredWebsockets = FalseuseSSLWebsockets = Netačno mqttHost = "mqtt.thingspeak.com" ako useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Ništa ako useUnsecuredWebsockets: tTransport = "websoSTSS tSSeTSS" tSSS tSSe tSSe tSSerTSS tSSeTSS tSSeTSS tSSeTSS tSSeTSS tSSeTSS tSSTeSS tSSeStTSS tSSeTSS tSSeTSS tSSeStSeStSeStTSS tSSeSeStSeStSeSeSeSSeeSSSWWebsockets: tTransport = "websoSTSS" websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channel/" + channelID +"/published/" + apiKey
Para que a applicação web realmente receba, por exemplo, o valor Temperature 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 (podaci) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade)
Tendovi vinculado todos osdoos do Canal à programção em Python, basta executer o código que todos os dados escolhidos são enviados ao Web Service. No ThingSpeak, é possível realizar todo o monitorramento através de gráficos.
Preporučeni:
Korištenje Pythona za učenje rasporeda tipkovnice koji nisu engleski: 8 koraka
Korištenje Pythona za učenje rasporeda tipkovnice koji nisu na engleskom: Bok, ja sam Julien! Ja sam student informatike i danas ću vam pokazati kako možete koristiti Python da biste naučili raspored tipkovnice na jeziku koji nije engleski. Danas se puno učenja jezika događa na internetu, a jedno ljudi mogu shvatiti
Postavljanje vanjskog Bluetooth GPS davatelja usluga za Android uređaje: 8 koraka
Postavljanje za vanjskog Bluetooth davatelja GPS usluga za Android uređaje: Ova instrukcija će vam objasniti kako stvoriti vlastiti vanjski GPS s omogućenim Bluetooth-om za vaš telefon, zapaliti sve na samo oko 10 USD. Materijal: NEO 6M U-blox GPSHC-05 bluetooth modul Poznavanje povezivanje Blutooth modula niske energije Ardui
AWS i IBM: Usporedba IoT usluga: 4 koraka
AWS i IBM: Usporedba IoT usluga: Danas uspoređujemo dva snopa koji omogućuju razvoj IoT aplikacija s gledišta različitih ponuda usluga
IO vodič za IO web upravljačkog programa Korištenje web stranice uživo i primjeri rada: 8 koraka
IO vodič za IO web upravljačkog programa Korištenje web stranice uživo i primjeri rada: IO vodič za upravljački program web upravljačkog programa Korištenje web stranice uživo i primjeri rada Zadnje ažuriranje: 26.7.2015. (Često provjeravajte dok ažuriram ove upute s više detalja i primjera) Pozadina Nedavno sam imao zanimljiv izazov koji mi je predstavljen. Trebao sam
Jačanje SSL usluga na vašem web poslužitelju (Apache/ Linux): 3 koraka
Jačanje SSL usluga na vašem web poslužitelju (Apache/ Linux): Ovo je vrlo kratak vodič koji se bavi jednim aspektom kibernetičke sigurnosti - snagom ssl usluge na vašem web poslužitelju. Pozadina je da se ssl usluge na vašoj web stranici koriste kako bi se osiguralo da nitko ne može hakirati podatke koji se prenose