Obsah:

Automatizované webové služby využívající Python: 5 kroků (s obrázky)
Automatizované webové služby využívající Python: 5 kroků (s obrázky)

Video: Automatizované webové služby využívající Python: 5 kroků (s obrázky)

Video: Automatizované webové služby využívající Python: 5 kroků (s obrázky)
Video: Zavřete oči a poslouchejte 😂😂😂 2024, Červenec
Anonim
Automatizované webové služby využívající Python
Automatizované webové služby využívající Python

Nejčastěji pracujeme na tom, abychom sledovali více než jednu planetu, sledujeme její relativní relativní vlhkost, atmosférickou teplotu, teplotu do UV záření, ultrafialové záření a kondicionování planety (seca/molhada). Alguns deses dados são obtidos localmente, enquanto outros withã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). Všechny dostupné a aktualizované webové aplikace ThingSpeak.

Krok 1: Hardwarové využití

Využití hardwaru
Využití hardwaru

Využití pro konstrukci a konstrukci projektu:

1x Qualcomm Dragonboard 410c

1x Mezipatro Grove Seeed Sensor

1x senzor viděný ve vodě

1x IMU 10OF Grove Sensor v1.0

1x Sunlight Grove Sensor v1.0

1x USB myš

1x Teclado USB

1x monitor

1x Cabo HDMI

1x Adaptador HDMI-VGA

Meteorologická meteorologická zařízení

Krok 2: Montagem Do Hardware

Hardware Montagem Do
Hardware Montagem Do

Chcete -li připojit mezizanový senzor na dragonboard, proveďte přední a přední propojení a odešlete:

1: Conexão direta entre o sensor Groove Sunlight v1.0.

2: +5V konektory o Vcc do IMU-10DOF.

3: +5V a Gn konektory aos pinos korespondující s Vodním senzorem.

4: GND IMU-10DOF.

5: SDA/SCL připojení odpovídající IMU-10.

6: Pino Sig do Vodní senzor conectado ao pino 2.

Krok 3: Firmware Atmega328

Através da Sensors Mezzanine, and possível acessar um microcontrolador Atmega328, or mesmo utilizado em plataformas Arduíno, and programá-lo diretamente, use an IDE Arduíno instalada on DragonBoard. Velké množství mezzanine a DragonBoard může obsahovat všechny potřebné periferie a programové vybavení a firmware bez mikroprocesoru.

O firmwaru se můžete dozvědět více jako o senzorech, které jsou k dispozici, a proto komunikují a komunikují, a tak získávají více dat, oscaminha prostřednictvím sériových portů a DragonBoard.

*Potřebné a dostupné biblioteky nepoužívají žádný firmware. V každém případě se jedná o následující:

imu-10DOF

Senzor slunečního světla

Využití firmwaru k podpoře připojení k systému:

Krok 4: Programação Em Python

Programování v Pythonu
Programování v Pythonu

Para o programa criado, foram needários os seguintes dovoz: '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 estaoimport time #para o time.sleep () import serial #para o Arduino import paho.mqtt.publish as publish #para publicar import psutil #para configurar o url import decimal #para converter

O primo 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'), využití '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 eestação

i = 49 #Para pegar os dados mais atuais da eestação

j = 0 #Prosím do programu

Zadejte no 'while (1)', inicializujte a variável 'jsonurl' como 'None'. Mohou mít více adres URL JSON, například další inicializovat, aniž by došlo k 'while', což znamená, že se resetuje a obnoví se opakování smyčky. Další informace o adrese URL můžete použít a použít 'urllib2.urlopen (url)', podblížit více než jeden čas 'timeout = X', odeslat X uma kvantidade em segundos limite para o URL ser aberto. Vyberte jednu z možností, jak zkrátit URL do časového limitu, nebo si zrealizovat jednu z předních nabídek. 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 differentença os dados da estação ('comJSON' irá mostrar e enviar os dados da eestação, enquanto 'semJSON' não). Como 'semJSON' a hlavní funkce 'comJSON'. Iremos explicar some a '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 maxima 5 segundos pokud jsonurl není None: print 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, mostra todos os dados kromě: 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 'čas.spánek (1)

Na primární linii da comço 'comJSON', receive todos os dados da URL já abertos numa variável 'dados'. Esta irá přijímač um objeto com duas Arrays, das quais iremos someente usar uma ('ReturnDataSet'). Realizuje a operuje, inicializuje nebo sériově zpracovává 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 eses dados na tela. Příjem dat do Arduíno, přijímání a osvojování různých senzorů, jednoduché snímání snímačů, jako je například „dados“(například ukázka '[' 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) # inicializujte a přijímejte různé varianty do Arduíno #Recebe do drdos do Arduíno ardAgua = int (ard.readline (). rstrip ()) ardTemp = float (ard.readline (). rstrip ()) ardPres = int (ard.readline ().rstrip ()) ardUV = float (ard.readline (). rstrip ())

vytisknout "\ n Arduino"

if ardAgua == 1: print 'Molhado' else: print 'Seco' print 'Temperatura:', ardTemp, '*C' print 'Pressao:', ardPres, 'Pa' print 'Ultra-Violeta:', ardUV, ' lx '

#Estacao

tisk '\ nJSON' tisk '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']

tisk 'Data:', data

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

#Převést

vel_vento = decimal. Decimal (vel_vento.rstrip ()) umidade = decimal. Decimal (umidade.rstrip ())

O co největší pasáž a životní styl můžete přidat 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 (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) '. Jedná se o hlavní princip smyčky.

#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" #Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" #configurações de comunicaçãsse "tcp" tPort = 1883 tTLS = None if useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = None if useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/etc/ssl/certs/ certifikáty.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels/" + channelID +"/publish/" + 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: publish.single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0,5) tisk 'Dados enviados' kromě: tisk 'Erro ao enviar dados'

Krok 5: Konfigurace webové služby

Konfigurace webové služby
Konfigurace webové služby

Para enviar os dados tryidos ao Web Service, utilizamos a plataforma ThingSpeak. Para tal, entramos no site thingspeak.com e criamos uma conta. Přihlaste se a přihlaste se k hlavnímu menu, klikněte na něj -> 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 decisionimos quantos dos 8 campos possises is utilizaríamos. Žádné caso, využití 7.

Ao criar um canal, é 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 a a Chave de Escrita na aba "Chaves". Para que o código Python envie as informações obtidas para o canal é, needário configurá-lo ao ID do Canal:

channelID = "Insira o ID do Canal aqui"

E também com a Chave de Escrita:

apiKey = "Insira a Chave de Escrita"

Além da conexão com o canal criado, também são needárias outras configurações no código em Python app.py:

useUnsecuredTCP = True

useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com", pokud useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = None if useUnsecuredWebsockets: tTransport = "websockets tSort = 80 webové zásuvky "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" kanály/" + ID kanálu +"/publikovat/" + apiKey

Para que a aplicação web realmente receba, por exemplo, 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)

Další informace o možnostech použití kanálu v Pythonu, o jeho provedení nebo o provedení webové služby. No ThingSpeak, které mohou být realizovány na monitoru através de gráficos.

Doporučuje: