INHOUDSOPGAWE:

Gereelde automatiese weergawes van webdienste Gebruik Python: 5 stappe (met foto's)
Gereelde automatiese weergawes van webdienste Gebruik Python: 5 stappe (met foto's)

Video: Gereelde automatiese weergawes van webdienste Gebruik Python: 5 stappe (met foto's)

Video: Gereelde automatiese weergawes van webdienste Gebruik Python: 5 stappe (met foto's)
Video: Zero to Hero ControlNet Tutorial: Stable Diffusion Web UI Extension | Complete Feature Guide 2024, Julie
Anonim
Oorspronklike outomatisering van webdiens met Python
Oorspronklike outomatisering van webdiens met Python

Ons kan nie meer die stelsel monitor vir die plantações nie, maar ook vir die relatiewe druk, die atmosfeer, die temperatuur, die UV, die ventilasie en die toestand van die plant (seca/molhada). Ons kan ook 'n aantal plaaslike dienste gebruik, maar ook 'n aantal dienste wat deur die webdiens gemaak kan word, is 'n meteorológica (geen caso, estamos utilizando en da Faculdade de Engenharia de Sorocaba). Aanvullende inligting oor ons webwerf kan op ThingSpeak aangewend word.

Stap 1: Gebruik hardeware

Hardeware -gebruik
Hardeware -gebruik

Dit kan gebruik word vir die konstruksie van die volgende projekte:

1x Qualcomm Dragonboard 410c

1x Grove Seeed Sensor Mezzanine

1x Watersaag sensor

1x IMU 10OF Grove Sensor v1.0

1x Sunlight Grove Sensor v1.0

1x USB -muis

1x Teclado USB

1x monitor

1x Cabo HDMI

1x Adaptador HDMI-VGA

Acesso à dados da estação meteorológica FACENS

Stap 2: Montagem Do Hardware

Montagem Do Hardware
Montagem Do Hardware

As u 'n sensor -mezzanine op 'n draakbord kan plaas, kan u 'n ligação de acordo com esquemático anterior uitvoer:

1: Inleiding tot die sensor van Groove Sunlight v1.0.

2: +5V aansluiting oa Vcc tot IMU-10DOF.

3: +5V e Gnd conectados aos pinos correspondentes do Watersensor.

4: GND IMU-10DOF.

5: SDA/SCL kan ook korrespondente doen met IMU-10.

6: Pino Sig do Water sensor conectado ao pino 2.

Stap 3: Firmware Atmega328

Através da Sensors Mezzanine, moontlik om mikrokontroleur Atmega328 te gebruik, kan ook gebruik word in platformate Arduíno, en program-lo diretamente, gebruik en IDE-installasie van DragonBoard. Dit is moontlik om 'n mezzanine en 'n DragonBoard te gebruik, wat ook 'n noodsaaklike funksie vir 'n program en 'n hardeware vir mikrobestuurders bevat.

U kan 'n firmware -antwoord op die werklike wyse opspoor as sensore, algemene kommunikasie- en operasieprotokolle, sowel as 'n aangepaste kennis oor ons, en ons kan dit via seriële seremonies vir DragonBoard gebruik.

*Dit is noodsaaklik om 'n bybelboek te gebruik wat geen firmware bevat nie. Ons kan die volgende insluit:

imu-10DOF

Sonlig sensor

Die firmware wat u kan gebruik, is:

Stap 4: Programação Em Python

Programme van Python
Programme van 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.publiseer as publiseer #par publicar import psutil #para configurar of url invoer desimaal #par converter

O primeiro passo é gravar em uma variável of endereço de onde serão obtidos os dados da Estação Meteorológica (no caso estamos gravando na variável 'url'). Ons kan ook via JSON (in 'n 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" #Defineer of URL vir 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'. U kan ook 'n URL JSON gebruik om 'n amptelike inskrywing te maak, maar dit kan nie herhaal word nie. Ons kan ook gebruik maak van 'n URL wat gebruik kan word as 'urllib2.urlopen (url)', en ons kan ook die argument 'time -out = X' gebruik, maar ons kan dit ook vir 'n aantal limiete vir 'n URL -adres stuur. As u 'n URL kan gebruik, kan u 'n tempo neem om 'n time -out uit te voer, of om 'n funksie van 'comJSON' te maak. Ons kan nie 'n URL gebruik om 'n tempo te voltooi nie, maar dit kan 'n funksie van 'semJSON' wees. 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). As 'semJSON' kan u 'comJSON' aflei. Iremos verduidelik 'n 'comJSON'

terwyl (1): jsonurl = Geen #Inisialiseer 'n variëteit in Geen druk 'Passo:', j druk 'Atualizando dados' probeer: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos as jsonurl nie Geen is nie: druk 'Dados atualizados' comJSON (jsonurl) #Sien 'n volledige URL, maar dan is dit nie: as jsonurl Geen is: druk 'Erro ao atualizar dados' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) slaag j += 1 druk '---------------------------------- -------------------------------------------------- -------------------------------------------- / n 'tyd. slaap (1)

Na primira linha da função 'comJSON', kan u ons ook die URL van die adres já abertos numa variável 'dados' noem. Esta irá recemb 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. Ons kan ons ook herken, maar ons kan dit ook doen, maar ons kan ons ook 'dados' gebruik (byvoorbeeld '[' ReturnDataSet '] [' sens_aver_6_5] ').

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 ())

druk "\ nArduino"

as ardAgua == 1: druk 'Molhado' anders: druk 'Seco' druk 'Tempera:', ardTemp, '*C' druk 'Pressao:', ardPres, 'Pa' druk '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']

druk 'Data:', data

druk 'Velocidade do Vento:', vel_vento, 'm/s' print 'Umidade do ar:', umidade, '%'

#Omskakel

vel_vento = desimaal. Desimaal (vel_vento.rstrip ()) umidade = desimaal. Desimaal (umidade.rstrip ())

O próximo passo é enviar todos esses dados coletados. Para isso, preciesamos 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) and então tentar publicar os dados no servidor usando 'publish. single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) '. 'N 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 comunicaUsecuredSecUnsUnsCurnsPecUnsSecUnsUnsUnsUnsUnsUnsUnsUnsUnsUnsUnsUnsCurnsUnsUnsUnsCurContsUnSecUnsSecUnsUnsUnsCurseWornsUsSecUnTecSecUtSecUtSecUtSecUtSecUtSecUtSecUtSecUtSecUsSecUtSecUtUsSecUtSecUtSecUtSecUtSecUtSConSecUtUnSecUtSecUtSecUsUsTecSecUsUsUtSecUtUsUsUtSecUtUsE "tcp" tPort = 1883 tTLS = Geen indien useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Geen indien useSSLWebsockets: invoer ssl tTransport = "websockets" tTLS = {'ca_certs': "/etc/ssl/certs/ca- certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels/" + channelID +"/publish/" + apiKey #Cria variavel com 'caminho' para o kanaal 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' behalwe: print 'Erro ao enviar dados'

Stap 5: Configurando O Web Service

Konfigurasie van webdiens
Konfigurasie van webdiens

Vir ons kan u ook 'n webdiens gebruik, soos ThingSpeak. In die eerste plek, geen webwerf thingspeak.com of 'n webwerf nie. As u 'n aanmelding benodig, kan u ook die menus kies -> Canais -> Meus Canais en 'clicamos no botão' Novo Canal '. U kan ook 'n kliek, 'n naam of 'n kanaal, 'n bespreking van 'n beskrywing van 'n paar e -posse, en ook 'n groot aantal van 8 kampusse wat ons gebruik kan gebruik. Geen gebruik nie, 7.

Ao criar um canal, é gerado um ID do Canal, uma Chave de Escrita en uma Chave de Leitura. O ID to Canal se encontra abaixo do nome do canal e a Chave de Escrita na aba "Chaves". Vir Python kan ons inligting verstrek oor die kanaal, wat nodig is vir 'n ID vir Canal:

channelID = "Insira o ID to Canal aqui"

E também met Chave de Escrita:

apiKey = "Insira a Chave de Escrita"

Além da conexão com of canal criado, dit is ook noodsaaklik vir die konfigurasie van die Python -app.py:

useUnsecuredTCP = Waar

useUnsecuredWebsockets = FalseuseSSLWebsockets = Valse mqttHost = "mqtt.thingspeak.com" as useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Geen indien useUnsecuredWebsockets: tTransport = "websockets" tTortSlTTSSS = tSTLSTS = TTSLTSTSST = TTSLTSTSSTSSTSSTSTS = ifsTransportsTsTransportsTransports websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channel/" + channelID +"/publish/" + apiKey

As voorbeeld kan ons 'n werklike webwerf gebruik, byvoorbeeld deur temperatuur van die kampus 2 ('n temperatuur in die kamer), 'n noodsaaklike aanduiding van "veld2 ="+veranderlike temperatuur

tPayload = "field1 =" + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (data) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade)

Ons kan ook 'n program vir Python doen, sowel as 'n uitvoerende funksie vir ons webdiens. No ThingSpeak, dit is moontlik om die grafiek te monitor.

Aanbeveel: