İçindekiler:
- Adım 1: Donanım Kullanımı
- Adım 2: Montaj Donanımı Yapın
- Adım 3: Ürün Yazılımı Atmega328
- Adım 4: Programação Em Python
- Adım 5: Configurando O Web Hizmeti
Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:21
Neste Projeto iremos desenvolver um sistema de monitoramento para Plantações, que irá obter dados de umidade relativa yapmak ar, PRESSAO atmosférica, ar yapmak temperatura incidência UV, velocidade vento e condição da planta (seca / molhada) yapmak. Alguns desses yerel ayarlar, enquanto outros são obtidos por meio de um Web Service conectado à uma estação meteorológica (Caso yok, estamos utilizando ve Faculdade de Sorocaba de Engenharia de). ThingSpeak'e bağlı web temelleri için izinler.
Adım 1: Donanım Kullanımı
Bir construção deste projeto için Foi utilizado para:
1x Qualcomm Dragonboard 410c
1x Grove Seeed Sensör Ara Kat
1x Su Tohum Sensörü
1x IMU 10OF Grove Sensörü v1.0
1x Güneş Işığı Korusu Sensörü v1.0
1x Fare USB
1x Teclado USB
1x Monitör
1x Kabin HDMI
1x Adaptör HDMI-VGA
Acesso à dados da estação meteorológica FACENS
Adım 2: Montaj Donanımı Yapın
Após conectar a placa Sensor Mezzanine à dragonboard, bir ligação de acordo com o esquemático anterior yürütün, gönder:
1: Conexão doğrudan giriş o sensör Groove Sunlight v1.0.
2: +5V bağlantı ve Vcc IMU-10DOF.
3: +5V e Gnd conectados aos pinos muhabirleri Su sensörü yapar.
4: GND IMU-10DOF.
5: IMU-10 için SDA/SCL bağlantısı.
6: Pino Sig do Su sensörü conectado ao pino 2.
Adım 3: Ürün Yazılımı Atmega328
Através de Sensors Mezzanine, Atmega328'in en olası mikro denetleyicisi, Arduíno, e-programá-lo diretamente, DragonBoard'da bir IDE Arduíno kurulumundan yararlanma. Vale ressaltar que a Mezzanine ve bir DragonBoard em conjunto possuem todo os periferikos, bir program için gerekli donanımlar için mikro kontrol cihazı yok.
Donanım yazılımı ambargosu ve gerçek zamanlı olarak algılayıcılar, iletişim protokolleri ve iletişim protokolleri, iletişim kuralları ve uygulamaları, DragonBoard porta serileri aracılığıyla encaminha işletim sistemi.
*Pode ser necessario a inclusão das bibliotecas utilizadas hiçbir bellenim kullanmaz. Elas podem ser encontradas em:
imu-10DOF
Güneş Işığı Sensörü
O üretici yazılımı utilizado pode ser encontrado aqui ou aqui:
Adım 4: Programação Em Python
Para o programa criado, foram necessários os seguintes ithalatları: 'urllib2', 'json', 'zaman', 'serial', 'paho.mqtt.publish', 'psutil' ve 'decimal'. Foram tanımları duas funções ('comJSON' ve '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 paho.mqtt.publish as yayınlamak #para publicar import psutil #para configurar o url import ondalık #para dönüştürücü
O primeiro passo é gravar em uma değişken o endereço de onde serao obtidos os dados da Estação Meteorológica (caso estamos gravando na variável 'url' yok). Em seguida, inicializamos duas variáveis ('i' e 'j'), utilizando 'i' para pegar os dados mais atuais do Array que iremos JSON aracılığıyla (array será a 49, inicializamos 'i' 49) e 'j' parasal niceliksel değerler 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 programı
Giriş yok 'while(1)', inicializamos bir değişken 'jsonurl' commo 'Hiçbiri'. Bir URL'yi kısaltın JSON, 'while' ile ilgili hiçbir şey bilmiyor, döngüyü yeniden başlatıyor. 'urllib2.urlopen(url)', 'zaman aşımı=X' için URL'yi kullanma ve URL'yi değiştirme. Bir URL dentro do tempo do timeout, o programa irá realizar a função 'comJSON' mencioonada anteriormente'yi kısaltın. Caso não consiga bir URL'yi kısaltır, tempo tahmini yok, bir função 'semJSON' gerçekleştirin. Ambos olarak eğlenceler são muito parecidas, como como diferença os dados da estação ('comJSON' irá Mostrar ve enviar os dados da estação, enquanto 'semJSON' não). Como 'semJSON', 'comJSON'dan türetilmiştir. Iremos, bir 'comJSON'u açıklıyor
while(1): jsonurl = Yok #Inicializa a varivavel como Yok print 'Passo:', j print 'Atualizando dados' deneyin: jsonurl = urllib2.urlopen(url, zaman aşımı = 5) #tenta abrir o url em no máximo 5 segundos jsonurl Yok değilse: 'Dados atualizados' yazdır comJSON(jsonurl) #Se conseguiu abrir o URL, çoğu todos os dados hariç: jsonurl Yok ise: 'Erro ao atualizados' yazdır semJSON() #Se não abriu o URL, Mostra os dados obtidos localmente (Arduino yap) pass j += 1 baskı '-------------------------------- -------------------------------------------------- --------------------------------------------\n' zaman.uyku (1)
En önemli 'comJSON', URL'deki en büyük değişikliklerden biri. Diziler, bazı durumlarda kullanılabilir ('ReturnDataSet'). Gerçekleştirme, ilk çalıştırma, Arduíno e ler as linhas (readline()) que o Arduíno está imprimindo ve jogando as Strings convertidas dentro de Variáveis e, então, Mostrando esses dados na tela. Arduíno'ya ilişkin bilgiler, en iyi uygulamalara ilişkin bilgiler, basit uygulamalara ilişkin tüm algılayıcılara ilişkin özellikler, "dados" nesnelerini (örnek olarak '['ReturnDataSet']['sens_aver_6_5]') daha fazla bilgi edinme.
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) # Arduíno'nun bir değişkeni olduğunu gösteren bir değişkendir #Recebe işletim sistemi uygulamaları Arduíno ardAgua = int(ard.readline().rstrip()) ardTemp = float(ard.readline().rstrip()) ardPres = int(ard.readline ().rstrip()) ardUV = kayan nokta(ard.readline().rstrip())
"\nArduino" yazdır
if ardAgua == 1: 'Molhado' yazdırın başka: yazdır 'Seco' yazdır 'Temperatura:', ardTemp, '*C' yazdır 'Pressao:', ardPres, 'Pa' yazdır 'Ultra-Violeta:', ardUV, ' lüks
#Estacao
'\nJSON' yazdır 'URL:' yazdır, 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']
'Veri:', verileri yazdır
print 'Velocidade do Vento:', vel_vento, 'm/s' print 'Umidade do ar:', umidade, '%'
#Dönüştür
vel_vento = ondalık. Decimal(vel_vento.rstrip()) umidade = ondalık. Decimal(umidade.rstrip())
O proximo passo é enviar todos eses dados coletados. Para isso, precisamos colocar a ID do canal, bir Chave de Escrita e o Host em değişkenleri, além de yapılandırma o useUnsecuredTCP, useUnsecuredWebsockets ve useSSLWebsockets (usamos True, False, False). Criamos mais uma variável que irá guardar o 'caminho' para o kanal, e uma outra para guardar, em String, o que será enviado para o sunucu (değişken dönüştürücüler olarak com todas) ve hiçbir hizmet sağlayıcı yok usando 'yayınlamak. single(konu, payload=tYük, ana bilgisayar adı=mqttHost, bağlantı noktası=tPort, tls=tTLS, taşıma=tTransport)'. Bir função então acaba e retorna para o loop prensibi.
#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" #Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" #configurações de comunicação useUnsecuredões de comunicação useUnsecuredões FalsoTcp = True use FalsoTCP =UnsecuredCuredTCP = True use "tcp" tPort = 1883 tTLS = UseUnsecuredWebsockets ise yok: tTransport = "websockets" tPort = 80 tTLS = useSSLWebsockets ise yok: import ssl tTransport = "websockets" tTLS = {'ca_certs':"/etc/ssca- sertifikalar.crt", 'tls_version':ssl. PROTOCOL_TLSv1} tPort = 443 konu = "channels/" + channelID + "/publish/" + apiKey #Cria variavel com o 'caminho' para o kanal tPayload = "field1=" + str(ardAgua) + "&field2=" + str(ardTemp) + "&field3=" + str(ardPres) + "&field4=" + str(ardUV) + "&field5=" + str(veri) + "&field6=" + str(vel_vento) + "&field7=" + str(umidade) #Organiza todas as variaveis em uma String para ser enviado print 'Enviando dados' deneyin: yayınlama.single(konu, payload=tPayload, hostname=mqttHost, port=tPort, tls=tTLS, transport=tTransport) #Envia os dados time.sleep(0.5) 'Dados enviados' yazdırın, hariç: 'Erro ao enviar dados' yazdır
Adım 5: Configurando O Web Hizmeti
ThingSpeak'i bir platformda kullanan Web Hizmeti için en iyi seçenek. Para tal, entramos hiçbir sitethingspeak.com ve criamos uma conta. Tüm girişler için giriş yapın, menüler için bkz. -> Canais -> Canais ve En 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. Caso yok, utilizamos 7.
Ao criar um kanal, é gerado um ID do Canal, uma Chave de Escrita ve uma Chave de Leitura. O ID, Canal se encontra abaixo do nome do canal e a Chave de Escrita na aba "Chaves". Para que o código Python, canal é, necessário configurá-lo ao ID do Canal:
channelID = "Insira o ID do Canal aqui"
E também com ve Chave de Escrita:
apiKey = "Insira a Chave de Escrita"
Além da conexão com o o canal criado, também são necessárias outras configurações hiçbir código em Python app.py:
useUnsecuredTCP = Doğru
useUnsecuredWebsockets = FalseuseSSLWebsockets = Yanlış mqttHost = useUnsecuredTCP ise "mqtt.thingspeak.com": tTransport = "tcp" tPort = 1883 tTLS = useUnsecuredWebsockets ise yok: tTransport = "WebPortsockets iftsTLs kullan: tSls Yok" websockets" tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt", 'tls_version':ssl. PROTOCOL_TLSv1} tPort = 443 konu = "kanallar/" + kanal kimliği + "/yayınla/" + APIAnahtarı
Para que a aplicação web realmente receba, por exemplo, 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(veri) + "&field6=" + str(vel_vento) + "&field7=" + str(umidade)
Python'da Canal ve Programaçma Programları'nı yürütür, Web Service'i yönetir. No ThingSpeak, muhtemelen yapılacaklar veya monitörler için gerçek bir gerçek.
Önerilen:
MONITORAMENTO DA UMIDADE DO SOLO DE UMA HORTA UTILIZANDO ARDUINO E ANDROID: 15 Adım
MONITORAMENTO DA UMIDADE DO SOLO DE UMA HORTA UTILIZANDO ARDUINO E ANDROID: Gerçek bir izleme ve izleme için bir fikir
Como Subir Datos De Un Acelerómetro ve Ubidots, Utilizando Arduino YÚN: 6 Adım
Como Subir Datos De Un Acelerómetro ve Ubidots, Utilizando Arduino YÚN: Arduino YÚN es mikrodenetleyici basado en el ATmega32u4 ve el Atheros AR9331. OpenWrt ve Arduino YÚN cuenta con una version llamada OpenWrt-Yun'da linux basado'da linux basado'nun işlemcisi ve işlemcisi olmayan bir sistem.
HP Web Kamerası 101 Aka 679257-330 Web Kamerası Modülünü Genel USB Web Kamerası Olarak Yeniden Kullanma: 5 Adım
HP Web Kamerası 101 Aka 679257-330 Web Kamerası Modülünü Genel USB Web Kamerası Olarak Yeniden Kullanın: 14 yaşındaki Panasonic CF-18'imi yepyeni bir web kamerası ile renklendirmek istiyorum, ancak Panasonic artık bu harika makineyi desteklemiyor, bu yüzden gri maddeyi b&b'den (biralar ve hamburgerler) daha kolay bir şey için kullanın. Bu ilk kısım
Web Tabanlı Kontrol Panelli Web Bağlantılı SMART LED Animasyon Saati, Zaman Sunucusu Senkronize: 11 Adım (Resimlerle)
Web-Bağlantılı SMART LED Animasyon Saati Web Tabanlı Kontrol Panelli, Zaman Sunucusu Senkronize: Bu saatin hikayesi çok eskilere dayanıyor - 30 yıldan fazla. Babam bu fikre ben 10 yaşımdayken öncülük etti, LED devriminden çok önce - LED'lerin parlaklığının mevcut göz kamaştırıcı parlaklığının 1/1000 olduğu zamanlarda. Gerçek
Canlı Web Sitesi Kullanma Web Sürücüsü IO Eğitimi ve Çalışma Örnekleri: 8 Adım
Canlı Web Sitesi Kullanan Web Sürücüsü IO Eğitimi ve Çalışma Örnekleri: Canlı Bir Web Sitesi Kullanan Web Sürücüsü IO Eğitimi ve Çalışan Örnekler Son Güncelleme: 26/07/2015(Bu talimatları daha fazla ayrıntı ve örnekle güncellerken sık sık kontrol edin)Arka Plan Yakın zamanda sahip olduğum bana sunulan ilginç bir meydan okuma. ihtiyacım vardı