Spisu treści:
- Krok 1: Wykorzystanie sprzętu
- Krok 2: Montagem Do Hardware
- Krok 3: Firmware Atmega328
- Krok 4: Programowanie Em Python
- Krok 5: Konfiguracja usługi sieciowej O
Wideo: Irrigações Automatizadas Com Web Service Utilizando Python: 5 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:32
Neste projeto iremos desenvolver um sistema de monitormento 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 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 sero disponibilizados w uma aplicação web baseada em ThingSpeak.
Krok 1: Wykorzystanie sprzętu
Foi utilizado para a construção deste projeto:
1x Dragonboard Qualcomm 410c
1x Antresola z czujnikiem nasion Grove
1x czujnik nasion wody;
1x czujnik Grove IMU 10OF v1.0
1x czujnik słonecznego gaju v1.0
1x mysz USB
1x Teclado USB
1x Monitor
1x kabel HDMI
1x adapter HDMI-VGA
Acesso à dados da estação meteorológica FACENS
Krok 2: Montagem Do Hardware
Após conectar a placa Sensor Mezzanine à dragonboard, wykonaj ligação de acordo com o esquemático anterior, sendo:
1: Conexão bezpośrednio przed czujnikiem Groove Sunlight v1.0.
2: +5 V łączy się z Vcc do IMU-10DOF.
3: +5V i Gnd conectados aos pinos korespondentes do czujnika wody.
4: GND IMU-10DOF.
5: SDA/SCL łączy się z korespondentem pino z IMU-10.
6: Pino Sig do Czujnik wody conectado ao pino 2.
Krok 3: Firmware Atmega328
Através z Sensors Mezzanine, można również uzyskać dostęp do mikrokontrolera Atmega328, lub można go używać na platformach Arduino, programować bezpośrednio, używać IDE Arduino zainstalowanego na DragonBoard. Vale ressaltar que a Mezzanine i DragonBoard w połączeniu z czynnościami do wykonania o peryferiach niezbędnych do programowania i gravação do oprogramowania układowego bez mikrokontrolera.
O firmware embarcado é responsável por realizar jako leituras dos sensores, gerenciando os protocolos de communicação i operação dos mesmos, e as aquisição dos dados, os encaminha przez porta serial dla DragonBoard.
* Pode ser necessario a inclusão das bibliotecas utilizadas no firmware. Elas podem ser encontradas em:
imu-10DOF
Czujnik światła słonecznego
O firmware utilizado pode ser encontrado aqui ou aqui:
Krok 4: Programowanie Em Python
Para o programa criado, foram necessários os seguintes import: „urllib2”, „json”, „time”, „serial”, „paho.mqtt.publish”, „psutil” i „decimal”. Foram definidos duas funções ('comJSON' e 'semJSON') que serão explicadas mais tarde.
import urllib2, json #dla pegar os dados da estacaoimport time #para o time.sleep() import serial #para lub Arduino import paho.mqtt.publish jako publikuj #para publicar import psutil #para configurar lub URL import dziesiętny #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 przez JSON (como a posição mais previouse da Array será a 49, inicializamos 'i' 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" #Zdefiniuj adres URL adresu
i = 49 #Para pegar os dados mais atuais da estação
j = 0 #Przejdź do programu
Entrando no 'while(1)', inicializamos a variável 'jsonurl' como 'None'. Esta variável irá brir URL JSON, portanto ao inicializarmos ela no início do „gdy”, estamos então resetando ela toda vez que repetirmos o loop. O próximo passo é brir o URL użyj função 'urllib2.urlopen(url)', podendo também adicionar um argumento 'timeout=X', wyślij X uma quantidade em segundos limite para o URL ser aberto. Se o programa conseguir brir a URL dentro do tempa do timeout, o programa irá realizar a função 'comJSON' mencionada anteriormente. Caso não consiga abrir 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' é uma função derivada de 'comJSON'. Iremos wyjaśnia część „comJSON”
while(1): jsonurl = None #Inicializa varivavel como None print 'Passo:', j print 'Atualizando dados' try: jsonurl = urllib2.urlopen(url, timeout = 5) #tena brir lub url em no max 5 segundos jeśli jsonurl nie jest None: print 'Dados atualizados' comJSON(jsonurl) #Se conseguiu abrir o URL, więcej todos os dados z wyjątkiem: jeśli jsonurl is None: print 'Erro ao atualizado dados' semJSON() #Se não o abriu mostra os dados obtidos localmente (do Arduino) pass j += 1 print '--------------------------------- -------------------------------------------------- --------------------------------------------\n' czas.snu (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 inicializar o Serial do Arduíno lub jako linhas (readline()) que o Arduíno está imprimindo i jogando as Strings convertidas dentro de variáveis e, então, mostrando esses dados on 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]') mosty tamramose ').
def comJSON(jsonurl): #envia todos os dados dados = json.loads(jsonurl.read()) #carrega os dados JSON da página ja 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())
drukuj "\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']
drukuj 'Dane:', dane
print 'Velocidade do Vento:', vel_vento, 'm/s' print 'Umidade do ar:', umidade, '%'
#Konwertuj
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 a ID do canal, Chave de Escrita e o Host em variáveis, alem de configurar o useUnsecuredTCP, useUnsecured Websockets i 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 ' single(topic, payload=tPayload, hostname=mqttHost, port=tPort, tls=tTLS, transport=tTransport)'. Função então acaba e retorna para o pętli głównej.
#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" #Código pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" #configurações komunikacji useUnsecured FalsTCP = True useUnsecuredSwebets use =PTCPUnsecured "tcp" tPort = 1883 tTLS = None if useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = None if useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs':"/etc/ssl/ certificate.crt", 'tls_version':ssl. PROTOCOL_TLSv1} tPort = 443 topic = "channels/" + ID kanału + "/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(dane) + "&field6=" + str(vel_vento) + "&field7=" + str(umidade) #Organiza todas jako variaveis em uma String do wysłania wydruku 'Enviando dados' spróbuj: publish.single(topic, payload=tPayload, hostname=mqttHost, port=tPort, tls=tTLS, transport=tTransport) #Envia os dados time.sleep(0.5) print 'Dados enviados' z wyjątkiem: print 'Błąd ao enviar dados'
Krok 5: Konfiguracja usługi sieciowej O
Dla enviar os dados obtidos ao Web Service, używaj platformy ThingSpeak. Para tal, entramos nie ma strony thingspeak.com e criamos uma conta. Após a criação e login na conta, nos dirigimos ao cabeçalho de menus -> 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 decidimos quantos dos 8 campos possíveis utilizaríamos. Brak caso, utilizamos 7.
Ao criar um canal, e gerado um ID do Canal, uma Chave de Escrita i 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 o ID do Canal aqui"
E também com a Chave de Escrita:
apiKey = "Insira Chave de Escrita"
Alem da conexão com o canal criado, também são necessá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 = None if useUnsecuredWebsockets: tTransport = "websockets if use tSLlSports = None websockets" tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt", 'tls_version':ssl. PROTOCOL_TLSv1} tPort = 443 topic = "channels/" + ID kanału + "/publish/" + Klucz API
Para que a aplicação web realmente receba, por exemplo, o wartości Temperatura nie będzie campo 2 (campo que escolhemos para serve).
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 o código que todos os dados escolhidos são enviados ao Web Service. No ThingSpeak, é possível realizar todo o monitormento através de graficos.
Zalecana:
MONITORAMENTO DA UMIDADE DO SOLO DE UMA HORTA UTILIZANDO ARDUINO E ANDROID: 15 kroków
MONITORAMENTO DA UMIDADE DO SOLO DE UMA HORTA UTILIZANDO ARDUINO E ANDROID: Idea to nosso projeto é monitorar a umidade do solo de uma Horta e presentar na tela do celular para acompanhamento real
Como Subir Datos De Un Acelerómetro a Ubidots, Utilizando Arduino YÚN: 6 kroków
Como Subir Datos De Un Acelerómetro a Ubidots, Utilizando Arduino YÚN: Arduino YÚN jest podstawowym mikrokontrolerem w ATmega32u4 i Atheros AR9331. Siendo el Atheros to narzędzie obsługujące system operacyjny linux oparty na OpenWrt, el Arduino YÚN Cuenta z wersją lamady OpenWrt-Yun
Como Hacer Un Abanico Con Iluminación Utilizando Littlebits: 3 kroki
Como Hacer Un Abanico Con Iluminación Utilizando Littlebits: En el dia de hoy les mostrare como hacer un abanico con iluminación utilizando littlebits
Zegar z żarnikiem LED w stylu „Charlotte's Web”: 10 kroków (ze zdjęciami)
Zegar z żarnikiem LED w stylu „Charlotte's Web”: Odkąd po raz pierwszy zobaczyłem żarówki z żarnikami LED, myślałem, że żarniki muszą na coś się nadawać, ale zajęło mi to do zakończenia sprzedaży lokalnego sklepu z częściami elektronicznymi kupić kilka żarówek z zamiarem rozbicia
Sparky - Zrób to sam, oparty na sieci Web Robot Telepresence: 15 kroków (ze zdjęciami)
Sparky - DIY Web-Based Telepresence Robot: Nazwa Sparky jest oparta na akronimie „Self Portrait Artifact”. Wędrujące podwozie I? niezręczny tytuł dla projektu artystycznego rozpoczętego na początku lat 90-tych. Od tego czasu Sparky wyewoluował z ogromnej zabawki RC z kilkoma ?nianiami? wideo może