Mundarija:

Irrigações Automatizadas Com Web Service Utilizando Python: 5 qadam (rasmlar bilan)
Irrigações Automatizadas Com Web Service Utilizando Python: 5 qadam (rasmlar bilan)

Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 qadam (rasmlar bilan)

Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 qadam (rasmlar bilan)
Video: ComfyUI Tutorial - How to Install ComfyUI on Windows, RunPod & Google Colab | Stable Diffusion SDXL 2024, Noyabr
Anonim
Python yordamida avtomatik xizmatlar veb -xizmati
Python yordamida avtomatik xizmatlar veb -xizmati

Planshetlar va tizimlar, shuningdek, atmosfera havosi, harorat, ultrabinafsha nurlari, velosipedlar va shamollatish tizimlari (planshetlar) bilan bog'liq. Alguns desses dados são obtidos localmente, enquanto outros saão obtidos for meio de um Web Service conectado à uma estacaão meteorológica (no caso, estamos utilizando a faculdade de Engenharia de Sorocaba). Bu ThingSpeak veb -saytlari uchun juda muhim vazifadir.

1 -qadam: Uskuna uskuna

Uskuna uskuna
Uskuna uskuna

Loyihani amalga oshirish uchun quyidagilar zarur:

1 marta Qualcomm Dragonboard 410c

1 ta Grove ko'radigan sensorli mezzanin

1x suv ko'rish sensori

1x IMU 10OF Grove Sensor v1.0

1x Quyosh nuri Grove sensori v1.0

1x sichqoncha USB

1x Teclado USB

1x monitor

1x Cabo HDMI

1x Adaptador HDMI-VGA

Yuzlar ob -havosi

2 -qadam: Montagem Do Hardware

Montagem Do Hardware
Montagem Do Hardware

Ajdaho paneli sensori o'rnatilgandan so'ng, oldinga siljishni bajaring:

1: Quyosh nuri v1.0 sensori.

2: +VV yoki IMU-10DOF uchun 5V konektado.

3: +5V va Gend konvektorlari suv sensori.

4: GND IMU-10DOF.

5: SDA/SCL, IMU-10 muxbiri bilan aloqa o'rnatadi.

6: Pino Sig do suv sensori konektado yoki pino 2.

3 -qadam: Atmega328 dasturiy ta'minoti

Datchiklar Mezzanine-ni, shuningdek, Atmega328 mikrokontroldorini, shuningdek, dasturiy ta'minotni, shuningdek, DragonBoard-da IDE-ni o'rnatish uchun mo'ljallangan. DragonBoard va Mezzanine dasturlari bir vaqtning o'zida dasturiy ta'minot va mikrokreditlovchilar uchun dasturiy ta'minotni o'rnatishni talab qiladi.

DragonBoard portali orqali o'rnatilgan operatsion tizimlar, operatsion tizimlar va operatsion tizimlar uchun javob beradigan dasturiy ta'minotni o'rnatish.

*Bibliotecas -ni o'z ichiga olgan dasturiy ta'minotni o'rnatish kerak. Boshqacha qilib aytganda:

imu-10DOF

Quyosh nuri sensori

Siz dasturiy ta'minotni ishlatishingiz mumkin:

4 -qadam: Python dasturi

Python dasturi
Python dasturi

Import qilinadigan dasturlar, masalan, import: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'o'nlik'. Ma'lumotlar funktsiyalari ('comJSON' e 'semJSON') aniqlanadi.

import urllib2, json #para pegar os dados da estacaoimport time #para o time.sleep () import serial #para o Arduino import paho.mqtt.publish sifatida chop eting #para publicar import psutil #para configurar o url import kasr #para konvertori

Boshlang'ich ma'lumotlarga ko'ra, siz "Meteorolagika" da ("url" da hech qanday ma'lumot yo'q), shuningdek, har xil turdagi havolalarni ishlatishingiz mumkin. Ma'lumotlar almashinuvi ('i' e 'j'), JSON orqali ma'lumotlarni uzatish uchun to'lovlarni qabul qilish (masalan, 49 -sonli, oxirgi qatorda). 49) e 'j' pul miqdorini o'lchash.

url = "https://www.fieldclimate.com/api/CIDIStationData/GetLast?user_name=facens&user_passw=clima&station_name=002035C0" #URL manzilini aniqlang

i = 49 #Para -karta sizning xohishingizga ko'ra

j = 0 #Dasturni bajaring

Yo'q, "while (1)" ni kiriting, "hech kim" ni "jsonurl" ga yozib qo'ying. Agar siz JSON -ni o'zgartirmasangiz, u holda "hech qachon", yoki hech bo'lmaganda "qayta tiklash" yoki "o'chirish" tugmachalari o'rnatiladi. Siz URL manzilini "urllib2.urlopen (url)", "argumento time time = X '", "Xavfsizlik", "Xavfsizlik" va "URL -manzil" kabi boshqa funktsiyalarni ishlatishingiz mumkin. Vaqt o'tishi bilan siz URL manzilini tezlashtirishingiz mumkin, shunda siz "comJSON" dasturini ishga tushirasiz. Agar siz "semJSON" funktsiyasini amalga oshirsangiz, URL-ni tezlashtirish mumkin emas. O'yin -kulgilar, o'yin -kulgilar va boshqa vazifalar ('comJSON' mos yozuvlar va ilovalar, eng muhimi 'semJSON' não). "SemJSON" buyrug'i "comJSON" funktsiyasini yaratadi. Iremos "comJSON" ni tushuntiradi

