Სარჩევი:
- ნაბიჯი 1: აპარატურის გამოყენება
- ნაბიჯი 2: Montagem Do აპარატურა
- ნაბიჯი 3: firmware Atmega328
- ნაბიჯი 4: პროგრამა Em Python
- ნაბიჯი 5: კონფიგურაციის ვებ სერვისი
ვიდეო: Irrigações Automatizadas Com ვებ სერვისი Utilizando Python: 5 ნაბიჯი (სურათებით)
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:20
Neste projeto iremos desenvolver um sistema de monitoramento para plantações, que irá obter obos 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 out out são obtidos por meio de um ვებ სერვისის დაკავშირება და მეტეოროლოგია მეტეოროლოგიურად (არ არის გათვალისწინებული, იყენებს მომსახურების სფეროს ენოენჰარია დე სოროკაბას). Apqus adquiridos, os dados serão disponibilizados em uma aplicação web baseada em ThingSpeak.
ნაბიჯი 1: აპარატურის გამოყენება
Foi utilisado para a builderção deste projeto:
1x Qualcomm Dragonboard 410c
1x Grove Seeed Sensor ანტრესოლი
1x წყლის ხილული სენსორი
1x IMU 10OF Grove Sensor v1.0
1x Sunlight Grove Sensor v1.0
1 x მაუსი USB
1 x Teclado USB
1x მონიტორი
1x Cabo HDMI
1x ადაპტატორი HDMI-VGA
Acesso à dados da estação meteorológica FACENS
ნაბიჯი 2: Montagem Do აპარატურა
Apés conectar a placa Sensor Mezzanine à dragonboard, შეასრულოს ligação de acordo com o esquemático anterior, sendo:
1: Conexão direta entre or sensor Groove Sunlight v1.0.
2: +5V conectado ao Vcc do IMU-10DOF.
3: +5V e Gnd conectados aos pinosrespondeses do წყლის სენსორი.
4: GND IMU-10DOF.
5: SDA/SCL conectado ao pinorespondente do IMU-10.
6: Pino Sig do წყლის სენსორი conectado ao pino 2.
ნაბიჯი 3: firmware Atmega328
სენსორების ანტრესოლი, შესაძლებელია მიკროკონტროლის Atmega328, ან პლატფორმების არდადეგების გამოყენება, პროგრამული უზრუნველყოფის გამოყენება, IDE არდადეგების ინსტალაცია DragonBoard– ის გამოყენებით. ეს არის მეზანინე და DragonBoard, რომელიც საშუალებას მოგცემთ გააკეთოთ პროგრამული უზრუნველყოფა და სიმძლავრე, რომელიც საჭიროა მიკროკონტროლის გარეშე.
პროგრამული უზრუნველყოფის პროგრამული უზრუნველყოფის საშუალებით თქვენ შეძლებთ გააცნობიეროთ როგორც სენსორული ინფორმაცია, ასევე შეაფასოთ ის, თუ როგორ მუშაობს ჩვენი სისტემა, ეს არის წყალმომარაგების სისტემა, რომელიც გამოიყენება DragonBoard– ის სერიული პორტალის საშუალებით.
*საჭიროა ბიბლიოთეკის გამოყენება, რომელსაც არ აქვს firmware. Elas podem ser encontradas em:
imu-10DOF
მზის სენსორი
O firmware utilizado pode ser encontrado aqui ou aqui:
ნაბიჯი 4: პროგრამა Em Python
პროგრამის კრიმინალის, საჭიროებისამებრ, გათვალისწინებულია იმპორტი: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'ათობითი'. Foram definidos duas funções ('comJSON' e 'semJSON') que serão explicadas mais tarde.
იმპორტი urllib2, json #para pegar os dados da estacaoimport time #para o time.sleep () import serial #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'). ჩვენ ვიცი, 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" #განსაზღვრეთ URL
i = 49 #Para pegar os dados mais atuais da estação
j = 0 #Passo do programa
შესვლა არა 'ხოლო (1)', inicializamos variavel 'jsonurl' como 'None'. ეს შეიძლება შეიცავდეს URL JSON- ს, რაც ნიშნავს იმას, რომ ის არ გამოიყენებს "ხოლო" -ს, ეს ნიშნავს, რომ ის გადატვირთულია, როდესაც ის იმეორებს მარყუჟს. როდესაც თქვენ იყენებთ URL– ს და იყენებთ ფუნქციას „urllib2.urlopen (url)“, მიუთითეთ ის, რომ არგუმენტირებულად არის 'timeout = X', გამოგზავნილია X uma რაოდენობის მიხედვით, როდესაც ჩვენ ვსაუბრობთ 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 განმარტავს 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) #იხილეთ მისამართი ან მისამართი, გარდა იმისა, რომ: jsonurl არ არის: დაბეჭდეთ 'Erro ao atualizar dados' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) გაივლის j += 1 ბეჭდვა '---------------------------------- ------------------------------------------------------ ---------------------------------------------- / 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 nov რა
def comJSON (jsonurl): #envia todos os dados dados = json.loads (jsonurl.read ()) #carrega os dados JSON da página já aberta #Arduino ard = სერიული. სერიული ('/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 ().სტრიპი ()) ardUV = float (ard.readline (). rstrip ())
ამობეჭდვა "\ nArduino"
თუ ardAgua == 1: დაბეჭდე 'Molhado' სხვა: დაბეჭდე 'Seco' print 'Temperatura:', ardTemp, '*C' print 'Pressao:', ardPres, 'Pa' print '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']
დაბეჭდე 'მონაცემები:', მონაცემები
დაბეჭდე '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. ეს არის ის, რაც საშუალებას გაძლევთ დააკონკრეტოთ ID არხი, Chave de Escrita e o Host em variáveis, além de configurar o useUnecuredTCP, 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) '. გართობის 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 comunicaced "tcp" tPort = 1883 tTLS = არცერთი, თუ გამოიყენებაUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = არცერთი თუ გამოიყენებსSSLWebsockets: იმპორტი ssl tTransport = "websockets" tTLS = {'ca_certs'://etc/ss certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 თემა =" არხები/" + 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' გარდა: დაბეჭდე 'Erro ao enviar dados'
ნაბიჯი 5: კონფიგურაციის ვებ სერვისი
გამოიყენეთ ვებ სერვისი, გამოიყენეთ პლატფორმა ThingSpeak. ამის ნაცვლად, არ არსებობს რამ thingspeak.com და criamos uma conta. თქვენ უნდა შეხვიდეთ კონტრაქტში, რომლითაც შეგიძლიათ იხილოთ მენიუები -> Canais -> Meus Canais და entico 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. არა კასო, უტილიზამოსი 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". პითონის პარაგრაფის გაგზავნა შესაძლებელია როგორც ინფორმაციის მისაღებად, არხის გასწვრივ, თქვენ გჭირდებათ არხის კონფიგურაცია:
channelID = "Insira o ID do Canal aqui"
E também com a Chave de Escrita:
apiKey = "Insira a Chave de Escrita"
როგორც არხის კრიმინალი, საჭიროებისამებრ საჭიროა კონფიგურაცია, რომელიც არ შეიცავს პითონის აპლიკაციას. Py:
useUnsecuredTCP = მართალია
useUnsecuredWebsockets = FalseuseSSLWebsockets = ყალბი mqttHost = "mqtt.thingspeak.com" თუ გამოიყენება websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 თემა =" არხები/" + channelID +"/გამოქვეყნება/" + apiKey
როგორც ვებ აპლიკაციის რეალიზაციის მიღება, მაგალითად, ტემპერატურის არასაკმარისი კამპანია 2 (ეს არის ტემპერატურის ტემპერატურა), აუცილებელია მიუთითოთ "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)
Tendo vinculado todos os dados do Canal à programação em Python, basta execaster or código todos os dados escolhidos são enviados ao Web Service. არარის საუბარი
გირჩევთ:
ინტერნეტ სერვისი: 3 ნაბიჯი
ინტერნეტ სერვისი: შესავალი მე მიყვარს ჩემს ბაღში ფრინველების კვება, მაგრამ სამწუხაროდ, შავი ვირთხაც ამით სარგებლობს. ასე რომ, მე ვიფიქრე იმაზე, თუ როგორ ავიცილოთ თავიდან ვირთხები ფრინველების საკვებს. შავი ვირთხა აქტიურია მხოლოდ სიბნელეში, ამიტომ ჩვენ უნდა დავხუროთ ბი
ხმის სენსორი და სერვისი: რეაქტიული მოძრაობა: 4 ნაბიჯი
ხმის სენსორი და სერვისი: რეაქტიული მოძრაობა: პირველ რიგში თქვენ უნდა შეაგროვოთ შესაბამისი მასალები ამ წრედის დასაყენებლად
დისტანციური სერვისი Dropper Drone Fishing სუპერ სისუფთავე: 7 ნაბიჯი
Remote Servo Dropper for Drone Fishing Super Neat: აი, როგორ ავაშენე გასაოცარი პატარა სუფთა servo dropper იმ ნაწილებიდან, სადაც მე ვიწექი, ეს შესაფერისი იქნებოდა თვითმფრინავების თევზაობისთვის, შემთხვევით ნივთებს თქვენი თვითმფრინავით გასართობად, მაგ. ბუშტი მათზე
აკონტროლეთ ბევრი სერვისი არდუინოთი !: 4 ნაბიჯი (სურათებით)
აკონტროლეთ ბევრი სერვისი არდუინოსთან ერთად !: თავიდან რაღაც უნდა მეთქვა. მე არ მქონდა ლამაზი სურათები. ასე რომ, მე გადავიღე სურათები bildr.blog– დან. ჩვენ ვიცით, რომ Arduino UNO– ს არ აქვს ბევრი pwm ქინძისთავი მრავალი სერვეოს გასაკონტროლებლად. ასე რომ, ჩვენ ხშირად ვხვდებით პრობლემას, რომ გავაკონტროლოთ მეტი სერვო არდუინოს საშუალებით
Alexa კონტროლირებადი სერვისი: 9 ნაბიჯი (სურათებით)
Alexa Controlled Servo: შესავალი მე მაქვს ლეპტოპი ჩემს ოფისში, რომელიც მონიტორინგს უწევს რამდენიმე კამერას, რომელიც ჩემი სახლის გარეთ არის. ისინი მაფრთხილებენ მშობიარობისა და ვიზიტორების შესახებ. მიუხედავად იმისა, რომ შემიძლია ვებ ბრაუზერი გამოვიყენო მათი სურათების სანახავად, უფრო ადვილია უბრალოდ