جدول المحتويات:
- الخطوة 1: استخدام الأجهزة
- الخطوة 2: Montagem Do Hardware
- الخطوة 3: البرامج الثابتة Atmega328
- الخطوة 4: Programação Em Python
- الخطوة 5: Configurando O Web Service
فيديو: Irrigações Automatizadas Com Web Service Utilizando Python: 5 خطوات (بالصور)
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:41
Neste projeto iremos desenvolver um sistema de monitoramento para plantações، que irá obter dados de umidade relativa do ar، pressão atmosférica، temperature do ar، incidência UV، velocidade do vento e condição da planta (seca / molhada). Alguns desses dados solidos localmente، enquanto outros são getidos por meio de um Web Service conectado à uma estação meteorológica (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: استخدام الأجهزة
Foi useizado for a Construção deste projeto:
1x Qualcomm Dragonboard 410c
1x Grove Seeed Sensor Mezzanine
1x مستشعر رؤية المياه
1x IMU 10OF Grove Sensor v1.0
1x Sunlight Grove Sensor v1.0
1x ماوس USB
1x Teclado USB
1x مراقب
عدد 1 كابو HDMI
1 منفذ Adaptador HDMI-VGA
Acesso à dados da estação meteorológica FACENS
الخطوة 2: Montagem Do Hardware
Após conectar a placa Sensor Mezzanine à dragonboard ، قم بتنفيذ ligação de acordo com o esquemático الأمامي ، Sendo:
1: Conexão direta entre o sensor Groove Sunlight v1.0.
2: + 5V conectado ao Vcc do IMU-10DOF.
3: + 5V e Gnd conectados aos pinos مراسلون يفعلون مستشعر المياه.
4: GND IMU-10DOF.
5: SDA / SCL conectado ao pino مراسلة تفعل IMU-10.
6: Pino Sig do مستشعر المياه conectado ao pino 2.
الخطوة 3: البرامج الثابتة Atmega328
Através da Sensors Mezzanine ، يمكن الوصول إليه من خلال التحكم الدقيق Atmega328 ، أو استخدام الوسائط المتعددة في Arduíno ، أو البرنامج ، أو الدليل ، أو استخدام IDE Arduíno instalada na DragonBoard. Vale ressaltar que a Mezzanine e a DragonBoard مع إمكانية استخدام نظام التشغيل المسبق للبرامج والتطبيقات الثابتة بدون تحكم دقيق.
O حظر البرامج الثابتة é Responsável بواسطة realizar as leituras dos sensores، gerenciando os protocolos de comunicação e operação dos mesmos، e após aquisição dos dados، os encaminha عبر porta serial para a DragonBoard.
* يجب توفير البرامج الثابتة في المكتبة. Elas podem ser encontradas em:
IMU-10DOF
مستشعر ضوء الشمس
البرامج الثابتة useizado pode ser encontrado aqui ou aqui:
الخطوة 4: Programação Em Python
Para o programa criado، foram Requários os seguintes import: 'urllib2'، 'json'، 'time'، 'serial'، 'paho.mqtt.publish'، 'psutil' e 'decimal'. تعريف فورام 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.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 premiro passo é gravar em uma variável o endereço de onde serão getidos os dados da Estação Meteorológica (no caso estamos gravando na variável 'url'). Em seguida ، inicializamos duas variáveis ('i' e 'j') ، 49).
url = "https://www.fieldclimate.com/api/CIDIStationData/GetLast؟user_name=facens&user_passw=clima&station_name=002035C0" #Define o URL da estação
أنا = 49 #Para pegar os dados mais atuais da estação
j = 0 #Passo do programa
Entrando no 'while (1)'، inicializamos a variável 'jsonurl' como 'None'. Esta varável irá abrir a URL JSON، portanto ao inicializarmos ela no início do 'while'، estamos então resetando toda vez que repetirmos o loop. يمكنك استخدام عنوان URL الخاص بـ 'urllib2.urlopen (url)' ، podendo também adicionar umumentso 'timeout = X' ، Sendo X uma quantidade em segundos limite para o URL ser aberto. قم بتثبيت البرنامج على عنوان URL dentro do tempo do timeout ، o programa realizar a função 'comJSON' mencionada anteriormente. Caso não consiga abrir URL no tempo estipulado ، realiza-se a função 'semJSON'. Ambos as funções são muito parecidas، tapo 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 explicar somente a "comJSON"
while (1): jsonurl = None #Inicializa a varivavel como لا شيء طباعة 'Passo:'، j print 'Atualizando dados' حاول: jsonurl = urllib2.urlopen (url، timeout = 5) #tenta abrir o url em no máximo 5 segundos إذا لم يكن jsonurl بلا: اطبع "Dados atualizados" comJSON (jsonurl) #Se conseguiu abrir o URL ، mostra todos os dados باستثناء: إذا لم يكن jsonurl بلا: طباعة "Erro ao atualizar dados" semJSON () #Se não abriu o URL ، معظم نظام التشغيل dados الحصول على localmente (do Arduino) مرر j + = 1 print '---------------------------------- -------------------------------------------------- -------------------------------------------- / n 'وقت النوم (1)
Na Primeira linha da função 'comJSON' ، recebemos 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 exemplo '[' ReturnDataSet '] [' sens_aver_6_5] ') e então mostadmos.
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 recberá 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 ())
طباعة "\ nArduino"
إذا ardAgua == 1: اطبع 'Molhado' else: اطبع 'Seco' print 'Temperatura:'، ardTemp، '* C' print 'Pressao:'، ardPres، 'Pa' print 'Ultra-Violeta:'، ardUV، ' lx '
# استاكاو
طباعة '\ 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']
طباعة "البيانات:" ، البيانات
طباعة 'Velocidade do Vento:'، vel_vento، 'm / s' print 'Umidade do ar:'، umidade، '٪'
# تحويل
vel_vento = عشري. عشري (vel_vento.rstrip ()) أوميداد = عشري. عشري (umidade.rstrip ())
O próximo passo é enviar todos esses dados coletados. Para isso، Precisamos colocar a ID do canal، a Chave de Escrita e o Host em variáveis، além 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 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 'publish. مفرد (موضوع ، حمولة = tPayload ، اسم المضيف = mqttHost ، المنفذ = tPort ، tls = tTLS ، النقل = tTransport) '. لعبة função então acaba e retorna para o loop main.
#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" # Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" # configuraçes de comunicação useUnsecocketsTCPalse "tcp" tPort = 1883 tTLS = لا شيء في حالة useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = لا شيء إذا كان useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/ etc / ss- / ca الشهادات.crt "، 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 الموضوع =" القنوات / "+ 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 (بيانات) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade) #Organiza todas as variaveis em uma String para ser enviado print 'Enviando dados' حاول: publish.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: Configurando O Web Service
بالنسبة إلى البيئة ، يتم الحصول على خدمة الويب ، واستخدام منصة ThingSpeak. Para 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 "قناة نوفو". Ao clicar، escolhemos o nome do Canal، escrevemos uma descrição para ele، e então decidimos quantos dos 8 campos likizaríamos. لا كازو ، الاستخدامات 7.
Ao criar um canal، é gerado um ID do Canal، uma Chave de Escrita e uma Chave de Leitura. اسم المستخدم هل القناة نفسها إذا كنت تريد أن تفعل ذلك في القناة وشاف دي اسكريتا نا أبا "تشافيس". Para que o código Python envie as informações getidas para o canal é، required configurá-lo ao ID do Canal:
channelID = "Insira o ID do Canal aqui"
E também com a Chave de Escrita:
apiKey = "Insira a Chave de Escrita"
Além da conexão com o canal criado، também são implárias outras configurações no código em Python app.py:
useUnsecuredTCP = صحيح
useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" إذا كان useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = لا شيء في حالة الاستخدامUnsecuredWebsockets: tTransport = "websockets" tPort = 80 websockets "tTLS = {'ca_certs':" / etc / ssl / certs / ca-الشهادات.crt "، 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels / "+ channelID +" / publish / "+ مفتاح API
Para que a aplicação web realmente receba، por exemplo، o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura)، éecessario 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 (بيانات) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade)
Tendo vinculado todos os dados do Canal à programação em Python، basta تنفيذي o código que todos os dados escolhidos são enviados ao Web Service. لا يوجد شيء يتكلم ، يمكنك الحصول على ما تريد القيام به أو مراقبة أنماط الحياة اليومية.
موصى به:
جهاز تعقب GPS DIY - تطبيق Python: 5 خطوات (بالصور)
DIY GPS Tracker - تطبيق Python: لقد شاركت في حدث ركوب الدراجات قبل أسبوعين. بعد الانتهاء ، أردت التحقق من الطريق والسرعة التي قطعتها في ذلك الوقت. لسوء الحظ ، لم يتحقق ذلك. الآن أستخدم ESP32 لإنشاء جهاز تعقب GPS ، وسآخذه لتسجيل مسار دراجتي
Como Subir Datos De Un Acelerómetro a Ubidots، Utilizando Arduino YÚN: 6 خطوات
Como Subir Datos De Un Acelerómetro a Ubidots، Utilizando Arduino YÚN: Arduino Y & Uacute؛ N es un microcontrolador basado en el ATmega32u4 y el Atheros AR9331. Siendo el Atheros un procesador capaz de soportar un sistema operativo linux basado en OpenWrt، el Arduino Y & Uacute؛ N cuenta con una version llamada OpenWrt-Yun
MIDI Drum Kit على Python و Arduino: 5 خطوات (بالصور)
MIDI Drum Kit على Python و Arduino: كنت أرغب دائمًا في شراء مجموعة طبول منذ أن كنت طفلاً. في ذلك الوقت ، لم تكن جميع المعدات الموسيقية تحتوي على جميع التطبيقات الرقمية نظرًا لأن لدينا الكثير من التطبيقات اليوم ، وبالتالي كانت الأسعار جنبًا إلى جنب مع التوقعات مرتفعة للغاية. قررت مؤخرًا شراء ج
التحكم في مصابيح LED المتعددة باستخدام Python ودبابيس GPIO الخاصة بـ Raspberry Pi: 4 خطوات (بالصور)
التحكم في مصابيح LED المتعددة باستخدام Python ودبابيس GPIO الخاصة بـ Raspberry Pi: يوضح هذا Instructable كيفية التحكم في دبابيس GPIO المتعددة على RaspberryPi لتشغيل 4 مصابيح LED. سيقدم لك أيضًا المعلمات والعبارات الشرطية في بايثون
Wifi Light Switch Raspberry Pi Web Server: 8 خطوات (بالصور)
Wifi Light Switch Raspberry Pi Web Server: أردت التحكم في مفتاح الضوء في غرفة نومي دون الحاجة إلى النهوض من السرير ، لذلك أردت أن أكون قادرًا على التحكم فيه من هاتفي. كان لدي بعض القيود الإضافية ، وأردت أن أكون قادرًا على التحكم فيه من أي جهاز بسهولة ، وأردت أن أكون قادرًا على