Оглавление:

Веб-сервис Irrigações Automatizadas Com с использованием Python: 5 шагов (с изображениями)
Веб-сервис Irrigações Automatizadas Com с использованием Python: 5 шагов (с изображениями)

Видео: Веб-сервис Irrigações Automatizadas Com с использованием Python: 5 шагов (с изображениями)

Видео: Веб-сервис Irrigações Automatizadas Com с использованием Python: 5 шагов (с изображениями)
Видео: Postman. С нуля до авто-тестов. Тестирование API 2024, Ноябрь
Anonim
Веб-сервис Irrigações Automatizadas Com с использованием Python
Веб-сервис Irrigações Automatizadas Com с использованием Python

Neste projeto iremos desenvolver um sistema de monitoramento para plantações, que irá obter dados de umidade relativa do ar, pressão atmosférica, temperatura do ar, incidência UV, velocidade do vento e condição da moldhada (seca). Alguns desses dados são obtidos localmente, enquanto outros são obtidos por meio de um Web Service conectado à uma estação meteorológica (Не может быть, используется в Faculdade de Engenharia de Sorocaba). Após adquiridos, os dados serão disponibilizados em uma aplicação web baseada em ThingSpeak.

Шаг 1. Hardware Utilizado

Аппаратное обеспечение Utilizado
Аппаратное обеспечение Utilizado

Foi utilizado para a construção deste projeto:

1x Qualcomm Dragonboard 410c

1x мезонин с датчиком Grove Seeed

1x датчик воды

1x IMU 10OF Grove Sensor v1.0

1x датчик солнечного света v1.0

1x мышь USB

1x Teclado USB

1x монитор

1x Кабо HDMI

1x адаптер HDMI-VGA

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

Шаг 2: Montagem Do Hardware

Montagem Do Hardware
Montagem Do Hardware

Após conectar a placa Sensor Mezzanine à dragonboard, выполнить ligação de acordo com o esquemático anterior, sendo:

1: Подключение прямого входа к датчику Groove Sunlight v1.0.

2: + 5V, подключенный к Vcc к IMU-10DOF.

3: + 5 В и заземление, соответствующие датчикам воды.

4: ЗЕМЛЯ IMU-10DOF.

5: SDA / SCL связаны с IMU-10.

6: Pino Sig do Датчик воды conectado ao pino 2.

Шаг 3: Прошивка Atmega328

Мезонин с датчиками, возможность доступа к микроконтроллеру Atmega328 или мессо, использующему платформу Arduino, и прямую программу, использующую IDE Arduino, установленную на DragonBoard. Вы можете использовать мезонин и DragonBoard, чтобы установить периферийные устройства, необходимые для программирования и установки микропрограмм без микроконтроллера.

Встроенная прошивка отвечает за реализацию как leituras dos sensores, gerenciando os protocolos de comunicação и operação dos mesmos, e após a aquisição dos dados, os encaminha через последовательный порт для DragonBoard.

* Если необходимо, чтобы библиотека не использовала прошивку. Elas podem ser encontradas em:

imu-10DOF

Датчик солнечного света

Для микропрограммного обеспечения используется pode ser encontrado aqui ou aqui:

Шаг 4: Программирование на Python

Программа Em Python
Программа Em Python

Для критической программы, при необходимости импорта сегментов: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' и '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 () import serial #para o Arduino import paho.mqtt.publish as publish #para publicar import psutil #para configurar o url import decimal #para converter

