Բովանդակություն:
- Քայլ 1: Սարքավորումների օգտագործում
- Քայլ 2: Montagem Do Hardware
- Քայլ 3: Fրագրակազմ Atmega328
- Քայլ 4: Programação Em Python
- Քայլ 5: Configurando O վեբ ծառայություն
Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:51
Neste projeto iremos desenvolver um sistema de monitoramento para plantações, que irá obter obos 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 Web Connectado um estuma 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.
Քայլ 1: Սարքավորումների օգտագործում
Foi utilizado para a construção deste projeto:
1x Qualcomm Dragonboard 410c
1x Grove Seeed Sensor միջահարկ
1x ջրի սենսոր
1x IMU 10OF Grove Sensor v1.0
1x Sunlight Grove Sensor v1.0
1x մկնիկ USB
1 x Teclado USB
1x մոնիտոր
1x Cabo HDMI
1x Adaptador HDMI-VGA
Acesso à dados da estação meteorológica ԴԵՄՔԵՐ
Քայլ 2: Montagem Do Hardware
Após conectar a placa Sensor Mezzanine à dragonboard, execute a ligação de acordo com o esquemático anterior, sendo:
1. Արգելափակման արագացում սենսորից Groove Sunlight v1.0:
2: +5V conectado ao Vcc do IMU-10DOF:
3: +5V e Gnd conectados aos pinosrespondentes do ջրի տվիչ:
4: GND IMU-10DOF:
5: SDA/SCL- ի կոնտակտային կամ այլընտրանքային կապեր IMU-10- ի հետ:
6: Pino Sig do Water sensor conectado ao pino 2:
Քայլ 3: Fրագրակազմ Atmega328
Através da Sensors Mezzanine- ը, որը կարող է օգտագործվել միկրոկոնտրոլոդոր Atmega328- ի միջոցով, ինչպես նաև օգտագործելով Arduíno պլատֆորմների, օգտագործելով ծրագրային ապահովման միջոցներ, օգտագործելով IDE Arduíno- ի տեղադրումը DragonBoard- ի միջոցով: Vale ressaltar que a Mezzanine and a DragonBoard em conjunto possuem todo os periféricos needcriosos for a programação e gravação do firmware no microcontrolador.
O firmware embarcado é respondável for leituras dos sensores, gerenciando os protocolos de comunicação e operação dos mesmos, e após a aquisição dos dados, os encaminha via porta serial para a DragonBoard.
*Անհրաժեշտ է ներառել գրադարանային ծրագրաշարի օգտագործումը: Elas podem ser encontradas em:
imu-10DOF
Արևի լույսի ցուցիչ
O firmware utilizado pode ser encontrado aqui ou aqui:
Քայլ 4: Programação Em Python
Para o programa criado, foram needários os seguintes ներմուծում. Foram definidos duas funções ('comJSON' e 'semJSON') que serão explicadas mais tarde.
ներմուծել urllib2, json #para pegar os dados da estacaoimport time #para o time.sleep () import serial #para o Arduino import paho.mqtt. հրապարակել որպես հրապարակման #para publicar import psutil #para configurar o url import տասնորդական #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'), օգտագործելով 'i' para pegar os dados mais atuais do Array que iremos receber միջոցով 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" #URL- ի սահմանում
i = 49 #Para pegar os dados mais atuais da estação
j = 0 #Passo do programa
Մուտքագրեք no 'while (1)', inicializamos a variável 'jsonurl' como 'None': Դա կարող է լինել URL JSON- ի հղում, որը թույլ է տալիս օգտագործել «մինչդեռ» -ը, այնուհետև վերականգնում է այն, ինչը թույլ է տալիս կրկնել օղակը: O próximo passo é abrir կամ URL- ի միջոցով կարող եք օգտվել 'urllib2.urlopen (url)', ենթադրաբար դիտեք մեր ժամանակը 'timeout = X', ուղարկելով X uma քանակություն, քանի որ այն սահմանափակվում է URL հասցեով: Se o programa conseguir abrir a URL dentro do tempo do timeout, o programa irá realizar a função 'comJSON' mencionada anteriormente. Հետևաբար, անհրաժեշտ է ջնջել URL- ն ՝ առանց որևէ արագության, իրականացնում է «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- ը պարզաբանում է «comJSON» - ը
while (1): jsonurl = Ոչ մեկը #Inicializa a varivavel como Ոչ մեկը չի տպում 'Passo:', j print 'Atualizando dados' try: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos եթե jsonurl- ը Ոչ մեկը չէ. տպեք 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, mostra todos os dados բացառությամբ. եթե jsonurl- ը Չկա. mostra os dados obtidos localmente (do Arduino) անցնել j += 1 տպագիր '---------------------------------- ------------------------------------------------------ ---------------------------------------------- / n 'ժամանակը: քնել (1)
Na primira linha da função 'comJSON', Recebemos todos os dados da URL- ը կարող եք օգտագործել բազմաթիվ տարբերակներ '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 nov.
def comJSON (jsonurl). 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 ().հերթ ()) ardUV = բոց (ard.readline (). rstrip ())
տպել "\ nArduino"
եթե ardAgua == 1: տպել 'Molhado' այլ. տպել 'Seco' print 'Temperatura:', ardTemp, '*C' print 'Pressao:', ardPres, 'Pa' print 'Ultra-Violeta:', ardUV, ' lx '
#Էստակաո
տպել '\ nJSON' տպել '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']
տպել 'Տվյալներ.', տվյալներ
տպել 'Velocidade do Vento:', vel_vento, 'm/s' print 'Umidade do ar:', umidade, '%'
#Փոխակերպել
vel_vento = տասնորդական. տասնորդական (vel_vento.rstrip ()) umidade = տասնորդական: տասնորդական (umidade.rstrip ())
O próximo passo é enviar todos esses dados coletados: Բացի այդ, ճշգրիտ կերպով ընտրեք ID- ի ջրանցք, Chave de Escrita e o Host em variáveis, além de configurar o useUneccuredTCP, useUnsecuredWebsockets և 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) եւ então tentar publicar os dados no servidor usando 'հրապարակել: միայնակ (թեմա, բեռ = 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 comunicaced "tcp" tPort = 1883 tTLS = Չկա, եթե օգտագործվում է UnccuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Ոչ մեկը, եթե օգտագործում էSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 թեմա =" ալիքներ/" + channelID +"/հրապարակում/" + 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: published.single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0.5) տպել «Dados enviados» բացառությամբ. տպել «Erro ao enviar dados»
Քայլ 5: Configurando O վեբ ծառայություն
Օգտագործելով վեբ ծառայություն, օգտագործեք պլատֆորմ ThingSpeak- ը: Բացի այդ, entramos no site thingspeak.com e criamos uma conta. Կիրառվում է մուտքի թույլտվություն, որը կարող է մուտքագրվել ընտրացանկերում -> Canais -> Meus Canais և entico clicamos no botão «Նովո ջրանցք»: 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: Ոչ 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 é, 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 = Կեղծ mqttHost = "mqtt.thingspeak.com", եթե օգտագործվում է UnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Ոչ մի դեպքում, եթե useUnsecuredWebsockets: tTransportsSS = TTT տրանսպորտի websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 թեմա =" ալիքներ/" + channelID +"/հրապարակել/" + apiKey
Para que a aplicação web realmente receba, por exemplo, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), անհրաժեշտ է նշել «field2 = +variável_temperatura, como no código a seguir:
tPayload = "field1 =" + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + փող (տվյալներ) + "& field6 =" + փող (vel_vento) + "& field7 =" + փող (umidade)
Oրագրի միջոցով կարող եք ջնջել ջնջված ծրագրերը Python- ի միջոցով, որը կարող է իրականացվել որպես վեբ ծառայություն: No ThingSpeak, դա հնարավոր է իրականացնել todo o monitoramento através de gráficos- ով:
Խորհուրդ ենք տալիս:
MONITORAMENTO DA UMIDADE DO SOLO DE UMA HORTA UTILIZANDO ARDUINO E ANDROID: 15 քայլ
MONITORAMENTO DA UMIDADE DO SOLO DE UMA HORTA UTILIZANDO ARDUINO E ANDROID:
Como Subir Datos De Un Acelerómetro a Ubidots, Utilizando Arduino YÚN: 6 քայլ
Como Subir Datos De Un Acelerómetro a Ubidots, Utilizando Arduino YÚN ՝ Arduino Y Ú N es un microcontrolador basado en el ATmega32u4 y el Atheros AR9331: Siendo el Atheros un procesador capaz de soportar un sistema operativo linux basado en OpenWrt, el Arduino Y Ú N cuenta con una version llamada OpenWrt-Yun- ի միջոցով:
Como Hacer Un Abanico Con Iluminación Utilizando Littlebits: 3 քայլ
Como Hacer Un Abanico Con Iluminación Utilizando Littlebits- ը:
Ciclop 3D Scanner My Way Քայլ առ քայլ ՝ 16 քայլ (նկարներով)
Ciclop 3D Scanner My Way Քայլ առ քայլ. Ողջույն, ես գիտակցելու եմ հանրահայտ Ciclop 3D սկաները: Բոլոր այն քայլերը, որոնք լավ բացատրված են սկզբնական նախագծում, ներկա չեն: Ես որոշ շտկումներ կատարեցի ՝ գործընթացը պարզեցնելու համար, նախ Ես տպում եմ հիմքը, իսկ հետո վերականգնում եմ PCB- ն, բայց շարունակում եմ
ESP8266 -NODEMCU $ 3 WiFi մոդուլ #2 - WEB ԷAGEԻ միջոցով վերահսկվող անլար կապում. 9 քայլ (նկարներով)
ESP8266 -NODEMCU $ 3 WiFi մոդուլ #2 - WEB ԷAGEԻ միջոցով վերահսկվող անլար կապում. Այս միկրոհաշվարկների նոր աշխարհ է եկել, և սա ESP8266 NODEMCU- ն է: Սա առաջին մասն է, որը ցույց է տալիս, թե ինչպես կարող եք esp8266 միջավայրը տեղադրել ձեր arduino IDE- ում ՝ սկսած տեսանյութի միջոցով և որպես մասեր