Mục lục:
- Bước 1: Tiện ích phần cứng
- Bước 2: Làm phần cứng Montagem
- Bước 3: Phần mềm cơ sở Atmega328
- Bước 4: Python Programação Em
- Bước 5: Dịch vụ web Configurando O
Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 bước (có hình ảnh)
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:36
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 tráng miệng dados são obtidos localmente, enquanto outros são obtidos por meio de um Dịch vụ web nónctado à uma estação meteorológica (Không có caso, estamos useizando a da Faculdade de Engenharia de Sorocaba). Após adquiridos, os dados serão disponibilizados em uma aplicação web baseada em ThingSpeak.
Bước 1: Tiện ích phần cứng
Foi useizado para a construção deste projeto:
1x Qualcomm Dragonboard 410c
1x Gác lửng cảm biến nhìn thấy rãnh
1x Cảm biến nhìn thấy nước
1x IMU 10OF Grove Sensor v1.0
1x Cảm biến Sunlight Grove v1.0
1x chuột USB
1x Teclado USB
1x Màn hình
1 x Cabo HDMI
1x Adaptador HDMI-VGA
Acesso à dados da estação meteorológica FACENS
Bước 2: Làm phần cứng Montagem
Após conectar một cảm biến sa khoáng Mezzanine à dragonboard, thực hiện một dây chằng de acordo com o esquemático phía trước, sendo:
1: Cảm biến Conexão direta entre o Groove Sunlight v1.0.
2: + 5V nónctado ao Vcc do IMU-10DOF.
3: + 5V e Gnd conectados aos pinos phóng viên làm Cảm biến nước.
4: GND IMU-10DOF.
5: Phóng viên SDA / SCL conectado ao pino do IMU-10.
6: Pino Sig do Cảm biến nước nónctado ao pino 2.
Bước 3: Phần mềm cơ sở Atmega328
Através da Sensors Mezzanine, é Possível acessar um vi điều khiển Atmega328, o mesmo useizado em plataformas Arduíno, e programá-lo diretamente, useizando a IDE Arduíno instalada na DragonBoard. Vale ressaltar que a Mezzanine e a DragonBoard em liên hợp có thể có thể làm được điều đó.
O firmware embarcado é responseável por realizar as leituras dos sensores, gerenciando os protocolos de comunicação e operação dos mesmos, e após a aquisição dos dados, os encaminha qua porta serial para a DragonBoard.
* Pode ser cần phải có một hệ thống sử dụng bibliotecas inclusão das không có chương trình cơ sở. Elas podem ser encontradas em:
imu-10DOF
Cảm biến ánh sáng mặt trời
O firmware useizado pode ser encontrado aqui ou aqui:
Bước 4: Python Programação Em
Các lần nhập para o programma criado, foram preferários os seguintes: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'decimal'. Foram Defdos 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 Publishing #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 (không có caso estamos gravando na variável 'url'). Em seguida, inicializamos duas variáveis ('i' e 'j'), Pracizando 'i' para pegar os dados mais atuais do Array que iremos Collectber via JSON (como a posição mais neare 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 do programma
Entrando no 'while (1)', inicializamos a variável 'jsonurl' como 'Không có'. 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 repeattirmos o loop. O próximo passo é abrir o URL usando a função 'urllib2.urlopen (url)', podendo também adicionar um cãio 'timeout = X', sendo X uma quantidade em segundos limite para o URL ser aberto. Se o programma conseguir abrir a URL dentro do tempo do timeout, o programma irá realizar a função 'comJSON' mencionada anteriormente. Caso não consiga abrir a URL no tempo estipulado, realiza-se a função 'semJSON'. Ambos as funções são muito parecidas, xu hướng 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 obsvada de 'comJSON'. Iremos explicar somente a 'comJSON'
while (1): jsonurl = None #Inicializa a varivavel como Không có print 'Passo:', j print 'Atualizando dados' try: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos if jsonurl is not Không: print 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, mostra todos os dados ngoại trừ: if jsonurl is None: print 'Erro ao atualizar dados' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) pass j + = 1 print '---------------------------------- -------------------------------------------------- -------------------------------------------- / n 'time.sleep (1)
Na primeira linha da função 'comJSON', Collectbemos todos os dados da URL já abertos numa variável 'dados'. Esta irávenueber um objeto com duas Mảng, 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á printmindo e jogando as Strings converttidas dentro de variáveis e, então, mostrando esses dados na tela. Recebidos os dados do Arduíno, Collectberemos os dados da estação, simplesmente acessando os sensores específicos dentro do objeto 'dados' (por examplelo '[' ReturnDataSet '] [' sens_aver_6_5] ') e então mostramos estes novosbém dad.
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 Collectberá 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 ())
in "\ 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']
in 'Dữ liệu:', dữ liệu
print '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, Preisamos colocar a ID do channel, 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 channel, e uma outra para Guardar, em String, o que será enviado para o servidor (com todas as variáveis converttidas) e então lều publicar os dados no servidor usando 'xuất bản. single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) '. A função então acaba e retorna para o hiệu trưởng vòng lặp.
#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" # Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" # configurações de comunicação sử dụng sai "tcp" tPort = 1883 tTLS = Không có nếu useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Không có nếu useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/ etc / ssl / certificate.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channel / "+ channelID +" / Publishing / "+ 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 (vel_vento) + "& field7 =" + str (umidade) #Organiza todas as variaveis em uma String para ser enviado print 'Enviando dados' try: Publishing.single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0.5) print 'Dados enviados' ngoại trừ: print 'Erro ao enviar dados'
Bước 5: Dịch vụ web Configurando O
Para enviar os dados obtidos ao Web Service, Operatingizamos a plataforma ThingSpeak. Para tal, entramos no site thingspeak.com e criamos uma conta. Após a criação e login na conta, nos dirigimos ao cabeçalho de menu -> Canais -> Meus Canais e então sáo ngữ no botão "Novo Canal". Ao sáo, escolhemos o nome do Canal, escrevemos uma descrição para ele, e então decidimos quantos dos 8 campos possíveis useizaríamos. Không có caso, dùng thử 7.
Kênh đào Ao criar um, Kênh đào é gerado um ID do Canal, uma Chave de Escrita e uma Chave de Leitura. O ID do Canal se encontra abaixo do nome do channel e a Chave de Escrita na aba "Chaves". Para que o código Python envie as Informações obtidas para o channel é, 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 kênh criado, também são needárias outras configurações no código em Python app.py:
useUnsecuredTCP = Đúng
useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" nếu useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Không có nếu useUnsecuredWebsockets: tTransport = "webslsockets useTransport" sSLSport = 80 cổng nếu sử dụng websockets "tTLS = {'ca_certs':" / etc / ssl / certs / ca-Certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channel / "+ channelID +" / Publishing / "+ Mã API
Para que a aplicação web realmente recba, por exelo, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), é needario indicar o "field2 =" + variável_temperatura, como nodigo 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, thằng thực thi tên khốn ở código que todos os dados escolhidos são enviados ao Dịch vụ web. No ThingSpeak, bạn có thể thực hiện được việc làm todo o monitoramento através de gráficos.
Đề xuất:
Knight Rider Hộp cơm trưa Robot: 8 bước (có hình ảnh)
Knight Rider Lunchbox Robot: Ok, nó không nói chuyện, nó không đen và không có AI. Nhưng nó có những đèn LED màu đỏ lạ mắt ở phía trước. Tôi chế tạo một robot có thể điều khiển WiFi bao gồm một Raspberry Pi với bộ điều hợp WiFi và Arduino Uno. Bạn có thể SSH vào Raspberry Pi một
GameBoy trong hộp cơm trưa: 9 bước (có hình ảnh)
GameBoy trong hộp cơm trưa: Bạn đã bao giờ muốn chơi một số trò chơi cổ điển khi ăn chưa? Có thể không, nhưng nếu bạn đã làm, đây là dự án dành cho bạn! Trình giả lập GameBoy sử dụng RetroPie trên Raspberry Pi Zero W. Có một bộ pin với 2500mAh, có thể cạn kiệt khoảng 20
Làm một hộp cơm trưa nhiệt độ ổn định theo thời gian: 16 bước
Làm Hộp Cơm Giữ Nhiệt Có Định Giờ: Mặc dù hộp cơm nấu thông thường sử dụng và vận hành đơn giản nhưng chỉ có một chức năng duy nhất, không thể cài đặt thời gian hoặc cài đặt nhiệt độ để hâm nóng. Để cải thiện khuyết điểm này, lần này DIY được thực hiện trên cơ sở
Hộp cơm trưa cho người bị liệt nửa người: 11 bước
Hộp cơm cho người bị liệt nửa người: Nhiều người bị liệt nửa người, khiến cử động của một bên cơ thể bị căng thẳng do không có kỹ năng vận động. Nhiều hoạt động đòi hỏi sử dụng hai tay rất vất vả để hoàn thành đối với những người bị liệt nửa người. Hơn nữa, các hành động su
Hộp cơm trưa cho người bị liệt nửa người: 10 bước
Hộp cơm cho người bị liệt nửa người: Các thành viên trong nhóm: Chris Lobo, Ryan Ravitz, Alex Romine Mặc dù nó không được nêu rõ ràng trong đánh giá thiết kế, Seven Hills đã yêu cầu