Daftar Isi:
- Langkah 1: Pemanfaatan Perangkat Keras
- Langkah 2: Montagem Lakukan Perangkat Keras
- Langkah 3: Firmware Atmega328
- Langkah 4: Programação Em Python
- Langkah 5: Konfigurasikan Layanan Web O
Video: Irrigações Automatizadas Com Web Service Memanfaatkan Python: 5 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:58
Neste projeto iremos desenvolver um sistema de monitoramento para plantações, que irá obter dados de umidade relativa do ar, pressão atmosférica, temperaturea do ar, incidncia 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 Layanan Web conectado uma estação meteorológica (No caso, estamos utilizando a da Faculdade de Engenharia de Sorocaba). Semua pertanyaan, dan jawaban untuk disponibilizados em uma aplicação web baseada em ThingSpeak.
Langkah 1: Pemanfaatan Perangkat Keras
Foi utilizado para a construção deste projeto:
1x Qualcomm Dragonboard 410c
1x Grove Seed Sensor Mezzanine
1x Sensor Benih Air
1x IMU 10OF Grove Sensor v1.0
1x Sinar Matahari Grove Sensor v1.0
1x Mouse USB
1x Teclado USB
1x Monitor
1x Cabo HDMI
1x Adaptor HDMI-VGA
Acesso dados da estação meteorológica WAJAH
Langkah 2: Montagem Lakukan Perangkat Keras
Untuk menghubungkan a placa Sensor Mezzanine dragonboard, jalankan ligação de acordo com o esquemático anterior, kirim:
1: Masuk langsung ke sensor Groove Sunlight v1.0.
2: +5V terhubung ke Vcc untuk IMU-10DOF.
3: +5V e Gnd conectados aos pinos koresponden melakukan Sensor air.
4: GND IMU-10DOF.
5: SDA/SCL berhubungan dengan koresponden untuk melakukan IMU-10.
6: Pino Sig do Sensor air 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, dan programá-lo diretamente, gunakan IDE Arduíno instalada di DragonBoard. Lakukan ressaltar untuk Mezzanine dan DragonBoard dan lakukan semua hal yang diperlukan untuk menjalankan program dan gravação lakukan firmware tanpa mikrokontroler.
O firmware embarcado é responsável por realizar as leituras dos sensores, gerenciando os protocolos de comunicação dan operação dos mesmos, dan após a aquisição dos dados, os encaminha melalui porta serial para a DragonBoard.
*Pode ser necessario a inclusão das bibliotecas utilizadas no firmware. Elas podem ser encontradas em:
imu-10DOF
Sensor sinar matahari
O firmware utilizado pode ser encontrado aqui ou aqui:
Langkah 4: Programação Em Python
Para o programa criado, foram necessários os seguintes impor: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'decimal'. Foram definidos duas funções ('comJSON' e 'semJSON') untuk penjelasan lebih lanjut.
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 primeiro passo é gravar em uma variável o endereço de onde serão obtidos os dados da Estação Meteorológica (tidak ada caso estamos gravando na variável 'url'). Seguida, inicializamos duas variáveis ('i' e 'j'), utilizando 'i' para pegar os dados mais atuais do Array que iremos receber melalui 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" #Define o URL da estação
i = 49 #Para pegar os dados mais atuais da estação
j = 0 #Passo lakukan programa
Masuk tanpa 'sementara(1)', inicializamos a variável 'jsonurl' como 'Tidak ada'. Mulai variável irá abrir a URL JSON, portanto ao inicializarmos ela no início lakukan 'sementara', 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. Se o program conseguir abrir a URL dentro lakukan tempo lakukan timeout, o programa irá realizar a função 'comJSON' mencionada anteriormente. Tidak ada penjelasan tentang URL tanpa batasan tempo, nyatakan kesenangan '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' dan menyenangkan turunan dari 'comJSON'. Iremos explicar somente a 'comJSON'
while(1): jsonurl = Tidak ada #Inicializa a varivavel como Tidak ada print 'Passo:', j print 'Atualizando dados' try: jsonurl = urllib2.urlopen(url, timeout = 5) #tenta abrir o url em no máximo 5 segundos jika jsonurl bukan None: print 'Dados atualizados' comJSON(jsonurl) #Se coneguiu abrir o URL, paling banyak todos os dados kecuali: jika jsonurl adalah None: print 'Erro ao atualizar dados' semJSON() #Se não abriu o URL, mostra os dados obtidos localmente (melakukan Arduino) lulus j += 1 print '---------------------------------- -------------------------------------------------- --------------------------------------------\n' waktu.tidur (1)
Anda akan senang dengan 'comJSON', lihat semua yang ada di dados dan URL já abertos numa variável 'dados'. Esta irá receber um objeto com duas Array, 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]') dan ento paling banyak.
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"
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']
print 'Data:', data
print 'Velocidade do Vento:', vel_vento, 'm/s' print 'Umidade do ar:', umidade, '%'
#Konversi
vel_vento = desimal. Desimal(vel_vento.rstrip()) umidade = desimal. Desimal(umidade.rstrip())
O próximo passo é enviar todos esses dados coletados. Para isso, precisamos colocar a ID melakukan kanal, Chave de Escrita dan Host em variáveis, além de konfigurasi o useUnsecuredTCP, useUnsecuredWebsockets dan 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 service (com todas as variáveis convertidas) e então tentar publicar os dados no service usando 'publish. tunggal(topik, payload=tPayload, hostname=mqttHost, port=tPort, tls=tTLS, transport=tTransport)'. A função então acaba e retorna para o loop principal.
#Envia channelID = "344243" #Canal criado untuk grup apiKey = "1PK9ELK0L4AH8CVP" #Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" #configuraes de comunicação useUnsecuredTCP = True useUnsecurets "tcp" tPort = 1883 tTLS = Tidak ada jika useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Tidak ada jika useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs':"/etc/ssca- certificates.crt", 'tls_version':ssl. PROTOCOL_TLSv1} tPort = 443 topic = "channels/" + channelID + "/publish/" + apiKey #Cria variavel com o 'caminho' untuk kanal tPayload = "field1=" + str(ardAgua) + "&field2=" + str(ardTemp) + "&field3=" + str(ardPres) + "&field4=" + str(ardUV) + "&field5=" + str(data) + "&field6=" + str(vel_vento) + "&field7=" + str(umidade) #Organiza sebagai variaveis em uma String para ser enviado print 'Enviando dados' coba: publish.single(topic, payload=tPayload, hostname=mqttHost, port=tPort, tls=tTLS, transport=tTransport) #Envia os dados time.sleep(0.5) print 'Dados enviados' kecuali: print 'Erro ao enviar dados'
Langkah 5: Konfigurasikan Layanan Web O
Lihat lebih lanjut tentang Layanan Web, gunakan platform ThingSpeak. Para tal, entramos tidak ada situs thingspeak.com dan criamos uma conta. 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. Tidak ada caso, utilizamos 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". Para que o código Python envie as informações obtidas para o canal é, necessário configurá-lo ao ID do Canal:
channelID = "Insira o ID melakukan 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 necessárias outras configurações no código em Python app.py:
useUnsecuredTCP = Benar
useUnsecuredWebsockets = FalseuseSSLWebsockets = Salah mqttHost = "mqtt.thingspeak.com" jika useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Tidak ada jika useUnsecuredWebsockets: tTransport = "TLSports = Tidak ada soket web" TLSportsTransport = Tidak ada tTLS websockets" tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt", 'tls_version':ssl. PROTOCOL_TLSv1} tPort = 443 topic = "channels/" + channelID + "/publish/" + kunci API
Para que a aplicação web realmente receba, por exemplo, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), é 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 programao em Python, basta executar o código que todos os dados escolhidos são enviados ao Layanan Web. No ThingSpeak, é possível realizar todo o monitoramento através de gráficos.
Direkomendasikan:
Como Subir Datos De Un Acelerómetro dan Ubidots, Memanfaatkan Arduino YÚN: 6 Langkah
Como Subir Datos De Un Acelerómetro a Ubidots, Memanfaatkan Arduino YÚN: Arduino Y&U es un microcontrolador basado en el ATmega32u4 y el Atheros AR9331. Siendo el Atheros un procesador capaz de soportar un sistem operasi linux basado en OpenWrt, dan Arduino Y&U cuenta con una versi llamada OpenWrt-Yun
Como Hacer Un Abanico Con Iluminación Memanfaatkan Littlebits: 3 Langkah
Como Hacer Un Abanico Con Iluminación Memanfaatkan Sedikit Bit: En el dia de hoy les paling langka como hacer un abanico con iluminaci&n utilizando bits.Este &proyecto puede ser utilizado en una habitación oscura
Cara Memperbaiki / Service Sharp Optonica RP-114H Anda: 11 Langkah (Berikut Gambar)
Cara Memperbaiki / Menyervis Sharp Optonica RP-114H Anda: Jadi beginilah cara saya memperbaiki dan menyervis meja putar Vertikal saya, Optonica RP-114H. Saya membeli ini dari seseorang yang mengklaim telah diservis dan berfungsi penuh. Saya tidak tipe rengekan, jadi saat ternyata tidak diservis sama sekali dan e
Cara Membuat Programmer ISP USBTiny: Dengan Memanfaatkan Mesin Penggilingan PCB CNC: 13 Langkah (dengan Gambar)
Cara Membangun Programmer ISP USBTiny: Dengan Memanfaatkan Mesin Penggilingan PCB CNC: Pernahkah Anda berpikir tentang bagaimana membangun proyek elektronik Anda sendiri dari awal? Mengerjakan proyek elektronik sangat mengasyikkan dan menyenangkan bagi kami, pembuat. Tetapi sebagian besar pembuat dan penggemar perangkat keras yang baru saja melangkah maju ke budaya pembuat membangun proyek mereka
Jam Animasi LED SMART yang Terhubung ke Web Dengan Panel Kontrol Berbasis Web, Server Waktu Disinkronkan: 11 Langkah (dengan Gambar)
Jam Animasi LED SMART yang Terhubung ke Web Dengan Panel Kontrol Berbasis Web, Server Waktu Disinkronkan: Kisah jam ini kembali ke masa lalu - lebih dari 30 tahun. Ayah saya mempelopori ide ini ketika saya baru berusia 10 tahun, jauh sebelum revolusi LED - kembali ketika LED di mana 1/1000 kecerahan kecemerlangan menyilaukan mereka saat ini. Benar