while (1): jsonurl = Yo'q #Inicializa a varivavel como Yo'q chop etish 'Passo:', j print 'Atualizando dados' harakat qilib ko'ring: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos agar jsonurl None bo'lmasa: chop etish 'Dados atualizados' comJSON (jsonurl) #See conseguiu abrir o URL, mostra todos os dados except: if jsonurl 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 'vaqt. uxlash (1)

Bu erda "comJSON" funktsiyasi, shuningdek, "dados" raqamli URL -manzili mavjud. Qabul qiluvchilarni ro'yxatga olish va tarqatish bo'yicha qatorlar, masalan, "ReturnDataSet"). Operatsion operatsiyalar, operatsion tizimlar va operatsion tizimlar, shuningdek, ketma -ket ketma -ket (o'qish liniyasi) (yoki o'qish liniyasi) (yoki o'qish satrlari) Stringlar bilan almashtiriladi, shuningdek, o'z navbatida, matnli yozuvlarni o'zgartiradi. Arduino -ni, ota -onani qabul qilishni, qabul qilishni osonlashtiradigan, "dada" (masalan, "misol" ["ReturnDataSet"] ['sens_aver_6_5]') qurilmalari bilan ishlashni osonlashtiradi..

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 -da mavjud bo'lgan har qanday turdagi ishlarni bajarish uchun #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" ni chop eting

if ardAgua == 1: print 'Molhado' else: chop etish 'Seco' print 'Temperatura:', ardTemp, '*C' print 'Pressao:', ardPres, 'Pa' print 'Ultra-Violeta:', ardUV, ' lx '

#Estakao

chop etish / \ JJON 'chop etish' 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']

"Ma'lumotlar:", ma'lumotlarni chop eting

chop etish 'Velocidade do Vento:', vel_vento, 'm/s' chop etish 'Umidade do ar:', umidade, '%'

#Konvert

vel_vento = o'nlik. O'nli (vel_vento.rstrip ()) umidvor = o'nlik. O'nlik (umidade.rstrip ())

Ota -onalar haqida eslatmalarni o'qing. Shunday qilib, kanalning identifikatori aniqlanadi, shuningdek, serverni sozlash va sozlashUsececuredTCP, useUnsecuredWebsockets va useSSLWebsockets (to'g'ri, noto'g'ri, noto'g'ri). Bu kanalni, kanallarni, kanallarni, chiziqlarni, shuningdek, xizmatlarni (masalan, turli xil konvertatsiya qilish uchun) o'z ichiga oladi, shuning uchun hech qanday xizmat ko'rsatilmaydi. yagona (mavzu, yuk = tPayload, xost nomi = mqttHost, port = tPort, tls = tTLS, transport = tTransport) '. Boshqaruv dasturining bosh direktori.

#Envia channelID = Grupo apiKey = "1PK9ELK0L4AH8CVP" # kod dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" Ey "344243" #Canal criado para # configurações de comunicação useUnsecuredTCP = True useUnsecuredWebsockets = FALSE useSSLWebsockets = FALSE useUnsecuredTCP bo'lsa: tTransport = "tcp" tPort = 1883 tTLS = UseUnsecuredWebsockets bo'lsa, hech kim: tTransport = "websockets" tPort = 80 tTLS = UseSSLWebsockets bo'lsa, hech kim yo'q: import ssl tTransport = "websockets" tTLS = {'ca_certs'://etc/ sertifikatlar.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 mavzu =" kanallar/" + kanalID +"/nashr etish/" + apiKey #Cria variavel com o 'caminho' para o kanal tPayload =" field1 = " + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (data) + "& field6 =" + str ", port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0.5) chop etish 'Dados enviados' bundan mustasno: chop etish 'Erro ao enviar dados'

5 -qadam: O veb -xizmatini sozlash

Configurando O veb -xizmati
Configurando O veb -xizmati

ThingSpeak -ni Internet -xizmatlar yoki Internet -xizmatlar bilan bir vaqtda ko'rish mumkin. Yozuvlar, saytlar hech narsa emas, va hokazo. Menyudan keyin menyu -> Canais -> Meus Canais va Entertainment clicamos "Novo Canal" uchun hech qanday cheklovlar yo'q. Bu kanalni ochish, eskolemosni o'rnatish va o'chirish uchun zarur bo'lgan barcha ma'lumotlarni o'z ichiga oladi. Kaso yo'q, utilizamos 7.

Bu kanal, kanal va boshqa kanallar, Chave de Escrita va Chave de Leitura. "Kanal" nomli kanalni identifikatsiya qilish - bu "Chaves" kanali. Python-ni kanaldan foydalanib, ma'lumot olish mumkin, shuning uchun kanalni identifikatsiya qilish kerak:

channelID = "Kanalni identifikatsiya qilish"

Chave de Escrita bilan bog'laning:

apiKey = "Insire a Chave de Escrita"

Python app.py -dan boshqa hech qanday konfiguratsiya qilinmagan bo'lsa ham, konfiguratsiya qilinmaydi:

useUnsecuredTCP = To'g'ri

useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" if useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = None if useUnsecuredWebsockets: tTranstSortSportSport = "WebSock Nets veb-rozetkalari "tTLS = {'ca_certs':"/etc/ssl/certs/ca-sertifikatlar.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" kanallar/" + kanalID +"/nashr/" + apiKey

Masalan, veb -saytni qayta ishlash, masalan, harorat 2 -toifa emas (masalan, temperatura uchun eskolemos), "maydon2 ="+o'zgaruvchan_temperatura, hech qanday sabab yo'q:

tPayload = "field1 =" + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (ma'lumotlar) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidsiz)

Python -da dasturlar va dasturlar, shuningdek, Internet -xizmatlar yordamida amalga oshiriladi. ThingSpeak yo'q, shuning uchun siz ularni grafika bo'yicha nazorat qilishingiz mumkin.

Tavsiya: