Mqtt broker android настройка

Esp8266 управление через интернет по протоколу MQTT


Всем привет! В этой статье будет подробно рассказано и показано как буквально за 20 минут свободного времени настроить дистанционное управление модулем esp8266 с помощью приложения на Android по протоколу MQTT.

Идея дистанционного управления и мониторинга всегда будоражила умы увлеченных в электронике и программировании людей. Ведь возможность в любой момент времени получить или отправить нужные данные, не зависимо от своего местоположения, дает широкие возможности. В своих прошлых статьях ( Статья 1 и Статья 2) я пытался рассмотреть несколько доступных и относительно простых вариантах реализации дистанционного управления микроконтроллерами через интернет. Однако время и весь мир не стоит на месте – прогресс продолжает свое неумолимое движение вперед. За это небольшое время приобрел широкую популярность модуль esp8266 который благодаря низкой цене и встроенному wi-fi стал одним из основных составляющих «Умного дома».

На данный момент MQTT является передовым и наиболее популярным протоколом передачи данных между отдельными устройствами в рамках систем «Умного дома». Он обладает рядом преимуществ по отношению к другим протоколам:
— низкое потребление трафика;
— соединение между клиентом и сервером всегда открыто;
— не нагружает интернет канал;
— отсутствие задержек в передаче данных;
— удобная система подписок на топики;
Всё это дает возможность мониторинга и управления в режиме реального времени. Однако MQTT требует наличие своего собственного сервера, который выполняет роль посредника между клиентами сети. Тут есть два выхода либо создавать свой сервер либо использовать сторонние сервисы.

Описываемая система управления состоит из двух основных частей: сервера MQTT (он как правило один) и клиентов, которых может быть довольно много. В нашем случае в качестве клиентов будут выступать приложение на Android и сам модуль esp8266.

Алгоритм работы системы следующий. Клиенты подключаются к серверу и сразу после подключения каждый из них осуществляет подписку на и интересующие его топики. Всё общение между клиентами проходит транзитом через сервер, который перенаправляет данные другим клиентам с учетом их подписок.

В нашем случае мы будем использовать крайне удобный сервис www.cloudmqtt.com у которого есть бесплатный тарифный план (Cute Cat), который полностью покроет потребности для реализации небольшой собственной системы «умного дома».

Пройдём регистрацию на сайте и получаем необходимые данные для доступа к серверу. При настройке клиентов необходимо использовать обычный Порт ( без SSL и TLS).

Приложение на Android.

Наше приложение будет выступать в качестве пульта управления для микроконтроллера, а так же будет принимать и отображать всю получаемую информацию от esp8266.

Приложение называется IoT MQTT Dashboard и представляет собой готовый mqtt клиент с небольшим количеством очень удобных виджетов. Более подробно о работе с приложением можно посмотреть на видео.

Читайте также:  Код инженерного меню самсунга андроид

Модуль прошивается в среде программирования Arduino, однако хочу заметить что у модуля проблемы с прошивкой в последних версиях Arduino, поэтому рекомендую использовать версию 1.6.4.
Для примера к esp8266 подключены светодиод (5 пин) и датчик температуры ds18b20 (2 пин).
Так как для управления светодиода необходимо получать данные, то esp после подключения должно оформить подписку на соответствующий топик «test/led» иначе все отправленные данные пройдут мимо нашего микроконтроллера.
Для отправки данных температуры подписка не нужно, но при передаче значений температуры необходимо указывать топик в который эти данные пойдут.

Ниже приведен скетч с подробными комментариями.

// Светодиод подлкючен к 5 пину
// Датчик температуры ds18b20 к 2 пину

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

const char *ssid = «AIRPORT»; // Имя вайфай точки доступа
const char *pass = «PASSWORD»; // Пароль от точки доступа

const char *mqtt_server = «server»; // Имя сервера MQTT
const int mqtt_port = 11140; // Порт для подключения к серверу MQTT
const char *mqtt_user = «Login»; // Логи от сервер
const char *mqtt_pass = «Pass»; // Пароль от сервера

#define BUFFER_SIZE 100

bool LedState = false;
int tm=300;
float temp=0;

// Функция получения данных от сервера

void callback(const MQTT::Publish& pub)
<
Serial.print(pub.topic()); // выводим в сериал порт название топика
Serial.print(» => «);
Serial.print(pub.payload_string()); // выводим в сериал порт значение полученных данных

