Inhaltsverzeichnis:
- Schritt 1: Hardware-Nutzung
- Schritt 2: Montagem Do Hardware
- Schritt 3: Firmware Atmega328
- Schritt 4: Programação Em Python
- Schritt 5: Configurando O Webservice
Video: Irrigações Automatizadas Com Web Service Utilizando Python - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:21
Neste projeto iremos desenvolver um sistema de monitoramento 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). App-Adquiridos, os-Server-Verfügbarkeit auf einer Web-Basis in ThingSpeak.
Schritt 1: Hardware-Nutzung
Foi utilizado para a construção deste projeto:
1x Qualcomm Dragonboard 410c
1x Grove Seeed Sensor Mezzanine
1x Wassersaatsensor
1x IMU 10OF Grove-Sensor v1.0
1x Sonnenlicht Grove Sensor v1.0
1x Maus USB
1x Teclado-USB
1x Monitor
1x Cabo-HDMI
1x Adaptador HDMI-VGA
Accesso à dados da estação meteorológica FACENS
Schritt 2: Montagem Do Hardware
Após conectar a placa Sensor Mezzanine à Dragonboard, führe eine Ligação de acordo com o esquemático anterior aus, sendo:
1: Direkter Zugang zum Sensor Groove Sunlight v1.0.
2: +5V Verbindung ua Vcc mit IMU-10DOF.
3: +5V e Gnd conectados aos Pinos Correspondentes do Wassersensor.
4: Masse IMU-10DOF.
5: SDA/SCL-Verbindung ua Pino-Korrespondent mit IMU-10.
6: Pino Sig do Wassersensor conectado ao pino 2.
Schritt 3: Firmware Atmega328
Através von Sensors Mezzanine, mit einem möglichen Zugriff auf den Mikrokontroller Atmega328, oder Mesmo-Nutzung auf Plattformen von Arduíno, und Programmen zur Direktion, Nutzung einer IDE-Arduin-Installation auf DragonBoard. Vale ressaltar que a Mezzanine e a DragonBoard em conjunto possuem todo os periféricos notables for 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 aquisição dos dos, os encaminha via porta serial para a DragonBoard.
*Pode ser necessario a inclusão die bibliotecas utilizadas keine Firmware. Elas podem ser encontradas em:
imu-10DOF
Sonnenlichtsensor
O Firmware utilizado pode ser encontrado aqui ou aqui:
Schritt 4: Programação Em Python
Para o programa criado, foram os seguintes imports: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' und 'decimal'. Foram definidos duas funções ('comJSON' und '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 #para publicar import psutil #para configurar o url import dezimal #para Konverter
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 newe 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 oder URL zur Einrichtung
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 então resetando ela toda vez que repetirmos o loop. O próximo 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 o URL Ser aberto. Se o programa conseguir abrir a URL dentro do tempo do timeout, o programa irá realizar a função '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' ist uma função derivada de 'comJSON'. Iremos explicar somente 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 máximo 5 segundos if jsonurl is not None: print 'Dados atualizados' comJSON(jsonurl) #Se conseguiu abrir o o dados, mostra todos os dados außer: 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'time.sleep (1)
Na primeira linha da função 'comJSON', recebemos todos os dados da URL ja 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 esse 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' (von exemplo '['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) # ardAgua = int(ard.readline().rstrip()) ardTemp = float(ard.readline().rstrip()) ardPres = int(ard.readline.) ().rstrip()) ardUV = float(ard.readline().rstrip())
drucke "\nArduino"
if ardAgua == 1: drucke 'Molhado' else: drucke 'Seco' drucke 'Temperatura:', ardTemp, '*C' drucke 'Pressao:', ardPres, 'Pa' drucke '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']
'Daten:' drucken, Daten
print 'Velocidade do Vento:', vel_vento, 'm/s' print 'Umidade do ar:', umidade, '%'
#Konvertieren
vel_vento = dezimal. Dezimal(vel_vento.rstrip()) umidade = dezimal. Dezimal(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 serveridor (com todas as variáveis convertidas) und então tentar publicar os dados no'publishando single(topic, payload=tPayload, hostname=mqttHost, port=tPort, tls=tTLS, transport=tTransport)'. A 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 useUnsecuredTCPs = FalseWeb use ifsecuredTCP = True use if "tcp" tPort = 1883 tTLS = Keine bei useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Keine bei useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs':"/etc/s-l/ certificate.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) print 'Dados enviados' außer: print 'Erro ao enviar dados'
Schritt 5: Configurando O Webservice
Für alle anderen als Web-Service-Dienste, die auf einer Plattform von ThingSpeak verwendet werden. Para tal, entramos keine Site Thingspeak.com und Criamos uma conta. Apoes a criação and login na conta, nos dirigimos ao cabeçalho de menus -> Canais -> Meus Canais und então clicamos no botão "Novo Canal". Ao clicar, escolhemos oder nome do Canal, escrevemos uma descrição para ele, e então decidimos quantos dos 8 campos possíveis utilizaríamos. Kein caso, utilizamos 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 e a Chave de Escrita na aba "Chaves". Para que o código Python envie as informações obtidas para o canal é, necessário configurá-lo ao ID do Canal:
channelID = "Insira oder 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 encessárias outras configurações no código em Python app.py:
useUnsecuredTCP = True
useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" if useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Keine wenn useUnsecuredWebsockets: tSLTransport = "tWebsocketsst NoneSlTransport = "tWebsockets = 80Sockets" websockets" tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt", 'tls_version':ssl. PROTOCOL_TLSv1} tPort = 443 topic = "channels/" + channelID + "/publish/" + API-Schlüssel
Para que a aplicação web realmente receba, por exemplo, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), é necessario 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 executar oder código que todos os dados escolhidos são enviados ao Web Service. No ThingSpeak, é possível realizar todo or monitoramento através de gáficos.
Empfohlen:
So erstellen Sie Ihre erste einfache Software mit Python – wikiHow
So erstellen Sie Ihre erste einfache Software mit Python: Hallo, willkommen zu diesem Instructables. Hier werde ich erzählen, wie Sie Ihre eigene Software erstellen. Ja, wenn Sie eine Idee haben… aber wissen, wie Sie neue Dinge umsetzen können oder daran interessiert sind, Neues zu schaffen, dann ist es das Richtige für Sie
COVID19-Dashboard auf Weltkarte (mit Python) – wikiHow
COVID19-Dashboard auf der Weltkarte (mit Python): Ich weiß, dass fast alle von uns die meisten Informationen über COVID19 kennen , ich habe das Programm zum Github-Repository hinzugefügt: https://github.co
Raspberry Pi Web Stream Kit - Teil 1: 5 Schritte
Raspberry Pi Web Stream Kit - Teil 1: Hier ist ein einfaches, aber etwas hässliches Kamera-Kit, das ich zusammengestellt habe, um Schulveranstaltungen wie ein Qualifikationsturnier der FIRST LEGO League zu unterstützen. Der Zweck besteht darin, ein einzelnes Drop-In-Kit zu ermöglichen, das 4 Webstreams an einen externen Computer liefert. Nein
Rufen Sie das Web an!: 4 Schritte
Ring the Web!: Ring the Web ist für die Beeinflussung von Websites von lokalen/realen Orten. Mehr Infos dazu: http://makker.hu/RingTheWeb/Sie benötigen: 1 Taster 10k Widerstand Arduino (jeder Typ) Kabel kleiner, stromsparender Computer - in diesem Fall ein RPi-Zugang zu einem Server
Kahoot! Web 2.0 Tool – Anleitung zur Erstellung von Quiz für Lehrer – wikiHow
Kahoot! Web 2.0-Tool-Quiz-Erstellungsanweisungen für Lehrer: Das folgende Instructable soll Lehrern zeigen, wie die Quiz-Erstellungsfunktion für das Web 2.0-Tool Kahoot verwendet wird! Kahoot! kann als digitales Spielwerkzeug zum Überprüfen und Bewerten von studentischem Inhaltswissen in verschiedenen Fächern und zu mehreren