فهرست مطالب:
- مرحله 1: استفاده از سخت افزار
- مرحله 2: Montagem Do Hardware
- مرحله 3: سیستم عامل Atmega328
- مرحله 4: Programação Em Python
- مرحله 5: Configurando O Web Service
تصویری: سرویس وب Irrigações Automatizadas Com Utilizando Python: 5 مرحله (همراه با تصاویر)
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:57
Neste projeto iremos desenvolver um sistema de monitoramento para plantações ، que irá obter obos 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). Alguns desses dados são obtidos localmente ، enquanto outros soo obtidos 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 utilisado para a construção deste projeto:
1x Qualcomm Dragonboard 410c
1x سنتر سنسور Grove Seeed Sensor
1x سنسور مشاهده آب
1x IMU 10OF Grove Sensor v1.0
1x سنسور Sunlight Grove v1.0
1 عدد USB موس
1 عدد USB Teclado
مانیتور 1x
1 برابر Cabo 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 anterior ، 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 pinosrespondentes do sensor sensor.
4: GND IMU-10DOF.
5: SDA/SCL conectado ao pinorespondente do IMU-10.
6: Pino Sig do Water sensor conectado ao pino 2.
مرحله 3: سیستم عامل Atmega328
Através da Sensors Mezzanine ، و می توانید از طریق microcontrolador Atmega328 ، یا از طریق استفاده از برنامه های کاربردی Arduíno ، و برنامه های کاربردی ، از IDE Arduíno instalada و DragonBoard استفاده کنید. با استفاده از سیستم عامل بدون نیاز به میکروکنترلر ، می توانید از Mezzanine و a DragonBoard استفاده کنید.
از طریق سیستم عامل ، می توانید به عنوان leituras dos sensores ، gerenciando os protocolos de comunicação e operação dos mesmos ، از طریق یک سیستم آبیاری در DragonBoard ، از طریق یک سریال ارتباط برقرار کنید.
*کد مورد نیاز برای استفاده از کتابخانه بدون استفاده از سیستم عامل است. Elas podem ser encontradas em:
imu-10DOF
سنسور نور خورشید
O firmware utilizado pode ser encontrado aqui ou aqui:
مرحله 4: Programação Em Python
Para o programa criado، foram needários os seguintes واردات: '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.sleep () سریال واردات #para o Arduino import paho.mqtt. نشر به عنوان نشر #para publicar import psutil #para configurar یا url واردات اعشاری #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')، استفاده از 'i' para pegar os dados mais atuais do Array que iremos receib 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" #تعریف آدرس اینترنتی
i = 49 #Para pegar os dados mais atuais da estação
j = 0 #Passo do programa
Entrando no 'while (1)'، inicializamos a varável 'jsonurl' como 'None'. می توانید یک URL JSON را از طریق آدرس ایمیل خود وارد کنید ، به عنوان مثال در "while" این کار را انجام دهید. برای دسترسی سریع به URL یا استفاده از آدرس 'urllib2.urlopen (url)' ، لطفاً به عنوان 'timeout = X' ، و یا URL خود را برای مدت زمان کوتاهی ارسال کنید. اگر می خواهید برنامه URL را از طریق یک آدرس دندانپزشکی انجام دهید ، زمان را به پایان برسانید ، یا برنامه ای را برای برنامه های پیشین "comJSON" اجرا کنید. در صورت تمایل ، آدرس اینترنتی خود را بدون سرعت انتخاب کنید ، به عنوان "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' é uma função derivada de 'comJSON'. Iremos explicar somente a 'comJSON'
while (1): jsonurl = هیچکدام #Inicializa a varivavel como هیچ کدام 'Passo:'، j print 'Atualizando dados' try: jsonurl = urllib2.urlopen (url، timeout = 5) #tenta abrir o url em no máximo 5 segundos اگر jsonurl هیچکدام نیست: print 'Dados atualizados' comJSON (jsonurl) #Sse conseguiu abrir o URL، mostra todos os dados به جز: اگر jsonurl وجود ندارد: 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)
با استفاده از "comJSON" ، می توانید از آدرس های اینترنتی استفاده کنید و از طریق آن "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 mostramos estes novos به
def comJSON (jsonurl): #envia todos os dados dados = json.loads (jsonurl.read ()) #carrega os dados JSON da página já aberta #Arduino ard = سریال. سریال ('/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 = شناور (ard.readline (). rstrip ())
چاپ "\ n آردوینو"
if ardAgua == 1: print 'Molhado' else: print 'Seco' print 'Temperatura:'، ardTemp ، '*C' print 'Pressao:'، ardPres ، 'Pa' print 'Ultra-Violeta:'، ardUV ، ' lx '
#استاکائو
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']
print 'Data:'، data
print 'Velocidade do Vento:'، vel_vento، 'm/s' print 'Umidade do ar:'، umidade، '٪'
#تبدیل کنید
vel_vento = اعشاری. اعشاری (vel_vento.rstrip ()) umidade = اعشاری. اعشاری (umidade.rstrip ())
O próximo passo é enviar todos esses dados coletados. Para isso، precisamos colocar ID do canal، Chave de Escrita e o Host em variáveis، além de configurar o useUnsecuredTCP، useUnsecuredWebsockets و 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 todasas as variáveis convertidas) و então publicar os dados no servidor usando 'منتشر شود. تک (موضوع ، بار = tPayload ، نام میزبان = mqttHost ، بندر = tPort ، tls = tTLS ، حمل و نقل = tTransport) '. função então acaba e retorna para 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 comunicacscoms "tcp" tPort = 1883 tTLS = هیچکدام در صورت استفادهUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = در صورت استفاده ازSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs'://etc/s- certificates.crt "، 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channel/" + channelID +"/published/" + 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 dados' try: published.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
برای استفاده از خدمات وب ، از یک Plataforma ThingSpeak استفاده کنید. به منظور، entramos بدون سایت thingspeak.com و criamos uma conta. از طریق ورود به سیستم و ورود به سیستم ، می توانید از منوها -> Canais -> Meus Canais و entico 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. No 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 que o código Python envie as informações obtidas para o canal،، needário 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 needárias outras configurações no código em Python app.py:
useUnsecuredTCP = درست است
useUnsecuredWebsockets = FalseuseSSLWebsockets = نادرست mqttHost = "mqtt.thingspeak.com" در صورت استفادهUUsesecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = هیچکدام در صورت استفاده websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt "، 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channel/" + channelID +"/انتشار/" + کلید ای پی ای
به عنوان یک برنامه کاربردی در وب سایت دریافت کنید ، برای مثال ، در درجه حرارت بالا (در درجه حرارت 2) (لازم است برای درجه حرارت) ، نیاز به نشان دادن "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 execators or código que todos os dados escolhidos são enviados ao Web Service. No ThingSpeak ، این امکان وجود دارد که شما را از طریق مانیتورامنت آتروایس های gráficos انجام دهید.
توصیه شده:
سرویس اینترنت: 3 مرحله
سرویس اینترنت: مقدمه من دوست دارم در باغ خود به پرندگان غذا دهم ، اما متأسفانه موش سیاه نیز از این مزیت استفاده می کند. بنابراین راهی برای جلوگیری از خوردن غذای پرندگان به موش ها اندیشیدم. موش سیاه فقط در تاریکی فعال است ، بنابراین ما باید بی را ببندیم
نحوه تعمیر / سرویس Sharp Optonica RP-114H: 11 مرحله (همراه با تصاویر)
چگونه می توانم Sharp Optonica RP-114H خود را تعمیر و سرویس دهم: بنابراین به این ترتیب به تعمیر و سرویس صفحه گردان عمودی خود ، Optonica RP-114H ، پرداختم. این را از شخصی خریداری کردم که ادعا می کرد سرویس شده و کاملاً کار می کند. من نوع ناله ، بنابراین وقتی معلوم شد اصلاً سرویس نشده است و
سرویس ربات فرمان سروو برای آردوینو: 6 مرحله (همراه با تصاویر)
Servo Steel Robot Car for Arduino: این خودرو بر اساس طراحی پلت فرم arduino طراحی شده است ، هسته اصلی آن Atmega - 328 p است که می تواند فرمان جلو ، محرک چرخ عقب و سایر عملکردها را درک کند. اگر فقط به تنهایی بازی می کنید ، فقط باید از ماژول بی سیم استفاده کنید ؛ اگر می خواهید پیاده سازی کنید
سرویس کنترل شده الکسا: 9 مرحله (همراه با تصاویر)
سرور کنترل شده توسط الکسا: مقدمه من یک لپ تاپ در قفسه ای در دفتر خود دارم که چندین دوربین را که در خارج از خانه من هستند نظارت می کند. آنها مرا در مورد تحویل و بازدیدکنندگان هشدار می دهند. در حالی که من می توانم از یک مرورگر وب برای دیدن تصاویر آنها استفاده کنم ، ساده تر است
پتو پیک نیک مقاوم در برابر آب قابل حمل با سطح سرویس مرکز سخت !: 10 مرحله (همراه با تصاویر)
پتو پیک نیک مقاوم در برابر آب با سطح سخت مرکز سرویس دهی: در اینجا در لس آنجلس تعدادی مکان برای پیک نیک عصرها و تماشای فیلم در فضای باز وجود دارد ، مانند Cinespia در گورستان هالیوود برای همیشه. این ترسناک به نظر می رسد ، اما وقتی پتو مخصوص پیک نیک خود را دارید که روی چمن پهن می شود ، به منظور