O primeiro passo é gravar em uma varável o endereço de onde serão obtidos os dados da Estação Meteorológica (no caso estamos gravando na varável 'url'). Em seguida, inicializamos duas varáveis ('i' e 'j'), utilizando 'i' para pegar os dados mais atuais do Array que iremos Receber через 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" #Define o URL da estação

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, переносится на инициализацию «пока», выполняется перезагрузка, когда выполняется повторение цикла. Не пропускайте, а не URL, используя функцию 'urllib2.urlopen (url)', подбирайте аргументы для аргументов 'timeout = X', sendo X uma quantidade em segundos limite para o URL ser aberto. Если программа согласована с URL-адресом, заданным темпом, по истечении времени ожидания, или программа реализует функцию предварительного изменения comJSON. Если не указать URL без заданного темпа, то можно использовать функцию "semJSON". Ambos как funções são muito parecidas, teno como diferença os dados da estação ('comJSON' irá mostrar e enviar os dados da estação, enquanto 'semJSON' não). Como 'semJSON' является производным от 'comJSON'. Иремос объясняет, что это за '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 máximo 5 segundos если jsonurl не равен None: print 'Dados atualizados' comJSON (jsonurl) #Se consguiu abrir o URL, mostra todos 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) передать j + = 1 print '---------------------------------- -------------------------------------------------- -------------------------------------------- / n 'time.sleep (1)

На первой строке да função 'comJSON', получено todos os dados da URL já abertos numa varável 'dados'. Получив объект из объектов Arrays, вы можете использовать его как объект ('ReturnDataSet'). Реализована операция, иремос энтан начальный или серийный до Ардуино и лер как линхас (readline ()) que o Arduíno está imprimindo e jogando as Strings convertidas dentro de varáveis e, então, mostrando esses dados na tela. Recebidos os dados do Arduíno, recberemos os dados da estação, simplesmente acessando os sensores específicos dentro do objeto 'dados' (por exemplo '[' ReturnDataSet '] [' sens_aver_6_5] ') и Então tamos dambostes es.

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

print 'Data:', данные

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

#Converte

vel_vento = десятичный. Десятичный (vel_vento.rstrip ()) umidade = десятичный. Десятичный (umidade.rstrip ())

O próximo passo é enviar todos esses dados coletados. Para isso, Precisamos colocar a ID do canal, Chave de Escrita e o Host em varáveis, além de configurar o useUnsecuredTCP, useUnsecuredWebsockets и useSSLWebsockets (используется True, False, False). Criamos mais uma vará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 varáveis convertidas) и então tentar publicar os dados no servidor usando 'опубликовать. single (тема, полезная нагрузка = tPayload, имя хоста = mqttHost, порт = tPort, tls = tTLS, транспорт = tTransport) '. Функция запуска и восстановления для принципала цикла.

#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" # Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" # configurações de comunicaçãckets = "falseUnsecuredUnsecuredUnsecuredUnsecurityUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecuredUnsecures "tcp" tPort = 1883 tTLS = Нет, если useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Нет, если useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs': "/ etc / ssl / certs Certific.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 todas as variaveis em uma String para 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' за исключением: print 'Erro ao enviar dados'

Шаг 5: Configurando O Web Service

Веб-служба Configurando O
Веб-служба Configurando O

Для использования в веб-сервисах, используя платформу ThingSpeak. Параллельно, энтрамы нет сайта thingspeak.com и критики ума. Используется для входа и входа в систему, но не действует в меню -> 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 utilizaríamos. No caso, utilizamos 7.

Ao criar um channel, é 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 Chave de Escrita na aba "Chaves". Для создания кода Python envie as informações obtidas para o canal é, обязательно 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"

Все, что нужно сделать, это сделать канал криадо, там, где это необходимо, выходит за рамки конфигурации без написания кода в Python app.py:

useUnsecuredTCP = True

useUnsecuredWebsockets = false websockets "tTLS = {'ca_certs':" / etc / ssl / certs / ca-Certific.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels / "+ channelID +" / publish / "+ apiKey

Para que a aplicação web realmente Receba, por exemplo, o valor Temperatura no campo 2 (campo que escolhemos para ser a Temperatura), необходимо указать "field2 =" + varável_temperatura, como no código a seguir:

tPayload = "field1 =" + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (data) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade)

Попробуйте выполнить задачи по созданию каналов в программе на Python, выполнить некоторые задачи или составить список задач, которые необходимо выполнить для веб-служб. No ThingSpeak, возможно, реализует задачи мониторинга графики.

Рекомендуемые: