Анемометр с возможностью удаленной передачи данных с использованием MQTT

У автора этой самоделки есть квадракоптер. Однажды из-за сильного ветра во время его запуска он повредился. Тогда мастер решил сделать устройство для мониторинга скорости ветра. Конечно есть готовые решения, портативные анемометры, например такие, но задача была не просто измерение скорости ветра, но и удаленный мониторинг, причем несколькими клиентами. Дополнительно к скорости ветра собранное устройство также определяет температуру и влажность.

Инструменты и материалы:
-Maduino A9G; или Модуль GPRS/ GSM/ GPS;
-Анемометр;
-Датчик температуры и влажности DHT11;
-Зуммер;
-Сим-карта;
— Сенсорный ЖК-дисплей;
-Аккумулятор;
-Макетная плата;
-Соединительные провода;
-Компьютер с ПО;

Шаг первый: протокол MQTT
Для передачи данных мастер решил использовать протокол MQTT.
Message Queue Telemetry Transport (MQTT) — это межмашинный протокол, предназначенный для упрощенной передачи сообщений публикации / подписки. Он сводит к минимуму требования к пропускной способности сети и ресурсам, обеспечивая надежность за счет минимального размера заголовков пакетов.

MQTT — это протокол передачи, разработанный для Интернета вещей. Он специально оптимизирован для устройств с низкой вычислительной мощностью. И это делает устройства пригодными для различных сценариев приложений IoT (интернет вещей). Настройка системы MQTT для обработки потребностей пользователя в обмене сообщениями pub / sub может принести значительную пользу процессу: простота в использовании, невысокая нагрузку на каналы связи, работа в условиях постоянной потери связи, лёгкая встраиваемость в любую систему. Основное предназначение — работа с телеметрией от различных датчиков, устройств, использование шаблона подписчика обеспечивает возможность устройствам выходить на связь и публиковать сообщения, которые не были заранее известны или предопределены, в частности, протокол не вводит ограничений на формат передаваемых данных.
MQTT обычно работает через TCP / IP.

Методы в MQTT:
Connect — ожидает установления соединения с сервером.
Disconnect — ожидает, пока клиент MQTT завершит любую работу, которая должна быть выполнена, и сеанс TCP / IP отключится.
Subscribe — запрашивает у сервера разрешение клиенту подписаться на темы.
Unsubscribe — запрашивает у сервера разрешение клиенту отказаться от подписки на темы.
Publish — немедленно возвращается в поток приложения после передачи запросов клиенту MQTT.
Сеть MQTT состоит из клиента MQTT и брокера MQTT. MQTT Client может быть любым устройством, от микроконтроллера до полноценного сервера, на котором работает библиотека MQTT и который подключен к брокеру MQTT через любую сеть. MQTT Broker отвечает за получение всех сообщений, фильтрацию, принятие решений и отправку сообщений подписанным клиентам.
Вместо того, чтобы связываться с сервером, клиентские устройства и приложения MQTT публикуют и подписываются на темы, обрабатываемые брокером. Сообщения публикуются в «topics», а не доставляются напрямую от клиента к клиенту. Затем брокер доставляет эти сообщения всем подписанным клиентам. MQTT — это, по сути, протокол публикации / подписки. Он позволяет клиентам подключаться как издатель, подписчик или и то, и другое.

Переданное сообщение MQTT состоит из «тем» (“topics”) и «полезной нагрузки» (“payload”). «Темы» — это ядро MQTT. «Полезная нагрузка» — это конкретный контент, который нужен подписчику.
В сети MQTT клиент должен сначала отправить брокеру запрос на подписку, чтобы подписаться на тему. Запрос может включать несколько тем. Брокер отвечает на запрос подтверждением подписки. Подписки также имеют настройку QoS («качество обслуживания»), которая может использоваться для понижения QoS статуса опубликованного сообщения. Три различных уровня качества обслуживания (QoS) позволяют разработчикам сети выбирать между минимизацией передачи данных и максимальной надежностью.
QoS 0 — на этом уровне издатель один раз отправляет сообщение брокеру и не ждет подтверждения от него, то есть отправил и забыл.
QoS 1 -этот уровень гарантирует, что сообщение точно будет доставлено брокеру, но есть вероятность дублирования сообщений от издателя. После получения дубликата сообщения, брокер снова рассылает это сообщение подписчикам, а издателю снова отправляет подтверждение о получении сообщения. Если издатель не получил PUBACK сообщения от брокера, он повторно отправляет этот пакет, при этом в DUP устанавливается «1».
QoS 2 — на этом уровне гарантируется доставка сообщений подписчику и исключается возможное дублирование отправленных сообщений.
Во многих случаях сообщение всегда публикуется с более низким значением QoS. MQTT позволяет сохранять сообщения у брокера до тех пор, пока устройство не будет готово их принять.
Для протокола было разработано множество брокеров MQTT, и они предлагаются в виде открытых исходных кодов, коммерческих реализаций и управляемых облачных сервисов. Подробный список брокеров MQTT можно найти, например, на mqtt.org. В данном устройстве мастер Mosquitto. Это легкодоступный брокер MQTT с открытым исходным кодом. Ссылка на сервер Mosquitto — test.mosquitto.org. Клиент может публиковать и подписываться на брокера, подключившись к серверу Mosquitto.
Автор устройства хотел сделать двух клиентов. Как показано на рисунке ниже, один клиент получает данные (скорость ветра, температура, влажность и т. д.), а другой получает и отображает их.

