Как стать автором
Обновить
72.45
Skillfactory
Онлайн-школа IT-профессий

Руководство по MicroPython MQTT на базе Raspberry Pi

Время на прочтение 5 мин
Количество просмотров 7.9K
Автор оригинала: EMQ Technologies


Сегодня рассказываем как написать простой MQTT-клиент на Raspberry Pi при помощи MicroPython и реализовать функции подключения, отправки сообщений и подписки между клиентом и брокером MQTT-сообщений. Подробности о разработке с использованием протокола интернета вещей MQTT — к старту курса по Fullstack-разработке на Python.


Микрокомпьютерная материнская плата Raspberry Pi разработана британской компанией Raspberry Pi Foundation на базе ядра ARM. Для подключения клавиатуры, мыши и сетевого кабеля предусмотрены интерфейсы USB и Ethernet. Raspberry Pi обладает всеми основными функциями персонального компьютера, при этом имеет встроенный Wi-Fi, Bluetooth и множество GPIO. Эта плата широко применяется для интернета вещей, развлечений и т. д.


MicroPython — полная программная реализация языка Python 3. Она написана на C и оптимизирована под полный компилятор Python и исполняющую систему на основе микроконтроллера. При этом пользователь получает интерактивные подсказки для немедленного исполнения поддерживаемых команд, они называются REPL. Помимо избранных основных библиотек Python, MicroPython включает модули доступа к низкоуровневому «железу». Это реализация Python 3 с небольшой частью стандартной библиотеки Python, которая оптимизирована для запуска на микроконтроллерах в условиях ограниченного окружения.


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


Установка окружения


1.   Установим MicroPython:


sudo apt-get update
# Install MicroPython
sudo apt-get -y install micropython

Затем выполним в консоли команду micropython. Если вернётся строка MicroPython x.x.x, где x — некоторое число, то установка прошла успешно.



2.   Установим клиентскую библиотеку MQTT.


Для простоты подключения к серверу MQTT установите библиотеку umqtt.simple:


micropython -m upip install umqtt.simple

Подключение к брокеру MQTT-сообщений


Воспользуемся общедоступным брокером MQTT-сообщений от EMQ на основе облачной службы MQTT — EMQX Cloud. Для доступа к брокеру нужны следующие данные:


  • брокер: broker.emqx.io;
  • порт TCP: 1883;
  • порт WebSocket: 8083.

В файле sub.py напишем такой код:


# sub.py
import time
from umqtt.simple import MQTTClient

SERVER="broker.emqx.io"
ClientID = f'raspberry-sub-{time.time_ns()}'
user = "emqx"
password = "public"
topic = "raspberry/mqtt"
msg = b'{"msg":"hello"}'

def sub(topic, msg):
    print('received message %s on topic %s' % (msg, topic))

def main(server=SERVER):
    client = MQTTClient(ClientID, server, 1883, user, password)
    client.set_callback(sub)
    client.connect()
    print('Connected to MQTT Broker "%s"' % (server))
    client.subscribe(topic)
    while True:
        if True:
            client.wait_msg()
        else:
            client.check_msg()
            time.sleep(1)

if __name__ == " __main__":
    main()

А в файле pub.py сохраним такой код:


# pub.py
import time
from umqtt.simple import MQTTClient

server="broker.emqx.io"
ClientID = f'raspberry-pub-{time.time_ns()}'
user = "emqx"
password = "public"
topic = "raspberry/mqtt"
msg = b'{"msg":"hello"}'

def connect():
    print('Connected to MQTT Broker "%s"' % (server))
    client = MQTTClient(ClientID, server, 1883, user, password)
    client.connect()
    return client

def reconnect():
    print('Failed to connect to MQTT broker, Reconnecting...' % (server))
    time.sleep(5)
    client.reconnect()

try:
    client = connect()
except OSError as e:
    reconnect()

while True:
  print('send message %s on topic %s' % (msg, topic))
  client.publish(topic, msg, qos=0)
  time.sleep(1)

Отправка сообщений (Publish)


В файл pub.py сохраним такой код:


# pub.py
import time
from umqtt.simple import MQTTClient

server="broker.emqx.io"
ClientID = f'raspberry-pub-{time.time_ns()}'
user = "emqx"
password = "public"
topic = "raspberry/mqtt"
msg = b'{"msg":"hello"}'

def connect():
    print('Connected to MQTT Broker "%s"' % (server))
    client = MQTTClient(ClientID, server, 1883, user, password)
    client.connect()
    return client

def reconnect():
    print('Failed to connect to MQTT broker, Reconnecting...' % (server))
    time.sleep(5)
    client.reconnect()

try:
    client = connect()
except OSError as e:
    reconnect()

while True:
  print('send message %s on topic %s' % (msg, topic))
  client.publish(topic, msg, qos=0)
  time.sleep(1)

Этот код вызывает функцию publish() для отправки сообщений в тему raspberry/mqtt. Ещё одно свойство MQTT — параметр QoS. Подробнее о нём — в статье Introduction to MQTT QoS (Quality of Service). Ниже ему задаётся значение 0.


Тестирование


С помощью клиента MQTT 5.0 — MQTT X проведём следующие тесты.


Откроем консоль, запустим код MicroPython и примем сообщения:


micropython sub.py


С помощью клиента MQTT X подключимся к серверу MQTT и отправим сообщения в тему raspberry/mqtt:



Смотрим данные в консоли Raspberry Pi и видим, что опубликованные сообщения MQTT X успешно получены:



Тестируем отправку сообщений


1.   Подпишемся на тему raspberry/mqtt в клиенте MQTT X.


2.   Запустим код MicroPython из консоли и отправим сообщение:


micropython pub.py


3.   В клиенте MQTT X просмотрим сообщения, отправленные Raspberry Pi:



Это пример программирования Raspberry Pi с помощью MicroPython. Мы реализовали простой тестовый клиент с помощью umqtt.simple MicroPython и выполнили подключение, отправку и получение сообщений между клиентом и сервером MQTT. Главное преимущество MQTT — надёжный обмен сообщениями между подключёнными удалёнными устройствами в реальном времени с очень небольшим количеством кода и в условиях ограниченной пропускной способности. Raspberry Pi — это небольшой, «малогреющийся», малопотребляющий и довольно универсальный аппаратный модуль. Cочетание MicroPython и Raspberry Pi позволяет разрабатывать инновационные приложения даже на микроконтроллерах с ограниченным окружением.


Научим вас аккуратно работать с данными, чтобы вы прокачали карьеру и стали востребованным IT-специалистом. Новогодняя акция — скидки до 50% по промокоду HABR:




Теги:
Хабы:
+6
Комментарии 8
Комментарии Комментарии 8

Публикации

Информация

Сайт
www.skillfactory.ru
Дата регистрации
Дата основания
Численность
501–1 000 человек
Местоположение
Россия
Представитель
Skillfactory School