Isi kandungan:
- Langkah 1: Utilizado Perkakasan
- Langkah 2: Perkakasan Montagem Do
- Langkah 3: Firmware Atmega328
- Langkah 4: Programação Em Python
- Langkah 5: Perkhidmatan Web Configurando O
Video: Perkhidmatan Web Irrigações Automatizadas Com Utilizando Python: 5 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:12
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 (Tanpa caso, estamos utilizando a da Faculdade de Engenharia de Sorocaba). Apos adquiridos, os dados serão disponibilizados em uma aplicação web baseada em ThingSpeak.
Langkah 1: Utilizado Perkakasan
Foi utilizado para a construção deste projeto:
1x Qualcomm Dragonboard 410c
1x Mezzanine Sensor Grove Seeed
1x Sensor Terlihat Air
1x IMU 10OF Grove Sensor v1.0
1x Sunlight Grove Sensor v1.0
USB Tetikus 1x
1x Teclado USB
Monitor 1x
1x Cabo HDMI
1x Adaptador HDMI-VGA
Acesso à dados da estação meteorológica FACEN
Langkah 2: Perkakasan Montagem Do
Após conectar a placa Sensor Mezzanine dr dragonboard, jalankan ligação de acordo com o esquemático anterior, sendo:
1: Conexão direta entre o sensor Groove Sunlight v1.0.
2: + 5V conectado ao Vcc do IMU-10DOF.
3: + 5V e Gnd conectados aos pinosesponden melakukan sensor Air.
4: GND IMU-10DOF.
5: SDA / SCL conectado ao pino koresponden melakukan IMU-10.
6: Pino Sig do Water sensor conectado ao pino 2.
Langkah 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, utilizando a IDE Arduíno instalada na DragonBoard. Vale ressaltar que a Mezzanine e a DragonBoard em conjunto possuem todo os periféricos Needários para programação e gravação do firmware no microcontrolador.
O embarcado firmware sebagai responsável por realizar sebagai leituras dos sensores, gerenciando os protocolos de comunicação e operação dos mesmos, apos a aquisição dos dados, os encaminha melalui porta serial untuk DragonBoard.
* Pode ser requario a inclusão das bibliotecas tidak menggunakan firmware. Elas podem ser encontradas em:
imu-10DOF
Sensor Cahaya Matahari
O firmware utilizado pode ser encontrado aqui ou aqui:
Langkah 4: Programação Em Python
Para o programa criado, foram requários os seguintes import: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'desimal'. 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.publish as publish #para publicar import psutil #para configurar o url import perpuluhan #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 (tiada 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 receiver via JSON (como a posição mais lateste 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" #Tentukan o URL da estação
i = 49 #Para pegar os dados mais atuais da estação
j = 0 #Passo do programa
Entrando no 'while (1)', inicializamos a variável 'jsonurl' como 'None'. Esta variável irá abrir a URL JSON, portanto ao inicializarmos ela no início do 'while', estamos então resetando ela toda vez que repetirmos o loop. O próximo passo é abrir o URL usando a função 'urllib2.urlopen (url)', podendo também adicionar um argumento 'timeout = X', sendo X uma quantidade em segundos limite para o URL ser aberto. Lihatlah programa konservir dengan URL dentro do tempo do timeout, atau programa irá realizar a função 'comJSON' mencionada anteriormente. Caso não consiga menggunakan URL no tempo estipulado, realiza-se a função '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 explicar suatu 'comJSON'
while (1): jsonurl = Tidak ada #Inicializa a varivavel como Tiada cetak 'Passo:', j print 'Atualizando dados' cuba: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos jika jsonurl bukan Tiada: cetak 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, mostra todos os dados kecuali: jika jsonurl adalah Tiada: cetak 'Erro ao atualizar dados' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) lulus j + = 1 cetakan '---------------------------------- -------------------------------------------------- -------------------------------------------- / n 'time.sleep (1)
Na primeira linha da função 'comJSON', recebemos todos os dados da URL já abertos numa variável 'dados'. Esta irá receiver 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 naa novos dados.
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 ())
cetak "\ nArduino"
jika ardAgua == 1: cetak 'Molhado' yang lain: cetak 'Seco' print 'Temperatura:', ardTemp, '* C' print 'Pressao:', ardPres, 'Pa' print 'Ultra-Violeta:', ardUV, ' lx '
#Estacao
cetak '\ nJSON' cetak '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']
cetak 'Data:', data
cetak 'Velocidade do Vento:', vel_vento, 'm / s' print 'Umidade do ar:', umidade, '%'
#Converte
vel_vento = perpuluhan. Perpuluhan (vel_vento.rstrip ()) umidade = perpuluhan. Perpuluhan (umidade.rstrip ())
O próximo passo é enviar todos esses dados coletados. Sebagai penerbitan, 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 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) e então tentar publicar os dados no servidor usando 'terbitkan. tunggal (topik, muatan = tPayload, nama host = mqttHost, port = tPort, tls = tTLS, transport = tTransport) '. Pengetua yang menyenangkan.
#Envia channelID = "344.243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" # Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" # configurações de Comunicação useUnsecuredTCP = useUnsecuredWebsockets True = useSSLWebsockets palsu = Benar jika useUnsecuredTCP: tTransport = "tcp" tPort = 1883 TTLS = Tiada jika useUnsecuredWebsockets: tTransport = "WebSockets" tPort = 80 TTLS = Tiada jika useSSLWebsockets: import ssl tTransport = "WebSockets" TTLS = { 'ca_certs': "/ etc / ssl / CERT / CA- Certificate.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" saluran / "+ channelID +" / publish / "+ 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) + "& bidang6 =" + str (vel_vento) + "& field7 =" + str (umidade) #Organiza todas as variaveis em uma String para ser enviado mencetak 'Enviando dados' cuba: publish.single (topik, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0.5) cetak 'Dados enviados' kecuali: cetak 'Erro ao enviar dados'
Langkah 5: Perkhidmatan Web Configurando O
Para enviar os dados obtidos ao Web Service, utilizamos a plataforma ThingSpeak. Sebaliknya, entramos tiada laman web thingspeak.com e criamos uma conta. Appa 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. Tiada caso, utilizamos 7.
Terusan Ao criar um, é gerado um ID do Canal, uma Chave de Escrita dan 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 cané é, 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 requárias outras configurações no código em Python app.py:
useUnsecuredTCP = Betul
useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" if useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Tiada jika digunakanUnsecuredWebsockets: tTransport = "tSportSport = tSports websockets "tTLS = {'ca_certs':" / etc / ssl / certs / ca-certificate.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" saluran / "+ channelID +" / terbitkan / "+ apiKey
Para que a aplicação web realmente receba, por exemplo, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), é requario 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 pelaksana o código que todos os dados escolhidos são enviados ao Web Service. No ThingSpeak, mungkin ada realisasi untuk melakukan pemantauan di através de gráficos.
Disyorkan:
MCU Mengakses Perkhidmatan Internet Melalui IFTTT - Ameba Arduino: 3 Langkah
MCU Mengakses Perkhidmatan Internet Melalui IFTTT - Ameba Arduino: Mengakses perkhidmatan internet adalah pekerjaan yang mudah untuk peranti pintar seperti telefon android, tablet atau PC, tetapi tidak begitu mudah pada mikrokontroler kerana biasanya memerlukan sambungan dan daya pemprosesan yang lebih baik. Walau bagaimanapun, kami mungkin menurunkan bahagian berat
ROBOT PERKHIDMATAN: 8 Langkah
ROBOT PERKHIDMATAN: Robot ini akan menjadi pembantu yang boleh dipercayai dalam semua persembahan anda. Robot ini dilengkapi dengan banyak anggota badan yang bergerak, kepala berputar dan roda berputar. Terdapat 7 pilihan warna untuk badan dan 2 pilihan untuk mata. TELAH MEMILIKI RODA SPIN
Sentuh Suis ON-OFF Dengan Perkhidmatan UTSOURCE: 3 Langkah
Suis ON-OFF Sentuh Dengan Perkhidmatan UTSOURCE: Kami telah membuat suis sentuh menggunakan transistor NPN. Tetapi suis itu hanya mempunyai satu fungsi untuk menghidupkan litar tetapi tidak ada cara untuk mematikan litar tanpa memutuskan bekalan kuasa. Di litar ini, kita akan membina suis sentuh yang
POS SISTEM UNTUK KEDAI, PERMINTAAN DAN PUSAT PERKHIDMATAN DARI EXCEL Dengan Menggunakan Kod Bar: 7 Langkah
SISTEM POS UNTUK KEDAI, PERMINTAAN DAN PUSAT PERKHIDMATAN DARI EXCEL Dengan Menggunakan Kod Bar: Saya memperkenalkan dengan blog ini kepada anda cara membuat sistem POS (tempat penjualan) yang mudah untuk kedai runcit dan pusat servis. Dengan kaedah ini anda dapat menguruskan kemudahan berikut tanpa perisian khas atau peralatan mahal. v Isu
Memperkukuhkan Perkhidmatan SSL pada Pelayan Web Anda (Apache / Linux): 3 Langkah
Memperkukuhkan Perkhidmatan SSL di Pelayan Web Anda (Apache / Linux): Ini adalah tutorial yang sangat pendek berkaitan dengan satu aspek keselamatan siber - kekuatan perkhidmatan ssl di pelayan web anda. Latar belakangnya adalah bahawa perkhidmatan ssl di laman web anda digunakan untuk memastikan bahawa tidak ada yang dapat meretas data yang sedang transmi