Оглавление:
- Шаг 1. Hardware Utilizado
- Шаг 2: Montagem Do Hardware
- Шаг 3: Прошивка Atmega328
- Шаг 4: Программирование на Python
- Шаг 5: Configurando O Web Service
Видео: Веб-сервис Irrigações Automatizadas Com с использованием Python: 5 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
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
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
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
Для критической программы, при необходимости импорта сегментов: '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
Для использования в веб-сервисах, используя платформу 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, возможно, реализует задачи мониторинга графики.
Рекомендуемые:
Мониторинг ускорения с использованием Raspberry Pi и AIS328DQTR с использованием Python: 6 шагов
Мониторинг ускорения с помощью Raspberry Pi и AIS328DQTR с использованием Python: Ускорение конечно, я думаю, в соответствии с некоторыми законами физики. - Терри Райли Гепард использует удивительное ускорение и быстрое изменение скорости при преследовании. Самое быстрое существо, выброшенное на берег, время от времени использует свой максимальный темп, чтобы поймать добычу
Беспроводной пульт дистанционного управления с использованием модуля 2,4 ГГц NRF24L01 с Arduino - Nrf24l01 4-канальный / 6-канальный передатчик-приемник для квадрокоптера - Радиоуправляемый вертолет - Самолет на радиоуправлении с использованием Arduino: 5 шагов (с изображениями)
Беспроводной пульт дистанционного управления с использованием модуля 2,4 ГГц NRF24L01 с Arduino | Nrf24l01 4-канальный / 6-канальный передатчик-приемник для квадрокоптера | Радиоуправляемый вертолет | Самолет на радиоуправлении с использованием Arduino: для управления автомобилем на радиоуправлении | Квадрокоптер | Дрон | Самолет RC | Лодка с дистанционным управлением, нам всегда нужны приемник и передатчик, предположим, для RC QUADCOPTER нам нужен 6-канальный передатчик и приемник, а такие типы TX и RX слишком дороги, поэтому мы сделаем один на нашем
Веб-сервер температуры и влажности Esp32 с использованием PYTHON и Zerynth IDE: 3 шага
Веб-сервер температуры и влажности Esp32 с использованием PYTHON и Zerynth IDE: Esp32 - великолепный микроконтроллер, он мощный, как Arduino, но даже лучше! Он имеет подключение к Wi-Fi, что позволяет дешево и легко разрабатывать проекты IOT. устройства расстраивает, Сначала не стабильно, Секон
Повторное использование модуля веб-камеры HP WebCam 101 Aka 679257-330 в качестве универсальной веб-камеры USB: 5 шагов
Повторное использование модуля веб-камеры HP WebCam 101, известного как 679257-330, в качестве универсальной веб-камеры USB: я хочу приправить свой 14-летний Panasonic CF-18 совершенно новой веб-камерой, но Panasonic больше не поддерживает эту замечательную машину, поэтому я должен используйте серое вещество для чего-нибудь попроще, чем b & b (пиво и гамбургеры). Это первая часть
Учебное пособие по вводу-выводу веб-драйвера с использованием действующего веб-сайта и рабочих примеров: 8 шагов
Учебное пособие по вводу-выводу веб-драйвера с использованием действующего веб-сайта и рабочих примеров: Учебное пособие по вводу-выводу веб-драйвера с использованием действующего веб-сайта и рабочих примеров Последнее обновление: 26.07.2015 (Проверяйте почаще, поскольку я обновляю эти инструкции с более подробной информацией и примерами) мне поставили интересную задачу. Я нуждался в