Мазмуну:

Irrigações Automatizadas Com Web Service Utilizando Python: 5 кадам (Сүрөттөр менен)
Irrigações Automatizadas Com Web Service Utilizando Python: 5 кадам (Сүрөттөр менен)

Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 кадам (Сүрөттөр менен)

Video: Irrigações Automatizadas Com Web Service Utilizando Python: 5 кадам (Сүрөттөр менен)
Video: Become A Master Of SDXL Training With Kohya SS LoRAs - Combine Power Of Automatic1111 & SDXL LoRAs 2024, Ноябрь
Anonim
Irrigações Automatizadas Com Web Service Utilizando Python
Irrigações Automatizadas Com Web Service Utilizando Python

Бул жерде планшеттердин системасы жана системасы көзөмөлгө алынат, бул жерде атмосфера, температура, ар кандай абанын температурасы, ультрафиолет ультрафиолет, вело венто жана кондиция да планта (сека/мольгада). Alguns Desses dados são obtidos localmente, enquanto outros são obtidos on meio de um Web Service conectado à uma estacaão meteorológica (No caso, estamos utilizando a da Faculdade de Engenharia de Sorocaba). Тигил же бул ThingSpeak веб -сервистеринин жардамы менен.

1 -кадам: Hardware Utilizado

Hardware Utilizado
Hardware Utilizado

Төмөнкү долбоорлорду ишке ашыруу үчүн:

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 Монитор

1x Cabo HDMI

1x Adaptador HDMI-VGA

Acesso à dados da estação meteorológica FACENS

2 -кадам: Montagem Do Hardware

Montagem Do Hardware
Montagem Do Hardware

Dragonboard сенсорунун тандоосу боюнча, сиз компьютериңизди алдыңкы бөлүктө иштете аласыз:

1: Covexao сенсор Groove Sunlight v1.0.

2: +5V туташуусу же IMU-10DOF.

3: +5V Gnd байланыштары суу сенсорунун кабарчыларынан турат.

4: GND IMU-10DOF.

5: SDA/SCL IMU-10 менен байланышкан.

6: Pino Sig do Суу сенсору туташуу 2.

3 -кадам: Firmware Atmega328

Атригаздар Mezzanine, мүмкүн болушунча Atmega328 микроконтроллору, ошондой эле платформалар жана программалар, ошондой эле DragonBoard орнотулган IDE программасы. Дисциплинасы DragonBoard менен Mezzanine жана микроконтроллору жок программалык камсыздоону иштетүү үчүн зарыл болгон шарттарды түзөт.

Тиешелүү программалар эмбарколорду ишке ашыруу үчүн, сенсорлорду, протоколдорду жана оперативдүү операцияларды, ошондой эле DragonBoard порталынын сериялары аркылуу башкарууну камсыз кылат.

*Библиотекалар камтылган программалык камсыздоону колдонууга милдеттүү. Колдонуу шарттары:

imu-10DOF

Күн нуру сенсору

О программалык камсыздоону колдонуңуз:

4 -кадам: Python программасы

Python программасы
Python программасы

Төмөнкү программалар боюнча, импорттун зарылчылыктары: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'decimal'. Функцияларды аныктоо ('comJSON' e 'semJSON'), бул жерде сиз түшүндүрө аласыз.

импорт urllib2, json #para pegar os dados da estacaoimport time #para o time.sleep () импорттук серия #пара же Arduino импорттоо paho.mqtt.публикациялоо катары жарыялоо #пара публикалык импорт псутил #пара конфигурациясы же url импорт ондук #пара конвертер

Эң башкысы, сиз өзүңүздү эстето аласыз, бирок сиз дагы метеорологикага киресиз (эч кандай шартта 'url' жок). Дагы башка варианттар ('i' e 'j'), 'i' параграфтары JSON аркылуу кат алышуу үчүн каттоодон өтөт (49 -жылдагы, акыркы мезгилдеги каттар). 49) e 'j' para contar quantes quadigo cádigo já rodou.

url = "https://www.fieldclimate.com/api/CIDIStationData/GetLast?user_name=facens&user_passw=clima&station_name=002035C0" #URL де estação аныктоо

i = 49 #Para pegar os atos mais atuais da estação

j = 0 #Программаны жасаңыз

Кирүү жок 'while (1)', 'jsonurl' como 'None' деген вариантты киргизиңиз. URL даректери JSON менен алмаштырылганда, "эч качан" эч кандай инициативалар жокко чыгарылбайт, ал эми кайра калыбына келтирилет. Жөнөкөй сөз менен айтканда, URL'дер "urllib2.urlopen (url)", "талаш -тартыш убактысы = X" деген аталышта, URL даректери менен чектелет. Төмөнкү убакыттын өтүшү менен, URL дароо ылдамдыкты кыскартуу керек, жана сиз "comJSON" программасын ишке ашыра албайсыз. Бир URL дароо жок болуп, "semJSON" функциясын аткарыңыз. Амбос функциясы башкача айтканда, "ата -энелердин достугу", "эң башкысы" деген аталыштагы "jJSON" дегенди түшүндүрөт). Como 'semJSON' e uma função derivada de 'comJSON'. Iremos "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 None эмес болсо: print 'Dados atualizados' comJSON (jsonurl) #Se conseguiu abrir o URL, other 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 'убакыт.уйку (1)