Шаг второй: Maduino A9G в качестве клиента
Мастер использовал Maduino A9G в качестве клиента. Через него обрабатываются данные о скорости ветра, местоположении по GPS, температуре и влажности. В A9G есть возможность получать GPS, отправлять сообщения, принимать вызовы и так далее. Для предотвращения потери модуля был установлен зуммер. Он полезен при установке на природе, если забыл где его точно разместил.

Шаг третий: прошивка
1. Прошивку можно получить здесь.
2. AT-команды для A9G для установки клиента MQTT и получения GPS. Идентификатор клиента должен быть единственным.
AT+CGATT=1 // Connect to the network
AT+CGDCONT=1,”IP”,”CMNET” // Set PDP Parameters
AT+CGACT=1,1 // Active the PDP
AT+MQTTCONN=” test.mosquitto.org”,1883,”XXXX”,120,0 // Send MQTT connection packet
AT+MQTTSUB=”TOPIC”,1,0 // Send MQTT subscribe packet
AT+MQTTPUB=”TOPIC”,”PAYLOAD”,0,0,0 // Send MQTT publish packet
AT+MQTTDISCONNN // Disconnect MQTT
3. Команда для A9G на получение GPS.
AT+GPS=1 //Open the GPS
AT+LOCATION=2 // Get the location
AT+GPS=0 // Close the GPS
4. Подключение брокера MQTT.
sendData("AT+MQTTCONN="test.mosquitto.org",1883,"mqttx_0931852d34",120,0", 1000, DEBUG);
5. Подписка на сообщение, чтобы управлять зуммером.
sendData("AT+MQTTSUB="/public/TEST/makerfabs-B",1,0", 1000, DEBUG);
6. Мониторинг скорости ветра.
float windspeek = 0;
if ((millis() — lastDebounceTime) >= debounceDelay) {
int currenTime = millis();
windspeek = Count*0.0875*debounceDelay/(currenTime-lastDebounceTime);
lastDebounceTime = currenTime;
Count=0;
Couttime_t++;
SerialUSB.print(windspeek);
SerialUSB.println("m/s");
}
7. Публикация скорости ветра брокеру в теме «/ public / TEST / makerfabs-W ».
String topic_W = "AT+MQTTPUB="/public/TEST/makerfabs-W",""+(String)windspeek+"",0,0,0";
sendData(topic_W, 1000, DEBUG);

Шаг четвертый: ЖК-дисплей ESP32 в качестве клиента
Мстер использовал 3,2-дюймовый ЖК-экран ESP32 в качестве второго клиента. ESP32 3,2-дюймовый ЖК-дисплей, на котором работает клиентская библиотека MQTT Arduino, может быть клиентом для связи с брокером MQTT через WiFi. Кроме того, 3,2-дюймовый ЖК-дисплей ESP32 сенсорный и может использоваться в качестве устройства ввода.

1. Прошивку можно для ESP32 можно получить здесь.
2. Подключитесь к серверу.
const char *mqtt_server = "test.mosquitto.org";
client.setServer(mqtt_server, 1883); // the MQTT default port is 1883
client.setCallback(callback);
3. Установите единственный идентификатор для клиента.
String clientId = "mqttx_0931857d";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str()))
4. Подпишитесь на температуру у брокера. Тема — « / public / TEST / makerfabs-T ».
client.subscribe("/public/TEST/makerfabs-T");
5. Подпишитесь на влажность у брокера. «Тема» — «/ public / TEST / makerfabs-H».
client.subscribe("/public/TEST/makerfabs-H");
6. Подпишитесь на скорость ветра у брокера.
client.subscribe("/public/TEST/makerfabs-W");
7. Подпишитесь на A9G GPS у брокера.
client.subscribe("/public/TEST/makerfabs-G");
8. Опубликуйте сообщение брокеру для управления зуммером.
client.publish("/public/TEST/makerfabs-B", "buzzerON");
9. Получите обратный вызов подписанного сообщения.
 Показать / Скрыть текстvoid callback(char *topic, byte *payload, unsigned int length)
{
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
String payload_str;
for (int i = 0; i < length; i++)
{
Serial.print((char)payload[i]);
payload_str = payload_str+(char)payload[i];
} /
Serial.println();
Все готово. После сборки устройства и загрузки кода мастер провел испытания сначала в домашних условиях, затем в полевых. Результаты испытания отличные, устройство работает.

Источник (Source)

Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

Подборки: Интернет вещей Анемометр

Источник: usamodelkina.ru

Понравилась статья? Поделиться с друзьями:
KIA