Cov txheej txheem:
- Kauj ruam 1: Khoos phis tawj siv
- Kauj Ruam 2: Montagem Ua Kho Vajtse
- Kauj ruam 3: Firmware Atmega328
- Kauj Ruam 4: Txoj Haujlwm Em Python
- Kauj ruam 5: Configurando O Web Service
Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 Kauj Ruam (nrog Duab)
2024 Tus sau: John Day | [email protected]. Kawg hloov kho: 2024-01-30 09:30
Neste projeto iremos desenvolver um sistema de monitoramento 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 (Tsis muaj 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.
Kauj ruam 1: Khoos phis tawj siv
Kev siv rau kev tsim cov phiaj xwm phiaj xwm:
1x Qualcomm Dragonboard 410c
1x Grove Pom Sensor Mezzanine
1 x Dej Pom Sensor
1x IMU 10OF Grove Sensor v1.0
1x Tshav Ntuj Grove Sensor v1.0
1x Mus USB
1 x Teclado USB
1x Saib
1 x Cabo HDMI
1x Adaptador HDMI-VGA
Acesso -dados da estação meteorológica FACENS
Kauj Ruam 2: Montagem Ua Kho Vajtse
Após conectar a placa Sensor Mezzanine à dragonboard, ua rau ligação de acordo com o esquemático anterior, xa:
1: Conexão direta entre o sensor Groove Sunlight v1.0.
2: +5V conectado ao Vcc ua IMU-10DOF.
3: +5V e Gnd conectados aos pinos correspondentes ua Dej sensor.
4: GND IMU-10DOF.
5: SDA/SCL sib tham ao pino tus neeg sau xov xwm ua IMU-10.
6: Pino Sig ua Dej sensor conectado ao pino 2.
Kauj ruam 3: Firmware Atmega328
Através da Sensors Mezzanine, é possível acessar um microcontrolador Atmega328, o mesmo utilizado em plataformas Arduíno, e programá-lo diretamente, siv thiab IDE Arduíno instalada na DragonBoard. Vale ressaltar que a Mezzanine e a DragonBoard em conjunto possuem todo os periféricos necessários para 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 e operação dos mesmos, e após aquisição dos dados, os encaminha via porta serial para a DragonBoard.
*Pode ser necessario a inclusão das bibliotecas utilizadas tsis muaj firmware. Elas podem ser encontradas em:
ib -10DOF
Tshav ntuj Sensor
O firmware utilizado pode ser encontrado aqui ou aqui:
Kauj Ruam 4: Txoj Haujlwm Em Python
Para o programa criado, foram necessários os seguintes import: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'decimal'. Foram definidos duas funções ('comJSON' e 'semJSON') que serão explicadas mais tarde.
ntshuam urllib2, json #para pegar os dados da estacaoimport lub sijhawm #para o time.sleep () ntshuam serial #para o Arduino ntshuam paho.mqtt.publish li tshaj tawm #para publicar import psutil #para configurar o url import decimal #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 (tsis muaj 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 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" #Txhais qhov URL da estação
i = 49 #Para pegar os dados mais atuais da estação
j = 0 #Passo ua programa
Entrando tsis 'thaum (1)', inicializamos a variável 'jsonurl' como 'Tsis muaj'. Esta variável irá abrir a URL JSON, portanto ao inicializarmos ela no início do 'thaum', estamos então resetando ela toda vez que repetirmos o loop. Koj tuaj yeem siv qhov URL nkag mus rau kev lom zemo 'urllib2.urlopen (url)', podendo também adicionar um argumento 'timeout = X', sendo X uma quantidade em segundos limite para o URL ser aberto. Yog tias koj tab tom nrhiav lub khoos phis tawj URL txuas rau lub sijhawm ua haujlwm tas sijhawm, lossis programa irá realizar a função 'comJSON' mencionada anteriormente. Caso não consiga abrir qhov URL tsis muaj lub sijhawm nrawm, ua kom pom tseeb-zoo li 'semJSON'. Ambos li 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 piav qhia qhov tseeb ntawm 'comJSON'
thaum (1): jsonurl = Tsis muaj #Inicializa a varivavel como Tsis muaj luam tawm 'Passo:', j luam 'Atualizando dados' sim: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos yog jsonurl tsis yog Tsis muaj: luam 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, feem ntau todos os dados tshwj tsis yog: yog jsonurl Tsis muaj: luam 'Erro ao atualizar dados' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (ua Arduino) dhau j += 1 luam '---------------------------------- ----------------------------------------------------------------------- -------------------------------------------- / n 'time.s pw (1)
Hauv qhov tseem ceeb tshaj plaws ntawm função 'comJSON', txais tos todos os dados da URL já 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 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 novomos.
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) # 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 ())
sau "\ nArduino"
yog tias ardAgua == 1: luam tawm 'Molhado' ntxiv: luam 'Seco' luam tawm 'Temperatura:', ardTemp, '*C' print 'Pressao:', ardPres, 'Pa' print 'Ultra-Violeta:', ardUV, ' lx '
#Estacao
luam '\ nJSON' luam tawm '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']
print 'Cov ntaub ntawv:', cov ntaub ntawv
sau 'Velocidade do Vento:', vel_vento, 'm/s' print 'Umidade do ar:', umidade, '%'
#Converte
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, além de configurar o useUnsecuredTCP, useUnsecuredWebsockets e useSSLWebsockets (usamos Muaj tseeb, Tsis tseeb, Tsis tseeb). Criamos mais uma variável que irá guardar o 'caminho' para o kwj dej, 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 'tshaj tawm. ib leeg (ntsiab lus, them nyiaj = tPayload, hostname = mqttHost, chaw nres nkoj = tPort, tls = tTLS, thauj = tTransport) '. Ib qho kev lom zem zoo rau lub tsev kawm ntawv rov ua haujlwm rau tus thawj xibfwb.
#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" #Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" #configurações de comunicação useUnsecuredPets = ใช้ งาน ได้ จริง "tcp" tPort = 1883 tTLS = Tsis muaj yog tias sivUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Tsis muaj yog tias siv SSLWebsockets: ntshuam ssl tTransport = "websockets" tTLS = {'ca_certs': "/etc/ssl certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 lub ncauj lus =" raws/" + channelID +"/tshaj tawm/" + apiKey #Cria variavel com o 'caminho' rau o kwj dej 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: publish.single (topic, payload = tPayload, hostname = mqttHost, chaw nres nkoj = tPort, tls = tTLS, thauj = tTransport) #Envia os dados time.sleep (0.5) luam 'Dados enviados' tshwj tsis yog: luam 'Erro ao enviar dados'
Kauj ruam 5: Configurando O Web Service
Para enviar os dados obtidos ao Web Service, siv tau rau plataforma ThingSpeak. Para tal, entramos tsis muaj site yampeak.com thiab 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. Tsis yog, siv 7.
Ao criar um kwj dej, é 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 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 ua kwj dej:
channelID = "Insira o ID do Canal aqui"
Koj tuaj yeem koom nrog Chave de Escrita:
apiKey = "Insira a Chave de Escrita"
Além da conexão com o kwj deg criado, também são necessárias outras configurações no código em Python app.py:
useUnsecuredTCP = Tseeb
useUnsecuredWebsockets = FalseuseSSLWebsockets = cuav mqttHost = "mqtt.thingspeak.com" yog useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = ไม่มี ถ้า ใช้ websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 ntsiab lus =" raws/" + channelID +"/tshaj tawm/" + apiKey
Para que aplicação web realmente receba, por exemplo, o valor Temperatura no campo 2 (campo que escolhemos para ser a Kubura), é necessario indicar o "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 (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. Tsis muaj ThingSpeak, koj tuaj yeem pom qhov ua tau zoo lossis saib xyuas através de gráficos.
Pom zoo:
Kev Tsim Qauv Duab Duab/Duab Duab Duab: 4 Kauj Ruam
Kev Tsim Qauv Duab Duab/Duab Duab Duab: Nyob zoo txhua tus, Hauv qhov kev qhia no, Kuv yuav qhia koj cov txheej txheem ntawm yuav ua li cas thiaj tsim 3D qauv siv cov duab digital. Cov txheej txheem hu ua Photogrammetry, tseem hu ua Image-Based Modeling (IBM). Tshwj xeeb, hom txheej txheem no tau siv los rov ua dua
Cov Duab Duab Duab thiab Cov Duab 1: 4 Cov Kauj Ruam (nrog Duab)
Cov Duab Duab Cubes thiab Cov Duab 1: Thaum sim nrog qee cov ntoo ntoo thiab cov duab los qhia, kuv pom ob peb txoj hauv kev los ua cov voos thiab lwm yam duab los ntawm cov khoom siv yooj yim. Los ntawm kev muab cov no los ua Cov Ntawv Qhia, Kuv vam tias yuav txhawb nqa kev ua si thiab kev kawm. Kev hloov pauv ntawm qhov kev qhia no
Yuav Ua Li Cas Thiaj Li Tshem Tawm Lub Computer Nrog Cov Kauj Ruam Yooj Yim thiab Duab: 13 Kauj Ruam (nrog Duab)
Yuav Tsum Tshem Tawm Lub Khoos Phis Tawj Li Cas Nrog Cov Kauj Ruam Yooj Yim thiab Duab: Nov yog cov lus qhia txog yuav ua li cas tshem lub PC. Feem ntau ntawm cov khoom siv yooj yim yog hloov pauv thiab tshem tawm tau yooj yim. Txawm li cas los xij nws yog ib qho tseem ceeb uas koj tau koom nrog nws. Qhov no yuav pab tiv thaiv koj kom tsis txhob poob ib feem, thiab tseem ua rau kev rov ua dua tshiab
Cov Duab Duab Duab Duab, WiFi Txuas - Raspberry Pi: 4 Cov Kauj Ruam (nrog Duab)
Cov Duab Duab Duab Duab, WiFi Txuas - Raspberry Pi: Nov yog txoj hauv kev yooj yim heev thiab tus nqi qis mus rau cov duab thav duab digital - nrog qhov zoo ntawm kev ntxiv /tshem cov duab hla WiFi ntawm 'nyem thiab luag' siv (pub dawb) xa cov ntaub ntawv . Nws tuaj yeem siv tau los ntawm qhov me me £ 4.50 Pi Zero. Koj tseem tuaj yeem hloov pauv
RasbperryPi Tsheb Nrog FPV Lub Koob Yees Duab. Tswj los ntawm Web Browser: 31 Kauj Ruam (nrog Duab)
RasbperryPi Tsheb Nrog FPV Lub Koob Yees Duab. Tswj los ntawm Lub Vev Xaib: Peb yuav tsim 4wd lub tsheb - lub kauj yuav zoo ib yam li hauv lub tank - kom tig ib sab ntawm lub log yuav tig nrog qhov nrawm dua li lwm qhov. Ntawm lub tsheb yuav muab lub koob yees duab tso rau ntawm tus tuav tshwj xeeb uas peb tuaj yeem hloov txoj haujlwm ntawm lub koob yees duab. Tus neeg hlau yuav c