Paho mqtt python пример

Как использовать MQTT в Python (Paho)

Python — это интерпретируемый, высокоуровневый язык программирования общего назначения. Созданный Гвидо ван Россумом и впервые выпущенный в 1991 году, философия дизайна Python подчеркивает читабельность кода с заметным использованием значительного пробельного пространства. Его языковые конструкции и объектно-ориентированный подход призваны помочь программистам писать понятный, логичный код для небольших и масштабных проектов. 1

MQTT — это легкий протокол обмена сообщениями IoT, основанный на модели «публикация/подписка», который может обеспечить надежный сервис обмена сообщениями в реальном времени для устройств IoT, используя при этом очень мало кода и пропускной способности. Он подходит для устройств с ограниченными аппаратными ресурсами и сетевой среды с ограниченной пропускной способностью. Поэтому протокол MQTT широко используется в IoT, мобильном интернете, IoV, электроэнергетике и других отраслях.

Эта статья в основном рассказывает о том, как использовать клиент paho-mqtt и реализовать подключение, подписку, обмен сообщениями и другие функции между MQTT клиентом и MQTT брокером в проекте на Python.

Инициализация проекта

Этот проект использует Python 3.6 для разработки и тестирования. Читатели могут использовать следующую команду для подтверждения версии Python.

➜ ~ python3 --version Python 3.6.7 

Выбор клиента MQTT

Paho Python Client предоставляет клиентский класс с поддержкой MQTT v3.1 и v3.1.1 на Python 2.7 или 3.x. Он также предоставляет несколько вспомогательных функций для упрощения публикации разовых сообщений на MQTT-сервер.

Читайте также:  Php xdebug command line

Использование Pip для установки MQTT-клиента Paho

Pip — это инструмент управления пакетом Python. Этот инструмент предоставляет функции поиска, загрузки, установки и удаления пакета Python.

Использование Python MQTT

Подключение к брокеру MQTT

В этой статье мы будем использовать бесплатный публичный MQTT-брокер, предоставляемый EMQX. Этот сервис основан на облачной платформе MQTT IoT для создания. Информация о доступе к брокеру выглядит следующим образом:

Импорт MQTT-клиента Paho

from paho.mqtt import client as mqtt_client 

Установка параметров подключения MQTT Broker

Установите адрес, порт и тему подключения MQTT Broker. В то же время, мы вызываем функцию Python random.randint для случайной генерации идентификатора клиента MQTT.

broker = 'broker.emqx.io' port = 1883 topic = "/python/mqtt" client_id = f'python-mqtt-random.randint(0, 1000)>' # username = 'emqx' # password = 'public' 

Написание функции подключения MQTT

Напишите функцию обратного вызова соединения on_connect . Эта функция будет вызываться после подключения клиента, и мы сможем определить, успешно ли подключен клиент, по rc в этой функции. Обычно мы создаем MQTT-клиент в то же время, и этот клиент подключается к broker.emqx.io .

def connect_mqtt(): def on_connect(client, userdata, flags, rc): if rc == 0: print("Connected to MQTT Broker!") else: print("Failed to connect, return code %dn", rc) # Set Connecting Client ID client = mqtt_client.Client(client_id) client.username_pw_set(username, password) client.on_connect = on_connect client.connect(broker, port) return client 

Публикация сообщений

Сначала мы определим цикл while. В этом цикле мы зададим функцию MQTT-клиента publish для отправки сообщений в тему /python/mqtt каждую секунду.

 def publish(client): msg_count = 0 while True: time.sleep(1) msg = f"messages: msg_count>" result = client.publish(topic, msg) # result: [0, 1] status = result[0] if status == 0: print(f"Send `msg>` to topic `topic>`") else: print(f"Failed to send message to topic topic>") msg_count += 1 

Подписаться

Напишите функцию обратного вызова сообщения on_message . Эта функция будет вызываться после того, как клиент получил сообщения от MQTT Broker. В этой функции мы выведем название подписанных тем и полученные сообщения.

def subscribe(client: mqtt_client): def on_message(client, userdata, msg): print(f"Received `msg.payload.decode()>` from `msg.topic>` topic") client.subscribe(topic) client.on_message = on_message 

Полный код

# python 3.6 import random import time from paho.mqtt import client as mqtt_client broker = 'broker.emqx.io' port = 1883 topic = "python/mqtt" # generate client ID with pub prefix randomly client_id = f'python-mqtt-random.randint(0, 1000)>' # username = 'emqx' # password = 'public' def connect_mqtt(): def on_connect(client, userdata, flags, rc): if rc == 0: print("Connected to MQTT Broker!") else: print("Failed to connect, return code %dn", rc) client = mqtt_client.Client(client_id) client.username_pw_set(username, password) client.on_connect = on_connect client.connect(broker, port) return client def publish(client): msg_count = 0 while True: time.sleep(1) msg = f"messages: msg_count>" result = client.publish(topic, msg) # result: [0, 1] status = result[0] if status == 0: print(f"Send `msg>` to topic `topic>`") else: print(f"Failed to send message to topic topic>") msg_count += 1 def run(): client = connect_mqtt() client.loop_start() publish(client) if __name__ == '__main__': run() 
# python3.6 import random from paho.mqtt import client as mqtt_client broker = 'broker.emqx.io' port = 1883 topic = "python/mqtt" # generate client ID with pub prefix randomly client_id = f'python-mqtt-random.randint(0, 100)>' # username = 'emqx' # password = 'public' def connect_mqtt() -> mqtt_client: def on_connect(client, userdata, flags, rc): if rc == 0: print("Connected to MQTT Broker!") else: print("Failed to connect, return code %dn", rc) client = mqtt_client.Client(client_id) client.username_pw_set(username, password) client.on_connect = on_connect client.connect(broker, port) return client def subscribe(client: mqtt_client): def on_message(client, userdata, msg): print(f"Received `msg.payload.decode()>` from `msg.topic>` topic") client.subscribe(topic) client.on_message = on_message def run(): client = connect_mqtt() subscribe(client) client.loop_forever() if __name__ == '__main__': run() 

Проверить

Публикация сообщений

Запустите код публикации сообщений, мы увидим, что клиент успешно подключается и успешно публикует сообщения

Подписаться на сообщения

Запустите код подписки на сообщения, мы увидим, что клиент успешно подключается и успешно получает опубликованные сообщения

Резюме

На данный момент мы закончили работу над использованием клиента paho-mqtt для подключения к бесплатному публичному MQTT брокеру, а также реализовали подключение, публикацию сообщений и подписку на сообщения между тестовым клиентом и MQTT брокером.

Python отличается от языков высокого уровня, таких как C++ или Java, он больше подходит для реализации бизнес-логики на стороне устройства. Использование Python позволяет уменьшить логическую сложность кода и снизить стоимость взаимодействия с устройством. Мы считаем, что Python будет иметь более широкое применение в области IoT.

Далее мы опубликуем больше статей о разработке IoT и Python. Следите за новостями.

Источник

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