Სარჩევი:

Irrigações Automatizadas Com ვებ სერვისი Utilizando Python: 5 ნაბიჯი (სურათებით)
Irrigações Automatizadas Com ვებ სერვისი Utilizando Python: 5 ნაბიჯი (სურათებით)

ვიდეო: Irrigações Automatizadas Com ვებ სერვისი Utilizando Python: 5 ნაბიჯი (სურათებით)

ვიდეო: Irrigações Automatizadas Com ვებ სერვისი Utilizando Python: 5 ნაბიჯი (სურათებით)
ვიდეო: Google I/O 2023: AlphaFold, Fake Image Check & Universal Translator With Dubbing And Lip Synching 2024, ივლისი
Anonim
გამოიყენეთ ვებ სერვისი პითონის გამოყენებით
გამოიყენეთ ვებ სერვისი პითონის გამოყენებით

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 out out são obtidos por meio de um ვებ სერვისის დაკავშირება და მეტეოროლოგია მეტეოროლოგიურად (არ არის გათვალისწინებული, იყენებს მომსახურების სფეროს ენოენჰარია დე სოროკაბას). Apqus adquiridos, os dados serão disponibilizados em uma aplicação web baseada em ThingSpeak.

ნაბიჯი 1: აპარატურის გამოყენება

აპარატურის გამოყენება
აპარატურის გამოყენება

Foi utilisado para a builderçã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

1 x მაუსი USB

1 x Teclado USB

1x მონიტორი

1x Cabo HDMI

1x ადაპტატორი HDMI-VGA

Acesso à dados da estação meteorológica FACENS

ნაბიჯი 2: Montagem Do აპარატურა

Montagem Do აპარატურა
Montagem Do აპარატურა

Apés conectar a placa Sensor Mezzanine à dragonboard, შეასრულოს ligação de acordo com o esquemático anterior, sendo:

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

2: +5V conectado ao Vcc do IMU-10DOF.

3: +5V e Gnd conectados aos pinosrespondeses do წყლის სენსორი.

4: GND IMU-10DOF.

5: SDA/SCL conectado ao pinorespondente do IMU-10.

6: Pino Sig do წყლის სენსორი conectado ao pino 2.

ნაბიჯი 3: firmware Atmega328

სენსორების ანტრესოლი, შესაძლებელია მიკროკონტროლის Atmega328, ან პლატფორმების არდადეგების გამოყენება, პროგრამული უზრუნველყოფის გამოყენება, IDE არდადეგების ინსტალაცია DragonBoard– ის გამოყენებით. ეს არის მეზანინე და DragonBoard, რომელიც საშუალებას მოგცემთ გააკეთოთ პროგრამული უზრუნველყოფა და სიმძლავრე, რომელიც საჭიროა მიკროკონტროლის გარეშე.

პროგრამული უზრუნველყოფის პროგრამული უზრუნველყოფის საშუალებით თქვენ შეძლებთ გააცნობიეროთ როგორც სენსორული ინფორმაცია, ასევე შეაფასოთ ის, თუ როგორ მუშაობს ჩვენი სისტემა, ეს არის წყალმომარაგების სისტემა, რომელიც გამოიყენება DragonBoard– ის სერიული პორტალის საშუალებით.

*საჭიროა ბიბლიოთეკის გამოყენება, რომელსაც არ აქვს firmware. Elas podem ser encontradas em:

imu-10DOF

მზის სენსორი

O firmware utilizado pode ser encontrado aqui ou aqui:

ნაბიჯი 4: პროგრამა Em Python

პროგრამული Em Python
პროგრამული Em Python

პროგრამის კრიმინალის, საჭიროებისამებრ, გათვალისწინებულია იმპორტი: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'ათობითი'. 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'). ჩვენ ვიცი, inicializamos duas variáveis ('i' e 'j'), გამოყენება '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" #განსაზღვრეთ URL

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

j = 0 #Passo do programa

