สารบัญ:
- ขั้นตอนที่ 1: ฮาร์ดแวร์ Utilizado
- ขั้นตอนที่ 2: Montagem ทำฮาร์ดแวร์
- ขั้นตอนที่ 3: เฟิร์มแวร์ Atmega328
- ขั้นตอนที่ 4: Programação Em Python
- ขั้นตอนที่ 5: กำหนดค่า O Web Service
วีดีโอ: Irrigações Automatizadas Com Web Service Utilizando Python: 5 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
Neste projeto iremos desenvolver um sistema de monitoramento para plantações, que irá obter dados de umidade relativa do ar, กดที่ atmosférica, temperatura do ar, incidência UV, velocidade do vento e condição da planta (seca) Alguns desses dados são obtidos localmente, enquanto outros são obtidos por meio de um Web Service conectado à uma estação meteorológica (ไม่มี caso, estamos utilizando a da Faculdade de Engenharia de Sorocaba) Após adquiridos, ระบบปฏิบัติการ dados serão disponibilizados em uma aplicação web baseada em ThingSpeak
ขั้นตอนที่ 1: ฮาร์ดแวร์ Utilizado
Foi utilizado para a construção deste projeto:
1x Qualcomm Dragonboard 410c
1x Grove Seeed เซนเซอร์ ชั้นลอย
1x เมล็ดน้ำ เซนเซอร์
1x IMU 10OF Grove เซนเซอร์ v1.0
1x Sunlight Grove เซนเซอร์ v1.0
1x เมาส์ USB
1x Teclado USB
1x จอภาพ
1x Cabo HDMI
1x อแดปเตอร์ HDMI-VGA
Acesso à dados da estação meteorológica FACENS
ขั้นตอนที่ 2: Montagem ทำฮาร์ดแวร์
Após conectar a placa Sensor Mezzanine à dragonboard, execute a ligação de acordo com o esquemático anterior, ส่ง:
1: Conexão direta entre o เซ็นเซอร์ Groove Sunlight v1.0.
2: +5V เชื่อมต่อ ao Vcc ทำ IMU-10DOF
3: +5V e Gnd conectados aos pinos ผู้ติดต่อ do Water sensor.
4: GND IMU-10DOF
5: SDA/SCL conectado ao pino ผู้ติดต่อทำ IMU-10
6: Pino Sig do เซ็นเซอร์น้ำ conectado ao pino 2
ขั้นตอนที่ 3: เฟิร์มแวร์ Atmega328
Através da Sensors Mezzanine, เข้าถึงได้จาก 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 และ DragonBoard em conjunto possuem todo os periféricos necessários para a programação e Gravação do firmware no microcontrolador.
O เฟิร์มแวร์ห้าม é ตอบกลับ por realizar เป็น 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.
*จำเป็นต้องรวมไว้ใน bibliotecas utilizadas ไม่มีเฟิร์มแวร์ Elas podem ser encontradas em:
imu-10DOF
เซ็นเซอร์แสงแดด
O เฟิร์มแวร์ utilizado pode ser encontrado aqui ou aqui:
ขั้นตอนที่ 4: Programação Em Python
Para o programa criado, foram necessários os seguintes imports: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' และ '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 นำเข้า paho.mqtt.เผยแพร่เป็นเผยแพร่ #para publicar นำเข้า psutil #para กำหนดค่าหรือ url นำเข้าทศนิยม #para converter
สำคัญกว่า passo é Gravar em uma variável o endereço de onde serão obtidos os dados da Estação Meteorológica (ไม่มี 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, inicializacommos 'i) 49) e 'j' สำหรับ 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
ผม = 49 #Para pegar os dados mais atuais da estação
j = 0 #Passo ทำ programa
Entrando no 'while(1)', เริ่มใช้งาน a variável 'jsonurl' como 'None' เริ่มต้น URL JSON, portanto ao inicializarmos ela no início do 'while', estamos então resetando ela toda vez que repetirmos o loop. ปกติ o URL ใช้งาน 'urllib2.urlopen(url)', ลิงก์ถาวร 'timeout=X', ส่ง X uma quantidade em segundos limite para o URL ser aberto. Se o programa conseguir abrir a URL dentro do tempo do timeout, o programa irá realizar a função 'comJSON' ก่อนหน้า Caso não consiga abrir a URL no tempo estipulado, realiza-se a função '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' é uma função derivada de 'comJSON' Iremos อธิบายเกี่ยวกับ 'comJSON'
while(1): jsonurl = None #Inicializa a varivavel como None print '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) ผ่าน j += 1 พิมพ์ '----------------------------------- -------------------------------------------------- ----------------------------------------------\n' time.sleep (1)
เริ่มต้นด้วย linha da função 'comJSON', recebemos 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 เป็น Strings convertidas dentro de variáveis e, então, mostrando tesses dados na na na na na na na na na na na na na na na na na na na na na na na na na na na na 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]') ลิงก์ถาวร.
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) # เริ่มต้น 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())
พิมพ์ "\nArduino"
ถ้า 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']
พิมพ์ 'ข้อมูล:', data
พิมพ์ 'Velocidade do Vento:', vel_vento, 'm/s' พิมพ์ 'Umidade do ar:', umidade, '%'
#แปลงร่าง
vel_vento = ทศนิยม.ทศนิยม(vel_vento.rstrip()) umidade = ทศนิยม.ทศนิยม(umidade.rstrip())
O próximo passo é enviar สิ่งที่ต้องทำ esses dados coletados Para isso, precisamos colocar a ID do canal, a Chave de Escrita e o Host em variáveis, การกำหนดค่าเพิ่มเติม 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) และเผยแพร่ tentar publicar os dados no 'servidor. เดี่ยว (หัวข้อ payload=tPayload ชื่อโฮสต์=mqttHost พอร์ต=tPort tls=tTLS การขนส่ง=tTransport)' A função então acaba e retorna para o ตัวการวนซ้ำ
#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" #Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" #configurações de comunicação useUnsecuredTCP = True use UnsecuredTCP = ใช้เท็จ: "tcp" tPort = 1883 tTLS = ไม่มี หาก useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = ไม่มี หาก useSSLWebsockets: นำเข้า ssl tTransport = "websockets" tTLS = {'ca_certs':"/etc/sca-l/certs certificates.crt", 'tls_version':ssl. PROTOCOL_TLSv1} tPort = 443 หัวข้อ = "channels/" + channelID + "/publish/" + apiKey #Cria variavel com o 'caminho' สำหรับช่อง 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 เป็นตัวแปร em uma String para ser enviado พิมพ์ 'Enviando dados' ลอง: publish.single(topic, payload=tPayload, hostname=mqttHost, port=tPort, tls=tTLS, transport=tTransport) #Envia os dados time.sleep(0.5) พิมพ์ 'Dados enviados' ยกเว้น: พิมพ์ 'Erro ao enviar dados'
ขั้นตอนที่ 5: กำหนดค่า O Web Service
Para enviar os dados obtidos ao Web Service, ใช้แพลตฟอร์ม ThingSpeak. Para tal, entramos ไม่มีไซต์ thingspeak.com และ criamos uma 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 เงื่อนไขที่เป็นไปได้ ไม่มี caso, utilizamos 7
คลอง Ao criar um, é 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 "ชาเวส" Para que o código Python envie as ข้อมูล obtidas para o canal é, necessário configurá-lo ao ID do Canal:
channelID = "Insira o ID ทำคลองน้ำ"
E também com a Chave de Escrita:
apiKey = "Insira a Chave de Escrita"
ปกติแล้ว Conexão com o canal criado, também são necessárias outras configurações no código em Python app.py:
useUnsecuredTCP = True
useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" ถ้า useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = None ถ้า useUnsecuredWebsockets: tTransport = "websockets" นำเข้า tSport = 80 tSockets ใช้ websockets" tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt", 'tls_version':ssl. PROTOCOL_TLSv1} tPort = 443 topic = "channels/" + channelID + "/publish/" + apiKey
แอปพลิเคชันบนเว็บ realmente receba, ตัวอย่าง, 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 à programação em Python, basta executar o código que todos os dados escolhidos são enviados ao Web Service. No ThingSpeak, é possível realizar todo หรือ monitoramento através de gráficos.
แนะนำ:
MONITORAMENTO DA UMIDADE DO SOLO DE UMA HORTA UTILIZANDO ARDUINO E ANDROID: 15 ขั้นตอน
MONITORAMENTO DA UMIDADE DO SOLO DE UMA HORTA UTILIZANDO ARDUINO E ANDROID: A ideia do nosso projeto é monitorar a umidade do solo de uma horta e apresentar na tela do celular para acompanhamento real
Como Subir Datos De Un Acelerómetro และ Ubidots, Utilizando Arduino YÚN: 6 ขั้นตอน
Como Subir Datos De Un Acelerómetro และ Ubidots, Utilizando Arduino YÚN: Arduino YÚN es un microcontrolador en el ATmega32u4 y el Atheros AR9331. Siendo el Atheros un procesador capaz de soportar un sistema Operativo linux basado en OpenWrt, el Arduino YÚN cuenta con una version llamada OpenWrt-Yun. ลงชื่อเข้าใช้
Como Hacer Un Abanico Con Iluminación Utilizando Littlebits: 3 ขั้นตอน
Como Hacer Un Abanico Con Iluminación Utilizando Littlebits: En el dia de hoy les mostrare como hacer un abanico con iluminación utilizando littlebits.Este ´proyecto puede ser utilizado en una habitació ó ใช้งานร่วมกัน
Web Controlled Rover: 14 ขั้นตอน (พร้อมรูปภาพ)
Web Controlled Rover: การสร้างและเล่นกับหุ่นยนต์คือความสุขในชีวิตของฉัน คนอื่นเล่นกอล์ฟหรือสกี แต่ฉันสร้างหุ่นยนต์ (เนื่องจากฉันเล่นกอล์ฟหรือสกีไม่ได้ :-) ฉันคิดว่ามันผ่อนคลายและสนุก! เพื่อให้ได้ประโยชน์สูงสุดจากบอทของฉัน ฉันใช้ชุดแชสซี การใช้ชุดอุปกรณ์ช่วยฉันทำ
นาฬิกาไฟ LED สไตล์ "Charlotte's Web": 10 ขั้นตอน (พร้อมรูปภาพ)
นาฬิกาไส้หลอด LED สไตล์ "ชาร์ลอตต์": นับตั้งแต่ฉันเห็นหลอดไฟไส้หลอด LED ครั้งแรก ฉันก็เคยคิดว่าไส้หลอดนั้นต้องดีสำหรับบางสิ่งบางอย่าง แต่ต้องใช้เวลาถึงการปิดร้านขายชิ้นส่วนอิเล็กทรอนิกส์ในท้องถิ่นสำหรับฉัน เพื่อซื้อหลอดไฟด้วยความตั้งใจที่จะทุบหัว