Бул жерде "comJSON", "URL" жана "адепсиз" деген аталыштар бар. Каалоочулар сиздер үчүн массивдер жана башка нерселерди колдонсоңуз болот ('ReturnDataSet'). Түзмөктөрдүн оперативдүү жана расмий түрдө иштөөсү, Сериялар Ардуинонун линиялары (окуу сызыгы ()) же Strings түрүнө которулган стрингдер сыяктуу эле, стрингдер жана котормолор. Recebidos os dados do Arduíno, resepememos os dados da estação, simplesmente acessando os sensores específicos dentos do do objeto 'dados' (exemplo '' 'ReturnDataSet'] ['sens_aver_6_5]') телекөрсөтүү жана жаңылыктар.

def comJSON (jsonurl): #envia todos os dados dados = json.loads (jsonurl.read ()) #carrega os dados JSON да página já aberta #Arduino ard = serial. Serial ('/dev/tty96B0', 115200) # Ардуинонун ар кандай түрлөрүн алуу үчүн #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"

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']

басып чыгаруу "Маалыматтар:", маалыматтар

басып чыгаруу 'Velocidade do Vento:', vel_vento, 'm/s' басып чыгаруу 'Umidade do ar:', umidade, '%'

#Конвертте

vel_vento = ондук. Ондук (vel_vento.rstrip ()) umidade = ондук. Ондук (umidade.rstrip ())

O próximo passo é enviar todos esses dados coletados. Тактап айтканда, каналдын идентификатору, ал хосттун варианттары, конфигурациясы UseUnsecuredTCP, useUnsecuredWebsockets жана useSSLWebsockets (usamos True, False, False). Criamos mais uma variável que irá guardar o 'caminho' para o channel, e uma outra para guardar, em String, or que enviado para servidor (com todas as variáveis convertidas) e tão tentar publicar os os dosos no servidor usando 'жарыялоо. жалгыз (тема, жүк = tPayload, хосттун аты = mqttHost, порт = tPort, tls = tTLS, транспорт = tTransport) '. A função então acaba e retorna para lop main.

#Envia channelID = "344243" #Canal ы п о Grupo apiKey = "1PK9ELK0L4AH8CVP" # Код Dado айтылган ThingSpeak mqttHost = "mqtt.thingspeak.com" # configurações де comunicação useUnsecuredTCP = True useUnsecuredWebsockets = False useSSLWebsockets = False useUnsecuredTCP болсо: tTransport = "tcp" tPort = 1883 tTLS = UseUnsecuredWebsockets болсо, эч ким: tTransport = "websockets" tPort = 80 tTLS = UseSSLWebsockets болсо эч ким: import ssl tTransport = "websockets" tTLS = {'ca_certs'://etc/ cert.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels/" + channelID +"/publish/" + apiKey #Cria variavel com o 'caminho' para o channel 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) print 'Dados enviados' тышкары: print 'Erro ao enviar dados'

5 -кадам: Configurando O Web кызматы

Configurando O Web Service
Configurando O Web Service

ThingSpeak веб -сервистеринин эң чоң мүмкүнчүлүктөрү болуп саналат. Эч нерсе жок, сайттар нерселер.com сайтына жазылыңыз. Кирүү же кирүү үчүн, меню -> Canais -> Meus Canais электрондук почтасы "Ново каналы" менен эч кандай байланышы жок. Каналга кирүү үчүн эсколемолор, эскревемолордун мааниси төмөндөгүдөй болуп саналат: 8 эсе көп мүмкүнчүлүктөр бар. Caso жок, utilizamos 7.

Каналдын идентификациялык каналы, ID ID Canal, Chave de Escrita e uma Chave de Leitura. O ID do Canal se encontra abaixo do no do do no kanal and a Chave de Escrita "Chaves". Python каналыңыздын информациясын колдонуп, Каналды конфигурациялоо керек:

channelID = "Каналга кирүү ID ID"

Chave de Escrita комбинациясы:

apiKey = "Инсира жана Чаве де Эскрита"

Python app.py файлдарын конфигурациялоо үчүн, конфигурация жасаңыз.

useUnsecuredTCP = Чын

useUnsecuredWebsockets = FalseuseSSLWebsockets = False mqttHost = "mqtt.thingspeak.com" if useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = None if useUnsecuredWebsockets: tTranstSortSortSortSports "=" WebNock Nock " websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-sertifikatlar.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels/" + channelID +"/publish/" + apiKey

Төмөнкү веб -сайтты ачуу үчүн, мисал үчүн, эч кандай каматуу жок Температура 2 (камполдун эсколемосу үчүн бир температура), жана "талаа2 ="+варианты_температурасы, эч кандай тиешеси жок:

tPayload = "field1 =" + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (data) + "& field6 =" + str (vel_vento) + "& field7 =" + str (үмүтсүз)

Python каналынын программасы боюнча эң чоң программалар, веб -сервистер же энциклопедиялар менен иштөө. ThingSpeak жок, бул мүмкүн болгон бардык мүмкүнчүлүктөрдү көзөмөлдөө үчүн.

Сунушталууда: