Cuprins:
- Pasul 1: Utilizare hardware
- Pasul 2: Montagem Do Hardware
- Pasul 3: Firmware Atmega328
- Pasul 4: Programarea Em Python
- Pasul 5: Configurarea serviciului web O
Video: Irrigações Automatizadas Com Web Service Utilizând Python: 5 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:46
În acest proiect dezvoltăm un sistem de monitorizare pentru plante, care va obține date de umiditate relativă ar, presiune atmosferică, temperatură ar, incidență UV, viteză a vântului și condiție da plantă (seca / molhada). Alguns desses dados são obtidos localmente, enquanto outros são obtidos por meio de um Web Service conectado à uma estação meteorológica (No caso, estamos using a da Faculdade de Engenharia de Sorocaba). Após dobândiți, vor fi disponibilizați pe uma aplicație web bazată pe ThingSpeak.
Pasul 1: Utilizare hardware
A fost folosit pentru o construcție a acestui proiect:
1x Qualcomm Dragonboard 410c
1x Senzor de semințe Grove Mezanin
1x senzor de semințe de apă
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 adaptor HDMI-VGA
Acesso à dados da estação meteorológica FACENS
Pasul 2: Montagem Do Hardware
Apoi conectează o placă Sensor Mezzanine à dragonboard, execute a ligação de acord com o esquemático anterior, sendo:
1: Conexão direta entre o sensor Groove Sunlight v1.0.
2: + 5V conectat ao Vcc do IMU-10DOF.
3: + 5V e Gnd conectați la pinii corespondenți ai senzorului de apă.
4: GND IMU-10DOF.
5: SDA / SCL conectado ao pino correspondente do IMU-10.
6: Pino Sig do Water sensor conectado ao pino 2.
Pasul 3: Firmware Atmega328
Através da Sensors Mezzanine, este posibil să acceseze un microcontrolator Atmega328, sau chiar folosit cu platforme Arduíno, și program-direct, folosind un IDE Arduíno instalat pe DragonBoard. Vale ressaltar that a Mezzanine e a DragonBoard em conjunto possuem all os periféricos necessários for a programation and gravação do firmware no microcontrolador.
O firmware embarcado is responsável por realizate as leituras dos sensores, gerenciando os protocolos de comunicação and operação dos mesmos, e após a aquisição dos dados, os encaminha via porta serial for a DragonBoard.
* Puteți fi necesar să includeți bibliotecile folosite fără firmware. Elas putem fi găsite în:
imu-10DOF
Senzor de lumină solară
Firmware-ul folosit poate fi găsit acviu sau acviu:
Pasul 4: Programarea Em Python
Pentru programul creat, pentru necesitățile următoarelor importuri: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'decimal'. Foram definidos duas funções ('comJSON' e 'semJSON') that serão explicadas mais tarde.
import urllib2, json #para pegar os dados da estacaoimport time #para o time.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 primul pas este gravar em uma variável o endereço de unde serão obtidos os dados da Estação Meteorológica (no caso estamos gravando na variável 'url'). Am urmărit, inițializăm două variante ('i' e 'j'), folosind 'i' pentru a-ți da mai multe atuuri de Array care sunt receber via JSON (ca o poziție mai recentă de Array va fi 49, inițializați 'i' ca 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 program
Intrând nu 'while (1)', inițializăm o varietate 'jsonurl' ca 'None'. Această variabilă va deschide un URL JSON, portant al inițializării ei fără inițiativa de a face 'while', suntem reinițializați de fiecare dată când repetăm o buclă. Următorul pas se deschide o URL folosind o funcție 'urllib2.urlopen (url)', putând adăuga și un argument 'timeout = X', fiind X uma cantitate după doi limite pentru URL-ul deschis. Dacă programul va putea deschide o adresă URL în timp și timp de expirare, programul va realiza o funcție „comJSON” menționată anterior. Caso não consiga pentru a deschide o adresă URL fără un timp estipulat, realizează-se o funcție 'semJSON'. Ambos as funções são muito parecidas, tendo as 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 explica somente a 'comJSON'
while (1): jsonurl = None #Inicializa a varivavel como None print 'Passo:', j print 'Atualizando dados' try: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no maximum 5 segundos if jsonurl is not None: print 'Dados atualizados' comJSON (jsonurl) #Se conseguiu deschide URL, show all os dados except: if jsonurl is None: print 'Erro ao atualizar dados' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) pass j + = 1 print '---------------------------------- -------------------------------------------------- -------------------------------------------- / n 'time.sleep (1)
Na prima linie da funcția 'comJSON', recebemos all os dados da URL já abertos numa variável 'dados'. Aceasta este receber um obiect cu com Arrays, das quais iremos somente use uma ('ReturnDataSet'). Realizada esta operação, iremos então initializar o Serial do Arduíno e ler as linhas (readline ()) that 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 accessando os sensores específicos dentro do object 'dados' (de exemplu '[' ReturnDataSet '] [' sens_aver_6_5] ') e então mostramos these novos dados na tela toom.
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) # inițializa o variabilă care recebă 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 ())
tipăriți „\ 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']
tipăriți „Date:”, date
print 'Velocidade do Vento:', vel_vento, 'm / s' print 'Umidade do ar:', umidade, '%'
#Convertește
vel_vento = decimal. Decimal (vel_vento.rstrip ()) umidade = decimal. Decimal (umidade.rstrip ())
Următorul pas este trimis tuturor esențelor coletate. Pentru a fi, precisamos colocar a ID do canal, a Chave de Escrita e o Host em variáveis, alem de configurar o useUnsecuredTCP, useUnsecuredWebsockets e useSSLWebsockets (usamos True, False, False). Criamos mais uma variável que irá guardar o 'caminho' para o canal, e uma altă pentru guardar, em String, o care va fi trimis pentru server (cu toate ca variabile convertite) și pentru tentativ publicar os dados no server using 'publish. single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) '. A função então acaba e retorna for 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ção useUnsecuredTCP = True useUsecseWebsSets "tcp" tPort = 1883 tTLS = Niciuna dacă useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Niciuna dacă useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/ etc / ssl / certs / ca- certificate.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels / "+ 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 toate as variaveis em uma String for ser enviado print 'Enviando dados' try: publish.single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0.5) print 'Dados enviados' cu excepția: print 'Erro ao enviar dados'
Pasul 5: Configurarea serviciului web O
Pentru a trimite date obținute la serviciul web, utilizăm o platformă ThingSpeak. Pentru tal, entramos no site thingspeak.com e criamos uma conta. Após a criação e login na conta, nos dirigimos ao cabeçalho de menus -> Canais -> Meus Canais e então 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 utilizaíamos. Nu este cazul, utilizăm 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". Pentru codul Python, ca informație obținută pentru canal, este necesar configurarea ID-ului Canalului:
channelID = "Insira o ID do Canal aqui"
De asemenea, com cu Chave de Escrita:
apiKey = "Insira a Chave de Escrita"
Alem da conexão com o canal criado, too são necessárias other configurações no code em Python app.py:
useUnsecuredTCP = Adevărat
useUnsecuredWebsockets = FalseuseSSLWebsockets = Fals mqttHost = "mqtt.thingspeak.com" dacă useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Niciun dacă useUnsecuredWebsockets: tTransport = "websockets" tPort = tLs = 80 tTL websockets "tTLS = {'ca_certs':" / etc / ssl / certs / ca-certificate.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels / "+ channelID +" / publish / "+ apiKey
Pentru a aplica aplicația web cu adevărat receba, de exemplu, o valoare Temperatura nu câmpul 2 (câmpul care trebuie să fie pentru a Temperatura), este necesar indicarea o "câmp2 =" + variável_temperatura, ca și codul următor:
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 to programation in Python, basta executare sau cod care toți os dados scolhidos são enviados ao Web Service. No ThingSpeak, este posibil să realizeze totul sau să monitorizeze graficele.
Recomandat:
Cum să creați o pagină web simplă utilizând paranteze pentru începători: 14 pași
Cum să creați o pagină web simplă utilizând paranteze pentru începători: Introducere Următoarele instrucțiuni oferă îndrumări pas cu pas pentru a crea o pagină web utilizând paranteze. Brackets este un editor de cod sursă cu un accent principal pe dezvoltarea web. Creat de Adobe Systems, este software gratuit și open-source licențiat
LED controlat prin internet utilizând serverul web bazat pe ESP32: 10 pași
LED controlat prin internet utilizând serverul web bazat pe ESP32: Prezentare generală a proiectului În acest exemplu, vom afla cum să realizăm un server web bazat pe ESP32 pentru a controla starea LED-urilor, care este accesibilă de oriunde din lume. Veți avea nevoie de un computer Mac pentru acest proiect, dar puteți rula acest software chiar și pe un i
Server web de temperatură și umiditate Esp32 utilizând PYTHON & Zerynth IDE: 3 pași
Server web de temperatură și umiditate Esp32 utilizând PYTHON & Zerynth IDE: Esp32 este un microcontroler magnific, este puternic la fel ca un Arduino, dar chiar mai bun! Are conectivitate Wifi, permițându-vă să dezvoltați proiecte IOT ieftin și ușor. dispozitivele este frustrant, Mai întâi nu este stabil, Secon
Controlul afișajului LED cu 7 segmente utilizând serverul web ESP8266: 8 pași (cu imagini)
Controlul afișajului LED cu 7 segmente utilizând serverul web ESP8266: Proiectul meu are un Nodemcu ESP8266 care controlează un afișaj pe 7 segmente prin serverul http folosind formularul html
Redați imagini 3D ale PCB-urilor dvs. utilizând Eagle3D și POV-Ray: 5 pași (cu imagini)
Redați imagini 3D ale PCB-urilor dvs. utilizând Eagle3D și POV-Ray: Folosind Eagle3D și POV-Ray, puteți face redări 3D realiste ale PCB-urilor. Eagle3D este un script pentru EAGLE Layout Editor. Acest lucru va genera un fișier de urmărire a razelor, care va fi trimis către POV-Ray, care la rândul său va apărea în cele din urmă im