String payload = pub.payload_string();

if(String(pub.topic()) == «test/led») // проверяем из нужного ли нам топика пришли данные
<
int stled = payload.toInt(); // преобразуем полученные данные в тип integer
digitalWrite(5,stled); // включаем или выключаем светодиод в зависимоти от полученных значений данных
>
>

WiFiClient wclient;
PubSubClient client(wclient, mqtt_server, mqtt_port);

sensors.begin();
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
pinMode(5, OUTPUT);
>

void loop() <
// подключаемся к wi-fi
if (WiFi.status() != WL_CONNECTED) <
Serial.print(«Connecting to «);
Serial.print(ssid);
Serial.println(«. «);
WiFi.begin(ssid, pass);

if (WiFi.waitForConnectResult() != WL_CONNECTED)
return;
Serial.println(«WiFi connected»);
>

// подключаемся к MQTT серверу
if (WiFi.status() == WL_CONNECTED) <
if (!client.connected()) <
Serial.println(«Connecting to MQTT server»);
if (client.connect(MQTT::Connect(«arduinoClient2»)
.set_auth(mqtt_user, mqtt_pass))) <
Serial.println(«Connected to MQTT server»);
client.set_callback(callback);
client.subscribe(«test/led»); // подписывааемся по топик с данными для светодиода
> else <
Serial.println(«Could not connect to MQTT server»);
>
>

if (client.connected()) <
client.loop();
TempSend();
>

>
> // конец основного цикла

// Функция отправки показаний с термодатчика
void TempSend() <
if (tm==0)
<
sensors.requestTemperatures(); // от датчика получаем значение температуры
float temp = sensors.getTempCByIndex(0);
client.publish(«test/temp»,String(temp)); // отправляем в топик для термодатчика значение температуры
Serial.println(temp);
tm = 300; // пауза меду отправками значений температуры коло 3 секунд
>
tm—;
delay(10);
>

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

Видео с демонстрацией работы системы управления

Подробная видеоинструкция по настройке системы

Один из вариантов применения управления esp8266 через MQTT протокол

Читайте также:  Просмотр веб камеры для андроид

Управление светодиодной лентой через интернет

Если у вас возникли вопросы по данному материалу, то рекомендую посмотреть вторую часть видео, где материал изложен более наглядно.

В архиве находятся скетч и все необходимые библиотеки для прошивки микроконтроллера скетчем из примера.
Обращаю ваше внимание, что библиотека ESP8266WiFi.h не входит в данный архив, она устанавливается через Boards manager в среде Arduino.

Источник

Русские Блоги

Использование MQTT для разработки Android

Прежде всего, что такое MQTT? Новые проекты будут использовать это, но я никогда не слышал об этом раньше.

Нет пути, многие вещи не могут быть сделаны, когда вы готовы, жизнь такова.

Хорошо, тогда проверьте информацию в Интернете, первоначальное понимание MQTT было сформировано, вот некоторые выдержки:

Несколько способов реализовать push-сообщения на Android

Опрос: клиент периодически запрашивает данные с сервера. Псевдо толчок. Недостатки: потребление электроэнергии, транспортный поток.

Блокировать смс сообщения. Когда серверу необходимо отправить клиенту уведомление, он отправляет короткое сообщение.После получения определенного короткого сообщения клиент сначала получает информацию, а затем перехватывает короткое сообщение. Псевдо толчок. Недостатки: дорогостоящие и текстовые сообщения могут быть перехвачены защитным программным обеспечением.

Режим постоянного соединения (Push): установите долгосрочное соединение между клиентом и сервером. Настоящий толчок.

Google C2DM (Обмен сообщениями на облачные устройства). Нужно выходить в интернет с научной точки зрения, большинство домашних пользователей не могут его использовать

XMPP. XMPP (расширяемый протокол связи и представления) — это протокол, основанный на расширяемом языке разметки (XML). androidpn — это реализация push-уведомлений с открытым исходным кодом для Java на основе протокола XMPP. Он содержит полный клиент и сервер.

MQTT. MQTT — это облегченный протокол публикации / подписки на сообщения, который является идеальным решением для реализации сервера push-сообщений на основе мобильного клиента.

Протокол MQTT

Клиент небольшой, и протокол MQTT эффективно использует пропускную способность сети, в этом смысле он легок. Протокол MQTT поддерживает надежную передачу и исходящую передачу. В этом протоколе обмен сообщениями отделен от приложения. Степень отделения от приложения зависит от того, как оно записано на клиент MQTT и сервер MQTT. Съемная доставка может освободить приложения от любого соединения с сервером и ожидания сообщений. Интерактивный режим похож на электронную почту, но он оптимизирован для программирования приложений.

Протокол имеет много разных функций:

  • Это соглашение о публикации / подписке.
  • Помимо обеспечения рассылки сообщений «один ко многим» публикация / подписка также отделена от приложения. Эти функции очень полезны для приложений с несколькими клиентами.
  • Это не имеет никакого отношения к содержанию сообщения.
  • Он работает по протоколу TCP / IP, который может обеспечить основные сетевые подключения.

Он обеспечивает три качества обслуживания для обмена сообщениями:

  • «Максимум один раз»
    Сообщения доставляются как можно лучше в соответствии с базовой сетью интернет-протокола. Сообщения могут быть потеряны.
    Например, используйте это качество обслуживания с данными датчика среды связи. Неважно, будут ли отдельные показания потеряны или новые публикации будут опубликованы немедленно.
  • «Хотя бы один раз»
    Сообщение гарантированно прибудет, но возможны дубликаты.
  • «Ровно один раз»
    Убедитесь, что вы получаете сообщение только один раз.
    Например, используйте это качество обслуживания в системе бухгалтерского учета.

Повторные или отсутствующие сообщения могут вызвать неудобства или взимать неправильную плату.

  • Это экономичный способ управления потоком сообщений в сети. Например, заголовки фиксированной длины имеют длину всего 2 байта, а обмен протоколами может минимизировать сетевой трафик.
  • Он имеет функцию «Завещание», которая уведомляет клиентов-подписчиков о ненормальном отключении от сервера MQTT. Пожалуйста, обратитесь к выпуску «Последние новости».
  • Читайте также:  Где создают аккаунт для андроид

    Построение MQTT-сервера

    Что касается сервера, пожалуйста, ознакомьтесь с информацией самостоятельно (в конце концов, это отвечает за серверную часть)

    Это, вероятно, так, когда это может быть использовано:

    Фигура 1:

    Рисунок II:

    Хорошо, теперь я готов использовать это!

    Android-реализация MQTT

    Перед его использованием следующие параметры требуются для настройки mqtt на стороне Android:

    • Тема: Подписные события. На рисунке 1 это «тема» — ForTest.
    • URI: адрес MQTT-сервера. Это также «адрес сервера» сервера на рисунке 1.
    • имя пользователя и пароль: учетная запись и пароль, показанные на рисунке 2.
    • ClientId: Идентификатор клиента, который можно настроить, должен быть уникальным, иначе сервер будет отключен при подключении к серверу. Не спрашивайте меня, откуда я его знаю. Например, на рисунке 1 есть «идентификатор клиента», тогда ClientId не может соответствовать ему.

    Что ж, после понимания вышеперечисленных параметров, необходимо настроить библиотеку mqtt в Android.

    Первый шаг, добавить зависимости

    Добавьте в build.gradle в корневой каталог проекта:

    Затем добавьте в build.gradle в каталоге приложения:

    Второй шаг — объявить разрешения

    Добавьте в AndroidManifest.xml:

    Третий шаг — запустить сервис:

    То же самое добавлено в AndroidManifest.xml:

    ОК, после завершения вышесказанного, это конкретная реализация:

    Четвертый шаг — добиться:

    Мы можем поместить конфигурацию MQTTD в Службу, поэтому нам нужно создать Службу, которую можно быстро создать в Android-студии.

    Это автоматически объявит службу в AndroidManifest.xml. Если вы создаете службу, создав класс Java, не забудьте объявить ее в AndroidManifest.xml.

    Ниже приведен код услуги:

    В блогах, которые я видел до запуска сервисов через startService, мы изменили запуск сервисов через BindService, поэтому метод onStartCommond отсутствует.

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

    Приведенный выше код также должен обратить внимание на метод MqttAndroidClient.publish (), который эквивалентен серверу, публикующему сообщение.

    Ниже приведен интерфейс обратного вызова:

    Чтобы передать этот обратный вызов для передачи сообщения, полученного с сервера, нам нужно реализовать класс ServiceConnection и передать данные между Service и Activity через onBind:

    Наконец, есть код для теста:

    Наконец, взгляните на эффект, код интерфейса не будет опубликован, это Button и TextView:

    Источник

    Оцените статью