Учебное пособие по MicroPython MQTT на основе Raspberry Pi
Raspberry Pi, разработанная Raspberry Pi Foundation в Великобритании, представляет собой материнскую плату для микрокомпьютера на базе ARM. Он предоставляет интерфейс USB и интерфейс Ethernet для подключения клавиатуры, мыши и сетевого кабеля. Материнская плата имеет основные функции ПК, в то время как Raspberry Pi имеет встроенный Wi-Fi, Bluetooth и множество GPIO и широко используется в обучении, домашних развлечениях, IoT и т. д.
MicroPython — это полная программная реализация языка программирования Python 3, написанная на C и оптимизированная для полного компилятора Python и системы выполнения, работающей поверх аппаратного обеспечения MCU (блока микроконтроллера), предоставляющая пользователю интерактивную подсказку (REPL) для немедленного выполнения. поддерживаемые команды. В дополнение к выбранным основным библиотекам Python, MicroPython включает модули, которые предоставляют программистам доступ к низкоуровневому оборудованию, и представляет собой упрощенную реализацию языка Python 3, включающую небольшую часть стандартной библиотеки Python, оптимизированную для работы на микроконтроллерах и в ограниченных средах. .
MQTT — это упрощенный протокол обмена сообщениями IoT, основанный на модели публикации/подписки, который обеспечивает надежную передачу сообщений в режиме реального времени на подключенные устройства с минимальным кодом и пропускной способностью, что делает его подходящим для устройств с ограниченными аппаратными ресурсами и сетевыми средами с ограниченной пропускной способностью. Поэтому протокол MQTT широко используется в IoT, мобильном интернете, интеллектуальном оборудовании, телематике, энергетике, энергетике и других отраслях.
В этой статье мы обсудим, как написать простой MQTT-клиент на Raspberry Pi с помощью MicroPython, и реализовать функции подключения, подписки и публикации между клиентом и MQTT-брокер.
Настройка среды
- Установите МикроПитон
Этот проект использует MicroPython для разработки, вы можете использовать следующую команду для его установки.
sudo apt-get update
# Install MicroPython
sudo apt-get -y install micropython
После завершения установки выполните micropython
в терминале, и если возвращается MicroPython xxx (x означает число), установка выполнена успешно.
- Установите клиентскую библиотеку MQTT.
Чтобы легко подключиться к серверу MQTT, нам нужно установить umqtt.simple
библиотека.
micropython -m upip install umqtt.simple
Подключение к брокеру MQTT
В этой статье будет использоваться бесплатный публичный MQTT-брокер предоставленный EMQ, который был создан на основе Облачный сервис MQTT — Облако EMQX. Информация о доступе к брокеру выглядит следующим образом.
- Маклер:
broker.emqx.io
- TCP-порт:
1883
- Порт веб-сокета:
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() для отправки сообщения в тему raspberry/mqtt. Параметр QoS — еще одна функция MQTT. Чтобы узнать больше о QoS, см. Введение в MQTT QoS (качество обслуживания). В этом примере мы устанавливаем его на 0.
Тестирование
Мы используем Клиентский инструмент MQTT 5.0 — MQTT X выполнить следующие тесты.
- Откройте терминал, запустите код MicroPython и прослушайте сообщения.
micropython sub.py
- Используйте клиент MQTT X для подключения к серверу MQTT и отправки сообщений в тему.
raspberry/mqtt
.
- Проверьте информацию о терминале Raspberry Pi, и вы увидите, что сообщения публикации MQTT X были успешно получены.
Тестовая публикация
Подписаться на
raspberry/mqtt
раздел в клиенте MQTT X.Запустите код MicroPython в терминале и опубликуйте сообщение.
micropython pub.py
- В клиенте MQTT X просмотрите сообщения, отправленные Raspberry Pi.
Это простой пример программирования с помощью MicroPython на Raspberry Pi. Мы реализовали простой тестовый клиент на MicroPython. umqtt.simple
, и завершил соединение и отправку и получение сообщений между клиентом и сервером MQTT. Самым большим преимуществом MQTT является то, что он предоставляет надежные службы обмена сообщениями в режиме реального времени для подключенных удаленных устройств с очень небольшим количеством кода и ограниченной пропускной способностью, в то время как Raspberry Pi — это небольшой аппаратный модуль с низким уровнем нагрева, низким энергопотреблением и относительно комплексным аппаратным модулем. Сочетание этих двух факторов может помочь вам в разработке более инновационных приложений даже для микроконтроллеров или ограниченных сред.
Первоначально опубликовано на