Агуулгын хүснэгт:

Irrigações Automatizadas Com Web Service Utilizando Python: 5 алхам (зурагтай)
Irrigações Automatizadas Com Web Service Utilizando Python: 5 алхам (зурагтай)

Видео: Irrigações Automatizadas Com Web Service Utilizando Python: 5 алхам (зурагтай)

Видео: Irrigações Automatizadas Com Web Service Utilizando Python: 5 алхам (зурагтай)
Видео: Become A Master Of SDXL Training With Kohya SS LoRAs - Combine Power Of Automatic1111 & SDXL LoRAs 2024, Долдугаар сарын
Anonim
Irrigações Automatizadas Com Web Service Utilizando Python
Irrigações Automatizadas Com Web Service Utilizando Python

Хяналт шалгалтын систем, дэлгэцийн төлөв байдал, агаар мандал, температур, хэт ягаан туяа, хэт ягаан туяа, вело видо, кондичао планта (сека/молхада). 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). Энэ нь ThingSpeak -ийн вэбсайтыг ашиглахаас өөр аргагүй юм.

Алхам 1: Hardware Utilizado

Техник хангамж Utilizado
Техник хангамж Utilizado

Төслийн хувьд дараахь зүйлийг хийх шаардлагатай болно.

1х Qualcomm Dragonboard 410c

1x Grove харсан мэдрэгч Mezzanine

1х ус харагч мэдрэгч

1х IMU 10OF Grove Sensor v1.0

1х нарны гэрлийн төгөл мэдрэгч v1.0

1х хулганы USB

1 x Teclado USB

1х дэлгэц

1x Cabo HDMI

1х Adaptador HDMI-VGA

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

Алхам 2: Montagem Do Hardware хийх

Montagem техник хангамж хийдэг
Montagem техник хангамж хийдэг

Луузны хавтангийн мэдрэгчийг байрлуулж, урд талд нь ажиллуулна уу.

1: Нарны гэрэл Groove v1.0 мэдрэгчтэй.

IMU-10DOF-ийн 2: +5V контакта.

3: +5V e Gnd conectados aos pinos корреспондентууд усны мэдрэгч хийдэг.

4: GND IMU-10DOF.

5: SDA/SCL нь IMU-10-тэй харилцдаг.

6: Pino Sig do Water sensor conectado ao pino 2.

Алхам 3: Firmware Atmega328

Мэдрэгч төхөөрөмжүүд нь Mezzanine, мөн микроконтроллер Atmega328-ийг ашиглах боломжтой бөгөөд энэ нь програм хангамж, програм хангамж, IDE програмыг DragonBoard дээр ашиглах боломжтой болно. Mezzanine, a DragonBoard нь компьютерийн програм хангамжийн хувьд микроконтроллергүй байхын тулд програм хангамжийг ашиглах шаардлагатай болно.

Мэдрэгч, мэдрэгч, програм хангамжийн харилцаа холбоо, үйлдлийн систем, програм хангамж, програм хангамжийг DragonBoard -ээр дамжуулан дамжуулах програм хангамжийн баталгаажуулалт.

*Библиотекас програм хангамжийн програм хангамж ашиглах шаардлагагүй болно. Тэмдэглэл:

imu-10DOF

Нарны гэрэл мэдрэгч

O firmware utilizado pode ser encontrado aqui ou aqui:

Алхам 4: Python програм хангамж

Python програм хангамж
Python програм хангамж

