Talaan ng mga Nilalaman:
- Hakbang 1: Hardware Utilizado
- Hakbang 2: Montagem Do Hardware
- Hakbang 3: Firmware Atmega328
- Hakbang 4: Programação Em Python
- Hakbang 5: Configurando O Web Service
Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 Hakbang (na may Mga Larawan)
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:15
Mag-isip ng mga proyekto sa pagsubaybay para sa 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). Ang mga Alguns ay naghahain ng mga lokal na lokasyon, enquanto outros são obtidos por meio de um Web Service na kumonekta sa lahat ng mga ito meteorológica (Walang caso, estamos utilizando a da Faculdade de Engenharia de Sorocaba). Ang mga adquiridos, ay naging sero disponibilizados em uma aplicação web baseada em ThingSpeak.
Hakbang 1: Hardware Utilizado
Gumagamit para sa isang construção deste projeto:
1x Qualcomm Dragonboard 410c
1x Grove Seeed Sensor Mezzanine
1x Sensor na Nakita ng Tubig
1x IMU 10OF Grove Sensor v1.0
1x Sunlight Grove Sensor v1.0
1x Mouse USB
1x Teclado USB
1x Monitor
1x Cabo HDMI
1x Adaptador HDMI-VGA
Acesso à maging da estação meteorológica FACENS
Hakbang 2: Montagem Do Hardware
Nakikipag-ugnay sa isang placa Sensor Mezzanine sa dragonboard, nagsasagawa ng isang 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 gawin IMU-10DOF.
3: + 5V e Gnd conectados aos pinos correspondentes gawin Water sensor.
4: GND IMU-10DOF.
5: SDA / SCL conectado ao pino correspondente gawin IMU-10.
6: Pino Sig do Water sensor conectado ao pino 2.
Hakbang 3: Firmware Atmega328
Ang mga sensor ng Sensor Mezzanine, ay maaari itong magamit sa microcontrolador Atmega328, o mesmo utilizado em plataformas Arduíno, e programá-lo diretamente, gamitin ang isang IDE Arduíno installada na DragonBoard. Mag-isip ng isang Mezzanine at isang DragonBoard upang maitaguyod ang mga ito sa pamamagitan ng isang programa upang mag-firmware na walang microcontrolador.
O firmware embarcado é responsável por realizar as leituras dos sensores, gerenciando os protocolos de comunicação and operação dos mesmos, e aposs a aquisição dos maging, os encaminha via porta serial para sa isang DragonBoard.
* Pode ser kinakailangan ng isang inclusão das bibliotecas utilizadas walang firmware. Elas podem ser encontradas em:
imu-10DOF
Sunlight Sensor
O firmware na gumagamit ng pode ser encontrado aqui ou aqui:
Hakbang 4: Programação Em Python
Para sa programa criado, foram necessários os seguintes import: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e '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.s 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 (walang caso estamos gravando na variável 'url'). Sa loob ng isang taon, inisyado ang mga pangalan ('i' e 'j'), gamitin ang 'i' para pegar os maging 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 magiging mais atuais da estação
j = 0 #Passo gawin ang programa
Entrando no 'habang (1)', inicializamos a variável 'jsonurl' como 'Wala'. Mag-isip ng isang link sa isang URL JSON, portanto ao inicializarmos ela no início gawin 'habang', maaari mong i-reset ang ilan sa iyong mga 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. Ang programa ay gagamitin ang isang URL na gagawa ng oras sa pag-timeout, o programa na makakatanggap ng isang kasiyahan na 'comJSON' na sumasalamin sa anteriormente. Caso não consiga abrir a URL no tempo estipulado, realiza-se a função 'semJSON'. Ang mga sumusunod na kasiyahan sa iyo, ay maaari kang magtawag ng isang tao ('comJSON' na nagsulat ng mga ito bilang isang estação, enquanto 'semJSON' não). Como 'semJSON' é uma função derivada de 'comJSON'. Iremos explicar somente a 'comJSON'
habang (1): jsonurl = Wala #Inicializa a varivavel como Wala naka-print 'Passo:', j print 'Atualizando dijadikan' try: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos kung ang jsonurl ay wala: i-print ang 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, mostra todos os dados maliban: kung ang jsonurl ay Wala: i-print ang 'Erro ao atualizar dijadikan' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) pass j + = 1 print '---------------------------------- ---- -------------------------------------------- / n 'oras.makatulog (1)
Na primeira linha da função 'comJSON', recebemos todos os magiging da URL já abertos numa variável 'magiging'. 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 magiging na tela. Recebidos os dados do Arduíno, receberemos os dados da estação, simplesmente acessando os sensores específicos dentro do objeto 'naging' (por exemplo '[' ReturnDataSet '] [' sens_aver_6_5] ') e entario mostramos estes novos maging na tela também.
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 ())
i-print ang "\ nArduino"
kung ardAgua == 1: i-print ang 'Molhado' iba pa: i-print ang '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 = naging ['ReturnDataSet'] ['f_date'] vel_vento = dados ['ReturnDataSet'] ['sens_aver_6_5'] umidade = dados ['ReturnDataSet'] ['sens_aver_19_507']
i-print ang 'Data:', data
i-print ang 'Velocidade do Vento:', vel_vento, 'm / s' print 'Umidade do ar:', umidade, '%'
#Converte
vel_vento = decimal. Desimal (vel_vento.rstrip ()) umidade = decimal. Desimal (umidade.rstrip ())
O próximo passo é enviar todos esses maging coletados. Para sa iyo, precisamos colocar isang ID do canal, isang Chave de Escrita e o Host em variáveis, al configure o useUnsecuredTCP, useUnsecuredWebsockets at gamitinSSLWebsockets (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 sa servidor (com todas as variáveis convertidas) e então tentar publicar os dados no servidor usando 'publish. solong (paksa, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) '. Ang isang função então acaba at retorna para sa loop prinsipal.
#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 useUnsecueWebWebWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsiteWebsite "tcp" tPort = 1883 tTLS = Wala kung useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Wala kung gagamitinSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/ etc / ssl / certs / ca- sertipiko.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 paksa =" channel / "+ channelID +" / publish / "+ apiKey #Cria variavel com o 'caminho' para o canal 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 dijadikan' try: publish.single (paksa, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.s Sleep (0.5) print 'Dados enviados' maliban: i-print ang 'Erro ao enviar dijadikan'
Hakbang 5: Configurando O Web Service
Para sa mga sumusunod na serbisyo sa Web, gagamitin ang isang talata sa ThingSpeak. Para tal, entramos no site bagaypeak.com e criamos uma conta. Narito ang isang criação at pag-login, kung saan ay nasa loob ng menu -> Canais -> Meus Canais at enticio clicamos no botão "Novo Canal". Ao clicar, escolhemos o nome do Canal, escrevemos uma descrição para sa ele, e então decidimos quantos dos 8 campos posíveis utilizaríamos. Walang 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 sa mga ito sa Python envie bilang impormasyon na nakuha para sa kanal, kailangan mong i-configure ang ID sa Canal:
channelID = "Insira o ID do Canal aqui"
Ito ay isang Chave de Escrita:
apiKey = "Insira a Chave de Escrita"
Alem da conexão com o canal criado, também são kinakailangan na gawin ang mga configurações no código em Python app.py:
useUnsecuredTCP = Totoo
useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" kung useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Wala kung useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = websockets "tTLS = {'ca_certs':" / etc / ssl / certs / ca-sertipiko.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 paksa =" mga channel / "+ channelID +" / publish / "+ apiKey
Para sa isang aplicação web realmente receba, halimbawa, ang lakas ng Temperatura walang campo 2 (campo que escolhemos para sa isang Temperatura), kailangan mong tukuyin ang "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 executive o código que todos os magiging escolhidos são enviados ao Web Service. Walang ThingSpeak, ito ay posible upang makita ang monitor o pag-monitor.
Inirerekumendang:
Paano Mag-disassemble ng isang Computer Na May Madaling Hakbang at Mga Larawan: 13 Hakbang (na may Mga Larawan)
Paano Mag-disassemble ng isang Computer Na May Madaling Mga Hakbang at Larawan: Ito ay isang tagubilin tungkol sa kung paano i-disassemble ang isang PC. Karamihan sa mga pangunahing sangkap ay modular at madaling matanggal. Gayunpaman mahalaga na maging maayos ka tungkol dito. Makakatulong ito upang maiwasan ka sa pagkawala ng mga bahagi, at sa paggawa din ng muling pagsasama
Ang Laser Pointer na naka-mount sa spectacle para sa Mga Taong May Mga Kapansanan sa Locomotor: 9 Mga Hakbang (na may Mga Larawan)
Ang Laser Pointer na naka-mount sa spectacle para sa Mga Taong May Kapansanan sa Locomotor: Ang mga taong may malubhang mga kapansanan sa lokomotor tulad ng mga sanhi ng cerebral palsy ay madalas na may mga kumplikadong pangangailangan sa komunikasyon. Maaaring kailanganin silang gumamit ng mga board na may alpabeto o karaniwang ginagamit na mga salitang nakalimbag sa kanila upang makatulong sa komunikasyon. Gayunpaman, marami
Nakakonektang Web na SMART LED Animation Clock Na May Control Panel na Batay sa Web, Naka-synchronize ng Time Server: 11 Mga Hakbang (na may Mga Larawan)
Nakakonektang Web na SMART LED Animation Clock Sa Control Panel na nakabatay sa Web, Naka-synchronize ng Time Server: Ang kuwento ng orasan na ito ay bumalik sa malayo - higit sa 30 taon. Pinangunahan ng aking ama ang ideyang ito noong ako ay 10 taong gulang lamang, bago pa ang LED rebolusyon - pabalik noong LED kung saan 1/1000 ang ningning ng kanilang kasalukuyang ningning na ningning. Isang totoo
Pag-hack sa TV Tuner upang Basahin ang Mga Larawan sa Daigdig Mula sa Mga Satellite: 7 Mga Hakbang (na may Mga Larawan)
Pag-hack sa TV Tuner upang Basahin ang Mga Larawan sa Daigdig Mula sa Mga Satellite: Mayroong maraming mga satellite sa itaas ng aming mga ulo. Alam mo ba, na ang paggamit lamang ng Iyong computer, TV Tuner at simpleng DIY antena Maaari mong matanggap ang mga pagpapadala mula sa kanila? Halimbawa ng mga real time na larawan ng mundo. Ipapakita ko sa iyo kung paano. Kakailanganin mo ang: - 2 w
Pasadyang Arduino upang Panatilihing MAAARI ang Mga Pindutan sa Mga Manibela na May Bagong Car Stereo: 9 Mga Hakbang (na may Mga Larawan)
Pasadyang Arduino upang Panatilihin ang CAN Steering Wheel Buttons Sa Bagong Car Stereo: Napagpasyahan kong palitan ang orihinal na stereo ng kotse sa aking Volvo V70 -02 ng isang bagong stereo upang masisiyahan ako sa mga bagay tulad ng mp3, bluetooth at handsfree. Ang aking kotse ay may ilang mga kontrol sa manibela para sa stereo na nais kong magamit pa rin.