შესვლა არა 'ხოლო (1)', inicializamos variavel 'jsonurl' como 'None'. ეს შეიძლება შეიცავდეს URL JSON- ს, რაც ნიშნავს იმას, რომ ის არ გამოიყენებს "ხოლო" -ს, ეს ნიშნავს, რომ ის გადატვირთულია, როდესაც ის იმეორებს მარყუჟს. როდესაც თქვენ იყენებთ URL– ს და იყენებთ ფუნქციას „urllib2.urlopen (url)“, მიუთითეთ ის, რომ არგუმენტირებულად არის 'timeout = X', გამოგზავნილია X uma რაოდენობის მიხედვით, როდესაც ჩვენ ვსაუბრობთ URL– ზე. თუ ეს არის პროგრამა, რომელიც აკნინებს URL მისამართს, გააკეთეთ დრო დროის გასვლისას, ან პროგრამის განხორციელების მიზნით, შეგიძლიათ გამოიყენოთ "comJSON" წინა მენეჯმენტი. თქვენ შეგიძლიათ შეაფასოთ 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 განმარტავს somente a 'comJSON'

ხოლო (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) #იხილეთ მისამართი ან მისამართი, გარდა იმისა, რომ: jsonurl არ არის: დაბეჭდეთ 'Erro ao atualizar dados' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) გაივლის j += 1 ბეჭდვა '---------------------------------- ------------------------------------------------------ ---------------------------------------------- / n 'დრო. ძილი (1)

პირველ რიგში, ჩვენ ვსაუბრობთ "comJSON", ვიღებთ მხოლოდ თქვენს მისამართებს და ვიყენებთ 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): #envia todos os dados dados = json.loads (jsonurl.read ()) #carrega os dados JSON da página já aberta #Arduino ard = სერიული. სერიული ('/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 ().სტრიპი ()) ardUV = float (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 useUnecuredTCP, 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, მასპინძლის სახელი = mqttHost, პორტი = tPort, tls = tTLS, ტრანსპორტი = tTransport) '. გართობის 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 = არცერთი, თუ გამოიყენებაUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = არცერთი თუ გამოიყენებსSSLWebsockets: იმპორტი ssl tTransport = "websockets" tTLS = {'ca_certs'://etc/ss 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 (მონაცემები) + "& 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 ვებ სერვისი
Configurando O ვებ სერვისი

გამოიყენეთ ვებ სერვისი, გამოიყენეთ პლატფორმა ThingSpeak. ამის ნაცვლად, არ არსებობს რამ thingspeak.com და criamos uma conta. თქვენ უნდა შეხვიდეთ კონტრაქტში, რომლითაც შეგიძლიათ იხილოთ მენიუები -> Canais -> Meus Canais და entico 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. არა კასო, უტილიზამოსი 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". პითონის პარაგრაფის გაგზავნა შესაძლებელია როგორც ინფორმაციის მისაღებად, არხის გასწვრივ, თქვენ გჭირდებათ არხის კონფიგურაცია:

channelID = "Insira o ID do Canal aqui"

E também com a Chave de Escrita:

apiKey = "Insira a Chave de Escrita"

როგორც არხის კრიმინალი, საჭიროებისამებრ საჭიროა კონფიგურაცია, რომელიც არ შეიცავს პითონის აპლიკაციას. Py:

useUnsecuredTCP = მართალია

useUnsecuredWebsockets = FalseuseSSLWebsockets = ყალბი mqttHost = "mqtt.thingspeak.com" თუ გამოიყენება websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 თემა =" არხები/" + channelID +"/გამოქვეყნება/" + apiKey

როგორც ვებ აპლიკაციის რეალიზაციის მიღება, მაგალითად, ტემპერატურის არასაკმარისი კამპანია 2 (ეს არის ტემპერატურის ტემპერატურა), აუცილებელია მიუთითოთ "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 (მონაცემები) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade)

Tendo vinculado todos os dados do Canal à programação em Python, basta execaster or código todos os dados escolhidos são enviados ao Web Service. არარის საუბარი

გირჩევთ: