Taula de continguts:
- Pas 1: Maquinari utilitzat
- Pas 2: Montagem Do Hardware
- Pas 3: Firmware Atmega328
- Pas 4: Programa Em Python
- Pas 5: Configuració del servei web O
Vídeo: Irrigações Automatizadas Com Web Service Utilitzant Python: 5 Passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:16
En aquest projecte desenvolupem un sistema de monitoratge per a plantes, que obtindrem dades d’humitat relativa a ar, premsa atmosfèrica, temperatura a l’ar, incidència UV, velocitat del vent i condició de planta (seca / molhada). Alguns desses dados são obtidos localmente, enquanto altres são obtidos por meio de um Web Service connectado à uma estação meteorològica (No cas, estem utilitzant a la Faculdade de Engenharia de Sorocaba). Após adquiridos, os dados serão disponibilised em uma apply web baseada em ThingSpeak.
Pas 1: Maquinari utilitzat
S'ha utilitzat per a la construcció d'aquest projecte:
1x Qualcomm Dragonboard 410c
1x entresòl de sensor de llavor Grove
1x sensor de llavor d'aigua
1x IMU 10OF Grove Sensor v1.0
1x Sunlight Grove Sensor v1.0
1x ratolí USB
1x Teclado USB
1x Monitor
1x Cabo HDMI
1x Adaptador HDMI-VGA
Acesso à dados da estação meteorològica FACENS
Pas 2: Montagem Do Hardware
Connecteu-vos a la placa Sensor Mezzanine à dragonboard, execute a ligação of acord com o esquemático anterior, sendo:
1: Conexão direta entre o sensor Groove Sunlight v1.0.
2: + 5V connectat al Vcc do IMU-10DOF.
3: + 5V e Gnd connectats als pinos corresponents a Water sensor.
4: GND IMU-10DOF.
5: SDA / SCL connectat al pin corresponent de l'IMU-10.
6: Pino Sig do Water sensor connectado ao pino 2.
Pas 3: Firmware Atmega328
Através da Sensors Mezzanine, és possible accedir a un microcontrolador Atmega328, o fins i tot utilitzar-lo amb plataformes Arduíno, i programar-lo directament, utilitzant un IDE Arduíno instal·lat a DragonBoard. Vale ressaltar que a Mezzanine e a DragonBoard em conjunt possuem all os periféricos necessários for a programação e gravação do firmware no microcontrolador.
O firmware embarcado é responsável por realizar as leituras dos sensores, gerenciando os protocolos de comunicação i operació dos mesmos, e após a aquisição dos dados, os encaminha via porta serial para a DragonBoard.
* Podeu necessitar una inclusió de les biblioteques utilitzades sense firmware. El podem ser trobades en:
imu-10DOF
Sensor de llum solar
El firmware utilitzat pot trobar-se aqui o aqui:
Pas 4: Programa Em Python
Per al programa criat, necessaris per a les següents importacions: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'decimal'. Foram definidos duas funções ('comJSON' e 'semJSON') que seran explicades més tard.
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 decimal #para converter
O primer passo é gravar em uma variável o endereço on onde serão obtidos os dados da Estação Meteorológica (no case estamos gravando na variável 'url'). Em seguida, inicializamos duas variáveis ('i' e 'j'), using 'i' for pegar os dados mais atuais do Array que iremos receber via JSON (com a posició més recent de Array serà a 49, inicializamos 'i' com 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 estação
i = 49 #Para pegar os dados mais atuais da estação
j = 0 #Passo do programa
Entrant no 'while (1)', inicialitzamos a variável 'jsonurl' com 'None'. Aquesta varietat irà a obrir un URL JSON, portant-la inicialment sense "mentre que", estem restablint-la tota vegada que es repeteixen o es repeteixen. El proper pas s'obrirà a l'URL utilitzant una funció 'urllib2.urlopen (url)', podent també afegir un argument 'timeout = X', sent X uma quantitatitat segons segons límit per a l'URL obert. Si el programa aconseguirà obrir una URL dins del temps i el temps d'espera, o el programa irà realitzant una funció 'comJSON' mencionada anteriorment. Cas no es consiga a obrir un URL sense temps estipulat, es realitza una funció 'semJSON'. Ambos as funções são muito parecidas, tendo as 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 explicar somente a 'comJSON'
while (1): jsonurl = Cap if jsonurl is not None: print 'Dados atualizados' comJSON (jsonurl) #Se conseguiu obrir o URL, mostra tots els dados except: 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 primera línia de funcions 'comJSON', recebem tots els dados da URL ja aberts numa variável 'dados'. Aquesta irá receber um objecte com duas Arrays, das quais iremos somente use 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à imprimint i 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, senzillament accedint a sensors específics dins de l'objecte 'dados' (per exemple '[' ReturnDataSet '] [' sens_aver_6_5] ') e então mostramos estes novos dados na tela também.
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) # inicialitza 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 ())
imprimeix "\ 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']
imprimeix 'Dades:', dades
imprimir 'Velocidade do Vento:', vel_vento, 'm / s' imprimir 'Umidade do ar:', umidade, '%'
#Converteix
vel_vento = decimal. Decimal (vel_vento.rstrip ()) umidade = decimal. Decimal (umidade.rstrip ())
El proper pas s’enviarà tots els esmentats coletats. Per a això, precisem col·locar un identificador de canal, una Xarxa d’Escrita i un Host en diverses versions, també de configuració o d’úsUnsecuredTCP, useUnsecuredWebsockets e useSSLWebsockets (usamos True, False, False). Criamos mais uma variável que irá guardar o 'caminho' para o canal, e uma altra para guardar, em String, o que serà enviat per al servidor (com totes com variàveis convertides) e então tentar publicar os dados no servidor using 'publish. single (tema, càrrega útil = tCàrrega, nom de l’amfitrió = mqttHost, port = tPort, tls = tTLS, transport = tTransport) '. A função então acaba e retorna para o loop principal.
#Envia channelID = "344243" #Canal criat per al grup apiKey = "1PK9ELK0L4AH8CVP" # Codi dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" # configurações de comunicação useUnsecuredTCP = True useUsecseWebsSockets "tcp" tPort = 1883 tTLS = Cap si useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Cap si useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/ etc / ssl / certs / ca- certificats.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels / "+ channelID +" / publish / "+ apiKey #Cria variavel com o 'caminho' for 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 all as variaveis em uma String per 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' except: print 'Erro ao enviar dados'
Pas 5: Configuració del servei web O
Per enviar-los als nostres serveis obtinguts al servei web, utilitzem una plataforma ThingSpeak. Per tal, entramos no site 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, escrivim uma descripció per a ele, e então decidimos quantos dos 8 campos possíveis utilitzaríamos. No cas, utilitzeu-nos 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". Per al codi Python enviat com a informació obtinguda per al canal, és necessari configurar-lo fins a l'ID del canal:
channelID = "Insira o ID do Canal aqui"
E também com a Chave de Escrita:
apiKey = "Insira a Chave de Escrita"
Alem da conexão com o canal criado, alsom são necessárias altres configurações no code in Python app.py:
useUnsecuredTCP = Verdader
useUnsecuredWebsockets = FalseuseSSLWebsockets = Fals mqttHost = "mqtt.thingspeak.com" si useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Cap si useUnsecuredWebsockets: tTransport = "websockets" tPort = tSport = 80 tTL websockets "tTLS = {'ca_certs':" / etc / ssl / certs / ca-certificats.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels / "+ channelID +" / publish / "+ apiKey
Per a una aplicació web realment recebada, per exemple, o valor Temperatura no camp 2 (camp que escollim per ser a Temperatura), és necessari indicar o "field2 =" + variável_temperatura, com no codi 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)
Tingut vinculat tots els dados del Canal a programação en Python, basta executar o codi que tots els dados escolhidos são enviados al Web Service. No ThingSpeak, es pot realitzar tot o monitoritzar els gràfics.
Recomanat:
Muntatge a la paret per a iPad com a tauler de control de domòtica, utilitzant un imant controlat servo per activar la pantalla: 4 passos (amb imatges)
Muntatge a la paret per a iPad Com a tauler de control de la domòtica, utilitzant un imant controlat servo per activar la pantalla: darrerament he dedicat força temps a automatitzar coses a casa i als voltants. Estic fent servir Domoticz com a aplicació domòtica; per obtenir més informació, consulteu www.domoticz.com. A la meva recerca d’una aplicació de tauler que mostri tota la informació de Domoticz
Keytar Hero (utilitzant un controlador de guitarra Wii com a sintetitzador): 7 passos (amb imatges)
Keytar Hero (utilitzant un controlador de guitarra Wii com a sintetitzador): els jocs de Guitar Hero eren de moda fa una dotzena d’anys, de manera que segur que hi haurà molts controladors de guitarra antics que recullen pols. Tenen molts botons, poms i palanques, per què no els tornareu a fer un bon ús? La guitarra controlle
Mantingueu-vos segur utilitzant aquest Bikelight amb senyals de gir: 5 passos (amb imatges)
Mantingueu-vos segurs utilitzant aquest Bikelight amb senyals de pas: M’encanta anar amb bicicleta, normalment l’utilitzo per arribar a l’escola. A l’hivern, sovint encara és fosc a l’exterior i és difícil per a altres vehicles veure els meus intermitents. Per tant, és un gran perill perquè els camions poden no veure que vull
Disseny de PCB i fresat d’aïllaments utilitzant només programari lliure: 19 passos (amb imatges)
Disseny i fresat d’aïllaments de PCB utilitzant només programari lliure: en aquest manual d’instruccions us mostraré com dissenyar i fabricar els vostres propis PCB, utilitzant exclusivament programari gratuït que s’executa al Windows i al Mac. Coses que necessiteu: ordinador amb connexió a Internet molí / enrutador, més precisa serà l’aposta
Construïu una font d'alimentació dual de 15 V utilitzant els mòduls fora de la prestatgeria per menys de $ 50: 10 passos (amb imatges)
Construïu una font d'alimentació dual de 15 V utilitzant els mòduls fora de la prestatgeria per menys de $ 50: Introducció: Si sou aficionats a l'àudio, coneixereu les fonts d'alimentació de doble carril. La majoria de plaques d'àudio de baixa potència, com ara els pre-amplificadors, requereixen des de +/- 5V fins a +/- 15V. Tenir una font d’alimentació de doble voltatge fa que sigui molt