Satura rādītājs:
- 1. darbība: aparatūras izmantošana
- 2. solis: montējiet aparatūru
- 3. darbība: programmaparatūra Atmega328
- 4. solis: Programação Em Python
- 5. darbība: konfigurējiet tīmekļa pakalpojumu
Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 soļi (ar attēliem)
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:58
Neste projeto iremos desenvolver um system de monitoramento para plantações, que irá obter dados de umidade relativa do ar, pressão atmosferica, temperatura do ar, incidência UV, velocidade do vento e condição da planta (seca/molhada). Alguns vēlas, lai vietējie iedzīvotāji saprastu vietējos pakalpojumus, kā arī varētu sazināties ar Web pakalpojumu, lai sazinātos ar meteoroloģiju (No caso, estamos utilizando a da Faculdade de Engenharia de Sorocaba). Após adquiridos, os dados serão disponibilizados em uma aplicação web baseada em ThingSpeak.
1. darbība: aparatūras izmantošana
Izmantot konstrukciju projektēšanai:
1x Qualcomm Dragonboard 410c
1x Grove Seeed Sensor Mezzanine
1x ūdens redzēts sensors
1x IMU 10OF Grove Sensor v1.0
1x Sunlight Grove Sensor v1.0
1x USB pele
1x Teclado USB
1x monitors
1x Cabo HDMI
1x HDMI-VGA adapteris
Acesso à dados da estação meteorológica FACENS
2. solis: montējiet aparatūru
Pēc tam, kad tiek novietota plaša sensora starpstāvoklis un pūķa dēlis, izpildiet akordo saiti vai priekšējo daļu, nosūtiet:
1: Conexão directta entre o sensors Groove Sunlight v1.0.
2: +5 V savienojums ar Vcc vai IMU-10DOF.
3: +5V e Gnd conectados aos pinosrespondentes do Ūdens sensors.
4: GND IMU-10DOF.
5: SDA/SCL, kas atbilst IMU-10.
6: Pino Sig do Water sensors ir savienots ar 2.
3. darbība: programmaparatūra Atmega328
Atravas and Sensors Mezzanine, ir pieejams ar mikrokontrolatoru Atmega328, vai arī ir iespējams izmantot Arduíno plataformas, izmantot programmu un izmantot IDE Arduíno instalāciju DragonBoard. Vale ressaltar que a Mezzanine and a DragonBoard em conjunto possuem todo os periféricos vajadzīgie para programmai un gravação do firmware no microcontrolador.
O programmaparatūras embarcado un atbilde uz realizācijas kā leituras dos sensores, gerenciando os protocolos de comunicação e operação dos mesmos, e após and aquisição dos dados, os encaminha via porta serial of a DragonBoard.
*Pode ser obligāti un iekļaujot bibliotecas utilizadas nav firmware. Elas podem ser encontradas em:
imu-10DOF
Saules gaismas sensors
O programmaparatūras izmantošanas kods, kas paredzēts encontrado aqui vai aqui:
4. solis: Programação Em Python
Para o programmas criado, foram vajadis osios seguintes imports: '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ēt urllib2, json #para pegar os dados da estacaoimport time #para o time.sleep () importēt sēriju #para o Arduino importēt paho.mqtt.publicēt kā publicēt #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 (no 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, 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 #Paso do programma
Entrando no 'while (1)', inicializamos a variável 'jsonurl' como 'None'. 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 repetirmos o loop. O próximo passo é abrir o URL usando a função 'urllib2.urlopen (url)', podbed tamdement, lai parādītu argumentu 'timeout = X', nosūtiet X uma quantidade em segundos limit to URL ser aberto. Skatiet programmas secību, lai atceltu URL, kas padarītu taimautu, vai programmu var realizēt un izbaudīt “comJSON” mencionada anteriormente. Caso não consiga abrir URL no tempo estipulado, realize-se a função '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' un uma função derivada de 'comJSON'. Iremos izskaidro “comJSON”
Kaut arī (1): jsonurl = Nav ja jsonurl nav Nav: izdrukājiet “Dados atualizados” comJSON (jsonurl) #Se secguiu abrir o URL, mostra todos os dados, izņemot: ja jsonurl nav: drukājiet “Erro ao atualizar dados” semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) pass j += 1 print”---------------------------------- -------------------------------------------------- -------------------------------------------- / n 'laiks.gulēt (1)
Sākotnēji lina da função 'comJSON', saņems 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 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 examplelo '[' ReturnDataSet '] [' sens_aver_6_5] ') un então mostramos estes toms.
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 = pludiņš (ard.readline (). rstrip ())
drukāt "\ 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']
drukāt 'Dati:', dati
print 'Velocidade do Vento:', vel_vento, 'm/s' print 'Umidade do ar:', umidade, '%'
#Konvertēt
vel_vento = decimāls. Decimāls (vel_vento.rstrip ()) umidade = decimāls. Decimāls (umidade.rstrip ())
O próximo passo é enviar todos esses dados coletados. Lai to izdarītu, izmantojiet precīzu ID kanāla kanālu, Chave de Escrita e o Host un dažādus iestatījumus, konfigurācijas konfigurāciju vai 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) e então tentar publicar os dados no servidor usando 'publicēt. viens (tēma, lietderīgā slodze = tPayload, resursdatora nosaukums = mqttHost, ports = tPort, tls = tTLS, transports = tTransports)”. A função então acaba e retorna para o loop principāls.
#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" #Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" #configurações de comunicação useUnuredSuckUne "tcp" tPort = 1883 tTLS = Nav, ja useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Nav, ja useSSLWebsockets: import ssl tTransport = "websockets" tTLL = {'ca_certs': "/etc/ssl/ certificate.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" kanāli/" + kanāla ID +"/publicēt/" + apiKey #Cria variavel com o 'caminho' para o canal tPayload =" field1 = " + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (dati) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade) #Organiza todas as variaveis em uma String para ser enviado print 'Enviando dados' try: public.single (topic, payload = tPayload, hostname = mqttHost, ports = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0.5) drukāt 'Dados enviados', izņemot: print 'Erro ao enviar dados'
5. darbība: konfigurējiet tīmekļa pakalpojumu
Paredzams tīmekļa vietnes pakalpojums, izmantojot ThingSpeak platformu. Para tal, entramos no site thingspeak.com un criamos uma conta. Após a criação e login na contact, nos dirigimos ao cabeçalho de menus -> Canais -> Meus Canais e então clickamos no botão "Novo Canal". Ao clickar, escolhemos o nome do Canal, escrevemos uma descrição para ele, e então decidimos quantos dos 8 campos possíveis utilizaríamos. Bez kazino, lietojums 7.
Ao criar um canal, ja gerado um ID do Canal, uma Chave de Escrita un uma Chave de Leitura. O ID do Canal se encontra abaixo do nome do canal e un Chave de Escrita ar abām "Chaves". Para que o código Python envie as information as obtidas para o canal é, requiredário configurá-lo ao ID do Canal:
channelID = "Insira o ID do Canal aqui"
E Também com Chave de Escrita:
apiKey = "Insira un Chave de Escrita"
Além da conexão com o canal criado, também são needsárias outras configurações no código em Python app.py:
useUnsecuredTCP = Patiess
useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" if useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Nav, ja useUnsecuredWebsockets: tTransport = "websoles" websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificate.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" kanāli/" + kanāla ID +"/publicēt/" + apiKey
Para que a aplicação web realmente receba, por examplelo, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), ja nepieciešams norādīt 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 (dati) + "& field6 =" + str (vel_vento) + "& field7 =" + str (mitrums)
Tendo vinculado todos os dados do Canal à programção em Python, basta executar o código que todos os dados escolhidos são enviados ao Web Service. No ThingSpeak, jūs varat realizēt šo vai monitoramento através de gráficos.
Ieteicams:
MONITORAMENTO DA UMIDADE DO SOLO DE UMA HORTA UTILIZANDO ARDUINO E ANDROID: 15 soļi
MONITORAMENTO DA UMIDADE DO SOLO DE UMA HORTA UTILIZANDO ARDUINO E ANDROID: Ideja do nosso projeto monitor and a monitor and a umumidade do solo de uma horta e apresentar na tela do celular para acompanhamento real
DIY GPS izsekotājs --- Python lietojumprogramma: 5 soļi (ar attēliem)
DIY GPS izsekotājs --- Python lietojumprogramma: Pirms divām nedēļām es piedalījos riteņbraukšanas pasākumā. Pēc finiša es gribēju pārbaudīt maršrutu un ātrumu, ar kādu tobrīd braucu. Diemžēl tas netika sasniegts. Tagad es izmantoju ESP32, lai izveidotu GPS izsekotāju, un es to izmantošu, lai ierakstītu savu velomaršrutu
Web radio: 5 soļi (ar attēliem)
Interneta radio: Pirms mēnešiem es Banggoodā ieraudzīju M5stickC izstrādes dēli un nopirku vienu, ar ko spēlēt. Jūs to varat iegūt šeit. Es izmēģināju daudzas skices, bet beidzot es pārmeklēju šo lapu un nolēmu mēģināt izveidot tīmekļa radio. Šai attīstības padomei ir
Como Subir Datos De Un Acelerómetro and Ubidots, Utilizando Arduino YÚN: 6 soļi
Como Subir Datos De Un Acelerómetro and Ubidots, Utilizando Arduino YÚN: Arduino Y Ú N un microcontrolador basado en el ATmega32u4 y el Atheros AR9331. Siendo el Atheros un procesors capaz de soportar and system operativo linux basado en OpenWrt, el Arduino Y Ú N cuenta with a version oflam OpenWrt-Yun
Como Hacer Un Abanico Con Iluminación Utilizando Littlebits: 3 soļi
Como Hacer Un Abanico Con Iluminación Utilizando Littlebits: En el dia de hoy les mostrare como hacer un abanico con illuminaci ó n utilizando littlebits. Este & akūts proyecto puede ser utilizado en una habitaci ó n oscura para que esteciuminada