使用Python连接华为云物联网服务器与服务器完成数据交互

avatar
作者
猴君
阅读量:0

一、前言

随着物联网技术的快速发展,越来越多的设备和系统需要通过网络进行连接和数据交换,以实现智能化管理和控制。华为云物联网平台作为业界领先的物联网解决方案提供商,提供了稳定可靠的MQTT服务器,使得设备能够轻松接入云端,实现数据的实时上传和下发。

当前决定开发一个基于Python的MQTT客户端项目,利用paho-mqtt库与华为云物联网MQTT服务器进行通信。该项目实现设备数据的定时上传功能,确保设备状态和数据能够及时被云端系统获取并处理。同时,项目还具备接收服务器下发消息的能力,使得设备能够根据云端指令进行相应的操作或响应。

通过本项目,能够构建一个高效、稳定的物联网通信框架,为设备的远程监控、控制和管理提供有力支持。通过定时上传数据,可以实时了解设备的运行状态、环境参数等关键信息,从而及时发现并解决潜在问题。同时,接收服务器下发消息的功能也使得设备能够灵活响应云端指令,实现更加智能化的控制和管理。

本项目通过Python的paho-mqtt库与华为云物联网MQTT服务器进行通信,实现设备数据的定时上传和服务器消息的接收处理,为物联网设备的远程监控、控制和管理提供可靠的技术支持。

image-20240612142441300

二、Python代码编写

2.1 安装Paho MQTT库

打开自己电脑的Python安装目录。

如果不知道自己的Python安装目录在哪里。

可以使用 whichwhere 命令

  • 在Linux或macOS上,打开终端并输入:

    which python3 
  • 在Windows上,打开命令提示符并输入:

    where python 

这些命令会显示Python可执行文件的路径。

例如:

C:\Users\11266>where python C:\Users\11266\AppData\Local\Programs\Python\Python311\python.exe C:\Users\11266\AppData\Local\Microsoft\WindowsApps\python.exe 

找到pip.exe文件的路径。

image-20240612140125093

在文件路径里输入cmd按下回车键,打开命令行。

image-20240612140255011

在命令行输入pip install paho-mqtt 安装 paho-mqtt 库。

例如:

C:\Users\11266\AppData\Local\Programs\Python\Python311\Scripts>pip install paho-mqtt Collecting paho-mqtt   Downloading paho_mqtt-2.1.0-py3-none-any.whl (67 kB)      ---------------------------------------- 67.2/67.2 kB 1.2 MB/s eta 0:00:00 Installing collected packages: paho-mqtt Successfully installed paho-mqtt-2.1.0  [notice] A new release of pip is available: 23.1.2 -> 24.0 [notice] To update, run: python.exe -m pip install --upgrade pip  C:\Users\11266\AppData\Local\Programs\Python\Python311\Scripts> 

image-20240612140328300

2.2 paho-mqtt库介绍

paho-mqtt 是一个Python客户端库,用于与MQTT代理服务器进行通信。MQTT(Message Queuing Telemetry Transport)是一种轻量级的、发布-订阅模式的消息传输协议,常用于物联网(IoT)应用和实时数据传输。paho-mqtt 库提供了在Python中实现MQTT客户端的功能,使你可以连接到MQTT代理服务器、订阅主题、发布消息等。

特性

  • 支持MQTT 3.1和3.1.1版本的协议规范。
  • 提供同步和异步的消息发布和订阅功能。
  • 支持TLS/SSL加密连接,以确保安全的通信。
  • 具有遗嘱消息和保持活动功能,以增强连接的稳定性。
  • 可以设置用户名和密码进行连接认证。
  • 提供灵活的回调函数机制,用于处理连接、订阅和接收消息等事件。

安装

可以使用pip来安装 paho-mqtt 库:

pip install paho-mqtt 

总结

paho-mqtt 库提供了一个方便的方式来在Python应用程序中实现MQTT客户端功能。它支持多种MQTT特性,并且易于使用。通过这个库,你可以轻松地构建与MQTT代理服务器进行通信的应用程序,从而实现实时数据传输、远程控制和监控等功能。

2.3 我的华为云MQTT服务器信息

