如何在Django项目中使用MQTT 您所在的位置:网站首页 mqtt取消订阅 如何在Django项目中使用MQTT

如何在Django项目中使用MQTT

2023-03-03 02:50| 来源: 网络整理| 查看: 265

MQTT是一种基于发布/订阅模型的轻量级物联网消息传递协议,它可以以极少的代码和带宽为连接的设备提供实时可靠的消息传递服务。广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等行业。

Django是一个开源Web框架,也是比较流行的 Python Web

框架之一。本文主要介绍Django项目中MQTT客户端与MQTT代理之间如何连接、订阅、取消订阅以及收发消息。

我们将使用 paho-MQTT 客户端库编写一个简单的 MQTT 客户端。paho-mqtt是 Python 中广泛使用的 MQTT 客户端库,为 Python 2.7 和 3.x 上的 MQTT 5.0、3.1.1 和 3.1 提供客户端支持。

项目初始化

本项目使用 Python 3.8 进行开发测试,读者可以通过以下命令确认 Python 的版本。

$ python3 --version

Python 3.8.2

安装 Django 并paho-mqtt使用 Pip。

pip3 install django

pip3 install paho-mqtt

创建一个 Django 项目。

django-admin startproject mqtt-test

创建后的目录结构如下。

├── manage.py

└── mqtt_test

  ├── __init__.py

  ├── asgi.py

  ├── settings.py

  ├── urls.py

  ├── views.py

  └── wsgi.py

使用 Paho-MQTT

本文将使用EMQ 提供的免费公共 MQTT Broker 。该服务基于 MQTT 云服务 - EMQX Cloud 创建。服务器访问信息如下:

经纪人:broker.emqx.io

TCP 端口:1883

网络套接字端口:8083

导入 Paho-MQTT

import paho.mqtt.client as mqtt

编写连接回调

MQTT连接成功或失败都可以在这个回调函数中处理,本例会在连接django/mqtt成功后订阅主题。

def on_connect(mqtt_client, userdata, flags, rc):

   if rc == 0:

       print('Connected successfully')

       mqtt_client.subscribe('django/mqtt')

   else:

       print('Bad connection. Code:', rc)

编写消息回调

此函数将打印django/mqtt主题收到的消息。

def on_message(mqtt_client, userdata, msg):

   print(f'Received message on topic: {msg.topic} with payload: {msg.payload}')

添加 Django 配置项

在settings.py.对本文中提到的以下配置项和 MQTT 相关概念有疑问的读者可以查看博客 The Easest Guide to Getting Started with MQTT。

此示例使用匿名身份验证,因此用户名和密码设置为空。

MQTT_SERVER = 'broker.emqx.io'

MQTT_PORT = 1883

MQTT_KEEPALIVE = 60

MQTT_USER = ''

MQTT_PASSWORD = ''

配置 MQTT 客户端

client = mqtt.Client()

client.on_connect = on_connect

client.on_message = on_message

client.username_pw_set(settings.MQTT_USER, settings.MQTT_PASSWORD)

client.connect(

    host=settings.MQTT_SERVER,

    port=settings.MQTT_PORT,

    keepalive=settings.MQTT_KEEPALIVE

)

创建消息发布 API

我们创建一个简单的 POST API 来实现 MQTT 消息发布。

在实际应用中,API 代码可能需要更复杂的业务逻辑处理。

在views.py.

import json

from django.http import JsonResponse

from mqtt_test.mqtt import client as mqtt_client

def publish_message(request):

    request_data = json.loads(request.body)

    rc, mid = mqtt_client.publish(request_data['topic'], request_data['msg'])

    return JsonResponse({'code': rc})

在urls.py.

from django.urls import path

from . import views

urlpatterns = [

    path('publish', views.publish_message, name='publish'),

]

启动 MQTT 客户端

在__init__.py.

from . import mqtt

mqtt.client.loop_start()

至此,我们已经完成了所有代码的编写,完整代码可以在GitHub上找到。

最后,执行以下命令运行 Django 项目。

python3 manage.py runserver

当 Django 应用程序启动时,MQTT 客户端将连接到 MQTT Broker 并订阅主题django/mqtt。

测试

接下来,我们将使用一个开源的跨平台 MQTT 客户端——MQTT X来测试连接、订阅和发布。

测试消息接收

在MQTT X中创建一个MQTT连接,输入连接名称,其他参数默认,点击Connect右上角按钮连接broker。

将消息发布到 MQTT X 底部消息发布框中Hello from MQTT

X的主题。django/mqtt

MQTT X 发送的消息将在 Django 运行时窗口中可见。

测试消息发布 API

订阅django/mqttMQTT X 中的主题。

使用 Postman 调用/publishAPI:将消息发布Hello from

Django到django/mqtt主题。

您将在 MQTT X 中看到 Django 发送的消息。

概括

至此,我们已经完成了 MQTT 客户端 using 的开发paho-mqtt,实现了在 Django 应用程序中使用 MQTT 进行通信。在实践中,我们可以根据业务需求扩展 MQTT 客户端,实现更复杂的业务逻辑。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有