基于Django框架开发简单的物联网平台

基于Django框架开发简单的物联网平台

在本文中,我们将探讨一个基于Django框架开发的简单物联网平台项目。这个项目不仅包括一个网页端界面,还涵盖了一个微信小程序端,两者在功能上是一致的。该平台主要用于展示温湿度数据,并提供数据的可视化展示以及远程控制设备的能力。

项目介绍

该项目后端使用Django框架,并利用MQTT协议实现数据的采集和传输。数据源可以是实时从传感器采集到的数据,或者是模拟生成的随机数据。当接收到信息时,数据会被保存到MySQL数据库中。微信小程序通过访问Django提供的API接口来获取数据,并在小程序页面中展示这些信息。此外,该平台还可以作为一个发布端,使用户能够通过一个简单的开关操作来控制设备,例如控制一个LED灯的亮灭。

Django项目结构

Django项目文件被组织在DragonbordWebProject目录下,其中包含了多个配置文件,如__init__.py、asgi.py、settings.py、urls.py和wsgi.py。在settings.py文件中,需要进行一些特定的修改,例如注册应用、修改时区以及设置数据库配置。

数据库配置

在settings.py中,数据库默认使用SQLite,但在此项目中被修改为使用MySQL。以下是修改后的数据库配置示例:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '数据库地址',
        'PORT': 3306,
        'USER': '账号',
        'PASSWORD': '密码',
        'NAME': '数据库名'
    }
}

URL配置

在urls.py文件中,配置了根路由以及应用的URL地址。例如,path(‘admin/’, admin.site.urls)用于配置进入后台管理界面的URL路径,而path(‘webapp/’, include(‘WebWechatProject.urls’))则用于配置进入应用的URL路径。

自定义应用WebWechatProject

在WebWechatProject应用中,定义了多个文件,包括admin.py、forms.py、models.py、services.py、urls.py和views.py。其中,services.py、forms.py和urls.py是因项目需求而特别创建的。

模型定义

在models.py文件中,定义了四个模型类:BaseModel、Messages、TemperatureMeasures、HumidityMeasures和DeviceActivationLog。这些模型类通过外键建立了关联关系,用于存储和管理温湿度数据及设备激活日志。

MQTT服务

services.py文件中包含了使用paho.mqtt.client库实现的MQTT协议连接和通信的代码。定义了一个Mqtt类,其中包含了连接、订阅和发布消息的方法。通过装饰器@lru_cache(maxsize=None)实现了单例模式,确保整个应用中只有一个MQTT客户端实例。

视图和表单

views.py文件中包含了多个视图函数,用于处理网页端和微信小程序端的请求。例如,actuators函数用于渲染继电器列表页面,而blink_led_on和blink_led_off函数则用于控制LED灯的亮灭。forms.py文件中定义了一个UpdateStateForm表单类,用于更新DeviceActivationLog模型的measure字段。

URL路由

urls.py文件中定义了应用的URL路由,将不同的URL路径映射到对应的视图函数或类上。

微信小程序端

微信小程序端的账号申请、开发者工具的下载与安装、AppID的申请等步骤在文档中有所描述。小程序的项目结构和页面结构也在文档中进行了简要说明。

远程控制功能的实现:

小程序端向特定的API接口发送POST请求,其中包含一个参数(true或false)。Django接收到该参数后,立即通过MQTT协议将数据传输。特定视图中已经将MQTT发布端固定在代码中,该发布端将数据发送到预先订阅的订阅端。下面提供那段视图代码:

class BlinkMeasuresView(APIView):
    """控制LED灯"""

    def get(self, request, format=None):
        Blink = DeviceActivationLog.objects.all()
        serializer = BlinkMeasureSerializer(Blink, many=True)
        print(serializer.data)
        return Response(serializer.data)

    def post(self, request, format=None):
        mqtt = get_mqtt()
        received_data = request.data  # 获取客户端发送的数据
        if received_data['status'] == 'open':
            mqtt.publish_message('Lijiang/webApp/actuator', 'true')
        elif received_data['status'] == 'close':
            mqtt.publish_message('Lijiang/webApp/actuator', 'false')
        return Response({"message": "Data received and processed successfully"})

运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
微信小程序端
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

源码获取

https://gitlab.com/t18699741793/djangoiothub

详细文档

  • 25
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

力江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值