MQTT服务器IP地址: 117.78.5.125 MQTT端口号:  1883 客户端ID:65ec636771d845632aff9496_dev1_0_0_2024052901 用户名:65ec636771d845632aff9496_dev1 登录密码:a6e312275a031e7629e3133fefeac555dbce6dc06b56c039dd8a224084ee5b44 订阅主题:$oc/devices/65ec636771d845632aff9496_dev1/sys/messages/down 发布主题:$oc/devices/65ec636771d845632aff9496_dev1/sys/properties/report 发布的消息:{"services": [{"service_id": "stm32","properties":{"MQ135":60,"DHT11_T":24,"DHT11_H":60,"SOIL_H":50,"motor":1,"FLAME":0,"GPS":{"lon":120.21,"lat":30.19}}}]} 

2.4 实现代码

import paho.mqtt.client as mqtt import json import time from threading import Timer  # MQTT 配置信息 MQTT_SERVER = "117.78.5.125" MQTT_PORT = 1883 CLIENT_ID = "65ec636771d845632aff9496_dev1_0_0_2024052901" USERNAME = "65ec636771d845632aff9496_dev1" PASSWORD = "a6e312275a031e7629e3133fefeac555dbce6dc06b56c039dd8a224084ee5b44" SUBSCRIBE_TOPIC = "$oc/devices/65ec636771d845632aff9496_dev1/sys/messages/down" PUBLISH_TOPIC = "$oc/devices/65ec636771d845632aff9496_dev1/sys/properties/report" PUBLISH_INTERVAL = 10  # 定时器间隔,单位:秒  # 要发布的消息内容 message_payload = {     "services": [         {             "service_id": "stm32",             "properties": {                 "MQ135": 60,                 "DHT11_T": 24,                 "DHT11_H": 60,                 "SOIL_H": 50,                 "motor": 1,                 "FLAME": 0,                 "GPS": {                     "lon": 120.21,                     "lat": 30.19                 }             }         }     ] }  # 回调函数 - 当连接到服务器时被调用 def on_connect(client, userdata, flags, rc):     print(f"Connected with result code {rc}")     client.subscribe(SUBSCRIBE_TOPIC)  # 回调函数 - 当收到服务器下发的消息时被调用 def on_message(client, userdata, msg):     print(f"Received message from topic '{msg.topic}': {msg.payload.decode()}")  # 定时发布消息 def publish_message():     client.publish(PUBLISH_TOPIC, json.dumps(message_payload))     print(f"Published message: {json.dumps(message_payload)}")     # 设置定时器,以继续定期发布消息     Timer(PUBLISH_INTERVAL, publish_message).start()  # 创建MQTT客户端并设置回调函数 client = mqtt.Client(CLIENT_ID, protocol=mqtt.MQTTv311) client.username_pw_set(USERNAME, PASSWORD) client.on_connect = on_connect client.on_message = on_message  # 连接到MQTT服务器 client.connect(MQTT_SERVER, MQTT_PORT, 60)  # 启动网络循环 client.loop_start()  # 启动定时发布消息 publish_message()  # 主线程保持运行状态 try:     while True:         time.sleep(1) except KeyboardInterrupt:     print("Disconnecting from MQTT server...")     client.loop_stop()     client.disconnect()  

代码说明

  1. 配置部分:设置了MQTT服务器信息、客户端ID、用户名、密码、订阅主题和发布主题等。
  2. 回调函数:
    • on_connect: 在连接成功后订阅指定的主题。
    • on_message: 收到消息时打印消息内容。
  3. 定时发布消息:使用 Timer 类定时发布消息到指定的主题。
  4. 主程序:创建并配置MQTT客户端,连接到MQTT服务器,启动网络循环和定时发布消息的功能。

运行代码

运行此代码后,将:

  • 连接到指定的MQTT服务器。
  • 订阅 $oc/devices/65ec636771d845632aff9496_dev1/sys/messages/down 主题。
  • 每10秒钟向 $oc/devices/65ec636771d845632aff9496_dev1/sys/properties/report 主题发布一次消息。
  • 打印所有从服务器接收到的消息。

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!