Импортлох програмууд: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'decimal'. Foram Definidos duas funções ('comJSON' e '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.pub нийтлэх хэлбэрээр нийтлэх

O primiro 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'). Жишээ нь, янз бүрийн хувилбарууд ('i' e 'j'), utilizando 'i' параграфууд нь JSON -ээр дамжуулагдах боломжтой (como a posichão mais sone 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 #Пара эрхлэгч

j = 0 #Хөтөлбөр хийх

Үгүй бол 'while (1)' гэж оруулна уу, 'jsonurl' como 'None' гэсэн сонголтыг хийгээрэй. Энэ нь URL JSON -ийг өөрчилснөөр, ямар ч тохиолдолд 'while' хийх боломжгүй болно. Хязгааргүй URL хаягийг ашиглах нь 'urllib2.urlopen (url)', нэмэлт өгөгдлүүдтэй холбоотой 'timeout = X' гэсэн утгатай бөгөөд энэ нь URL хаягийг устгах боломжтой болно. Хөтөлбөрийг тохируулахын тулд та цаг дуусах ёстой бөгөөд энэ нь 'comJSON' програмыг ашиглах боломжтой болно. Ашиглах URL нь ямар ч хэмнэлттэй биш, харин 'semJSON' функцтэй болно. Ambos нь 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' e uma função derivada de 'comJSON'. Iremos 'comJSON' -ийг тайлбарласан болно

while (1): jsonurl = None #Inicializa a varivavel como Биш хэвлэх 'Passo:', j print 'Atualizando dados' оролдох: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos Хэрэв jsonurl None биш бол: 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, mostra todos os dados -с бусад зүйлийг хэвлэ: хэрэв jsonurl None бол: хэвлэх 'Erro ao atualizar dados' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) pass j += 1 print '---------------------------------- -------------------------------------------------- ------------------------------------------ / n 'цаг. унтах (1)

Нэн тэргүүнд 'comJSON', мөн "аав" гэсэн URL -уудыг дахин ашиглах боломжтой. Хүлээн авагч нь маш олон янзын арга хэмжээ авах боломжтой бөгөөд 'ReturnDataSet' юм. Бодит байдал, үйл ажиллагааны дараалал, дараалал нь цуваа хэлбэрээр унших (унших шугам) (эсвэл унших шугам) (эсвэл унших мөр ()) нь Strings -ийг өөрчилж, өөрчилж, өөрчилж болно. Recebidos os dados do Arduíno, reseptoremos os dados da estação, simplesmente acessando os sensors específicos dent sens do do objeto 'dados' (жишээ нь '' 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) # Induliza a variavel que receptberá 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 ())

"\ nArduino" хэвлэх

if ardAgua == 1: хэвлэх 'Molhado' өөр: хэвлэх 'Seco' хэвлэх 'Temperatura:', ardTemp, '*C' хэвлэх 'Pressao:', ardPres, 'Pa' хэвлэх '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' хэвлэх 'Umidade do ar:', umidade, '%' хэвлэх

#Хувиргах

vel_vento = аравтын. Аравтын (vel_vento.rstrip ()) umidade = аравтын. Аравтын (umidade.rstrip ())

Охидын мэдлэг, ойлголтын тухай аав, ээж, найз нөхөд. Үүний зэрэгцээ, тодорхой суваг бүхий ID -ийн суваг, Chave de Escrita, o Host -ийн тохиргоог тохируулах, ХамгаалагдаагүйTCP -ийг тохируулах, SecUsecuredWebsockets ашиглах SSSLWebsockets (usamos Үнэн, Худал, Хуурамч). Criamos mais uma variável que irá guardar o 'caminho' para o channel, e uma outra para guardar, em String, o que será enviado para o servidor (com todas as variáveis convertidas) e public tentar publicar os dados no servidor usando 'нийтлэх. ганц бие (сэдэв, ачаалал = tPayload, хостын нэр = mqttHost, порт = tPort, tls = tTLS, тээвэр = tTransport) '. А давталтын гол үүрэг гүйцэтгэгч.

#Envia channelID = "344243" #Canal criado Пара о Grupo apiKey = "1PK9ELK0L4AH8CVP" # Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" # configurações де comunicação useUnsecuredTCP = True useUnsecuredWebsockets = Худал useSSLWebsockets = Хуурамч useUnsecuredTCP бол: tTransport = "tcp" tPort = 1883 tTLS = UseUnsecuredWebsockets бол байхгүй: tTransport = "websockets" tPort = 80 tTLS = UseSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs'://// cert.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" сувгууд/" + channelID +"/нийтлэх/" + apiKey #Cria variavel com o 'caminho' para o channel tPayload =" field1 = " + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (data) + "& field6 =" + str ", port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0.5) хэвлэх 'Dados enviados' -ээс бусад: 'Erro ao enviar dados' хэвлэх

Алхам 5: Вэб үйлчилгээг тохируулах

Вэб үйлчилгээг тохируулах
Вэб үйлчилгээг тохируулах

Вэб үйлчилгээ эсвэл ThingSpeak -ийг ашиглах боломжтой. Тайлбар, сайтууд байхгүй бол thingspeak.com e criamos uma conta. Нэвтрэхээс өмнө цэсийг нээхээс өөр аргагүй болно -> Canais -> Meus Canais e então clicamos no novoo "Novo Canal". Товчлуур, сувгийн нэр томъёо, эскреевмос нь тодорхой ойлголтыг өгдөг. Caso байхгүй, utilizamos 7.

Суваг, суваг, ID суваг, Chave de Escrita e uma Chave de Leitura. O ID do Canal se encontra abaixo do nome do kanal e a Chave de Escrita na "Chaves" гэх мэт. Python нь суваг, сувгийн мэдээллийн тохиргоог хийх шаардлагатай гэж үзсэний үндсэн дээр:

channelID = "Canal aqui ID эсвэл ID ID"

Chave de Escrita -ийн танилцуулга:

apiKey = "Инсира а Чаве де Эскрита"

Python app.py програмыг ашиглах боломжгүй, тохиргоог хийх шаардлагагүй болно.

useUnsecuredTCP = Үнэн

useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" if useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = None if useUnsecuredWebsockets: tTranstSortSortSortSportSetNet вэбсокетууд "tTLS = {'ca_certs':"/etc/ssl/certs/ca-sertifikatlar.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 сэдэв =" сувгууд/" + channelID +"/нийтлэх/" + apiKey

Жишээ нь, вэбсайтын гүйцэтгэл, жишээ нь, ямар ч хүчирхийлэлгүй температур 2 (кампусын хамгаалалт), "талбар2 ="+хувьсах_температура, ямар ч асуудал байхгүй:

tPayload = "field1 =" + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (өгөгдөл) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade)

Python -ийн програм хангамж, сувгийн програм хангамж, вэбсайт эсвэл эцэг эхийн харилцаа холбоог сайжруулах програмууд. ThingSpeak байхгүй тул та үүнийг хийх боломжтой болно.

Зөвлөмж болгож буй: