Πίνακας περιεχομένων:
- Βήμα 1: Χρήση υλικού
- Βήμα 2: Montagem Do Hardware
- Βήμα 3: Firmware Atmega328
- Βήμα 4: Programação Em Python
- Βήμα 5: Configurando O Web Service
Βίντεο: Irrigações Automatizadas Com Web Service Utilizando Python: 5 βήματα (με εικόνες)
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:38
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 for meio de um Web Service conectado and uma ãuma estação meteorológica (No caso, estamos utilisando a da Faculdade de Engenharia de Sorocaba). Após adquiridos, os dados serão disponibilizados em uma aplicação web baseada em ThingSpeak.
Βήμα 1: Χρήση υλικού
Χρησιμοποιήστε το για την κατασκευή ενός προορισμού:
1x Qualcomm Dragonboard 410c
Ημιώροφος 1x Grove Seeed Sensor
Αισθητήρας 1x νερού
1x IMU 10OF Grove Sensor v1.0
1x Sunlight Grove Sensor v1.0
1x USB ποντικιού
1x Teclado USB
1x οθόνη
1x Cabo HDMI
1x Adaptador HDMI-VGA
Acesso à dados da estação meteorológica FACENS
Βήμα 2: Montagem Do Hardware
Após conectar a placa Sensor Mezzanine à dragonboard, execute a 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 pinos ανταποκριτές do Water sensor.
4: GND IMU-10DOF.
5: SDA/SCL conectado ao pinorespondente do IMU-10.
6: Pino Sig do Water sensor conectado ao pino 2.
Βήμα 3: Firmware Atmega328
Através da Sensors Mezzanine, και έχετε τη δυνατότητα να χρησιμοποιήσετε τον μικροελεγκτή Atmega328, ή να χρησιμοποιήσετε τις πλατφόρμες Arduíno, και να λάβετε οδηγίες, να χρησιμοποιήσετε ένα IDE Arduíno instalada στο DragonBoard. Μπορείτε να κάνετε μετατροπές στο Mezzanine και a DragonBoard που μπορούν να συνδεθούν με προγράμματα και μηχανισμούς χωρίς μικροελεγκτή.
Από το υλικολογισμικό που αποκτά απάντηση για την πραγματοποίηση των δεδομένων σας, μπορείτε να χρησιμοποιήσετε το πρωτόκολλο για την επικοινωνία και τη λειτουργία των μηνυμάτων, να κάνετε μια εγγραφή στο δίκτυό σας, να συνδεθείτε μέσω της σειριακής πύλης για το DragonBoard.
*Πραγματοποιήστε αναγκαία χρήση βιβλιοθηκών χωρίς χρήση υλικολογισμικού. Elas podem ser encontradas em:
imu-10DOF
Αισθητήρας ηλιακού φωτός
Το υλικολογισμικό χρησιμοποιεί τον κωδικό πρόσβασης για το encontrado aqui ou aqui:
Βήμα 4: Programação Em Python
Para o programa criado, foram needários os seguintes εισαγωγές: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'δεκαδικό'. 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 () serial import #para o Arduino import paho.mqtt. δημοσίευση ως δημοσίευση #para publicar import psutil #para configurar o url import δεκαδικό #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 (no caso estamos gravando na variável 'url'). Em seguida, inicializamos duas variáveis ('i' e 'j'), χρησιμοποιήστε '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" #Define o URL da estação
i = 49 #Para pegar os dados mais atuais da estação
j = 0 #Passo do programa
Καταχωρήστε όχι 'ενώ (1)', inicializamos a variável 'jsonurl' como 'None'. Εκτός από την απόκτηση μιας διεύθυνσης URL JSON, είναι δυνατή η είσοδος σε ένα "ενώ", θα πρέπει να επαναφέρετε και να επαναλάβετε το βρόχο. Μπορείτε να χρησιμοποιήσετε μια διεύθυνση URL ή να χρησιμοποιήσετε μια διεύθυνση 'urllib2.urlopen (url)', να υποβάλετε μια παράμετρο για το 'timeout = X', να στείλετε ποσοτικά λίγα βήματα για το URL και να χρησιμοποιήσετε. Μπορείτε να παρακολουθήσετε μια διεύθυνση URL για να κάνετε ένα χρονικό όριο, ή να πραγματοποιήσετε μια λειτουργία προώθησης «comJSON». Μπορείτε να χρησιμοποιήσετε μια διεύθυνση URL χωρίς ρυθμό, να πραγματοποιήσετε μια λειτουργία «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 somente a 'comJSON'
ενώ (1): jsonurl = Καμία #Inicializa a varivavel como Καμία εκτύπωση 'Passo:', j print 'Atualizando dados' try: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos εάν το jsonurl δεν είναι Κανένα: εκτύπωση 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, mostra todos os dados εκτός από: αν το jsonurl δεν είναι: print 'Erro ao atualizar dados' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) pass j += 1 print '---------------------------------- ------------------------------------------------------ ---------------------------------------------- / n 'ώρα. ύπνος (1)
Πρώτα απ 'όλα, μπορείτε να χρησιμοποιήσετε το' comJSON ', να λάβετε πληροφορίες για το δίκτυό σας από τη διεύθυνση URL και να λάβετε περισσότερες πληροφορίες για το' 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 nomo Το
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 ().strip ()) ardUV = float (ard.readline (). rstrip ())
εκτύπωση "\ nArduino"
if ardAgua == 1: print 'Molhado' else: print 'Seco' print 'Temperatura:', ardTemp, '*C' print 'Pressao:', ardPres, 'Pa' print 'Ultra-Violeta:', ardUV, ' lx '
#Estacao
εκτύπωση '\ 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']
εκτύπωση 'Δεδομένα:', δεδομένα
εκτύπωση 'Velocidade do Vento:', vel_vento, 'm/s' print 'Umidade do ar:', umidade, '%'
#Μετατροπή
vel_vento = δεκαδικό. Δεκαδικό (vel_vento.rstrip ()) umidade = δεκαδικό. Δεκαδικό (umidade.rstrip ())
O próximo passo é enviar todos esses dados coletados. Παραδείγματος χάριν, precisamos colocar a ID do canal, a Chave de Escrita e o Host em variáveis, além de configurar o useUsecuredTCP, useUnsecuredWebsockets και 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) και então tentar publicar os dados no servidor usando 'δημοσιεύουν. ενιαίο (θέμα, ωφέλιμο φορτίο = tPayload, όνομα κεντρικού υπολογιστή = mqttHost, θύρα = tPort, tls = tTLS, μεταφορά = tTransport) ». Ένα função então acaba e retorna para o loop principal.
#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" #Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" #configurações de comunicaçescu = tr "tcp" tPort = 1883 tTLS = Καμία αν χρησιμοποιείταιUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Καμία αν χρησιμοποιείταιSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs'://etc/sl certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" κανάλια/" + channelID +"/δημοσίευση/" + apiKey #Cria variavel com o 'caminho' para o canal tPayload =" field1 = " + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (δεδομένα) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade) #Organiza todas as variaveis em uma String para ser enviado print 'Enviando dados' try: published.single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0.5) εκτύπωση 'Dados enviados' εκτός από: print 'Erro ao enviar dados'
Βήμα 5: Configurando O Web Service
Χρησιμοποιήστε το Web Service, χρησιμοποιήστε μια πλατφόρμα ThingSpeak. Παράλληλα, δεν υπάρχει ιστότοπος thingspeak.com και criamos uma conta. Απαιτείται ένας κωδικός σύνδεσης και σύνδεσης, χωρίς διευκρινίσεις ή για να δείτε τα μενού -> Canais -> Meus Canais και entico clicamos χωρίς 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. No 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 é, 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"
Όλες οι ρυθμίσεις του καναλιού, μπορούν να χρησιμοποιηθούν για να διαμορφώσουν τις παραμέτρους χωρίς εφαρμογή Python app.py:
useUnsecuredTCP = Αλήθεια
useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" εάν useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Καμία αν useUnsecuredWebsockets: tTportTsTLT = TSport = "tTportport" websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" κανάλια/" + channelID +"/δημοσίευση/" + apiKey
Για να εφαρμόσετε μια πραγματική ιστοσελίδα, μπορείτε να χρησιμοποιήσετε, για παράδειγμα, για να δείξετε τη θερμοκρασία 2 campo (για τους θερμοκρασίες της θερμοκρασίας), είναι απαραίτητη η ένδειξη "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 (δεδομένα) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade)
Τελειώστε το todos os dados do Canal à programação em Python, basta εκτελεστή ή código que todos os dados escolhidos são enviados ao Web Service. No ThingSpeak, είναι πιθανό να πραγματοποιήσετε το to 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 mobile para acompanhamento real
ROBOT SERVICE: 8 Βήματα
SERVICE ROBOT: Αυτό το ρομπότ θα είναι ένας αξιόπιστος βοηθός σε όλες τις εκδόσεις σας. Το ρομπότ έρχεται με πολλά κινούμενα άκρα, περιστρεφόμενη κεφαλή και περιστρεφόμενους τροχούς. Υπάρχουν 7 επιλογές χρώματος για το σώμα και 2 επιλογές για τα μάτια. ΕΧΕΙ ΤΡΟΧΕΣ ΣΤΡΙΝΑΡΙΣΜΟΥ
E.S.D.U (Μονάδα Droid Service Emergency): 7 Βήματα
E.S.D.U (Υπηρεσία έκτακτης ανάγκης Droid Unit): Σήμερα, πρόκειται να χτίσουμε μια E.S.D.U (Υπηρεσία έκτακτης ανάγκης Droid Unit). Το E.S.D.U χωρίζεται σε 3 κατηγορίες: Αστυνομία, Πυροσβεστική και Ιατρική. Όλα αυτά δεν έχουν ακόμη αναπτυχθεί πλήρως, αλλά ελπίζω ότι μπορούμε να τα αναβαθμίσουμε και να τα αναπτύξουμε μαζί ως κοινόχρηστο
Αγγίξτε το ON-OFF Switch With UTSOURCE Service: 3 Βήματα
Αγγίξτε το ON-OFF Switch With UTSOURCE Service: Έχουμε ήδη δημιουργήσει έναν διακόπτη αφής χρησιμοποιώντας ένα τρανζίστορ NPN. Αλλά αυτός ο διακόπτης είχε μόνο μία λειτουργία για να ενεργοποιήσει το κύκλωμα, αλλά δεν είχε τρόπο να απενεργοποιήσει το κύκλωμα χωρίς να αποσυνδέσει το ρεύμα. Σε αυτό το κύκλωμα, πρόκειται να δημιουργήσουμε έναν διακόπτη αφής
Ρολόι κινούμενων σχεδίων SMART LED συνδεδεμένο στο Web με πίνακα ελέγχου που βασίζεται στο Web, συγχρονισμένος διακομιστής χρόνου: 11 βήματα (με εικόνες)
Ρολόι κινούμενων σχεδίων SMART LED συνδεδεμένο στο Web με πίνακα ελέγχου Web, συγχρονισμένος διακομιστής χρόνου: Η ιστορία αυτού του ρολογιού πηγαίνει πολύ πίσω-περισσότερα από 30 χρόνια. Ο πατέρας μου πρωτοστάτησε σε αυτή την ιδέα όταν ήμουν μόλις 10 ετών, πολύ πριν από την επανάσταση των LED - πίσω όταν τα LED ήταν 1/1000 της φωτεινότητας της τρέχουσας εκτυφλωτικής λαμπρότητας τους. Μια αληθεια