通过Python连接阿里云物联网(完整的代码在最后)

最近在做stm32+esp01s连接到阿里云,本身是想做微信小程序端但奈何没有基础,于是就选择用python进行连接并传送消息,但目前只能做到单方面传递消息,在python端无法看到设备端上传的消息。

接下来我们逐步拆解现有的代码。(完整的代码放到最后了)

1、导入模块

import tkinter as tk
from tkinter import messagebox
import paho.mqtt.client as mqtt
import json
import ssl

这里导入了所需的模块,包括 Tkinter(用于 GUI)、消息框、Paho MQTT 客户端库、JSON 处理和 SSL。

2、参数定义

params = {
    "clientId": "",
    "username": "",
    "mqttHostUrl": "",
    "passwd": "",
    "port": 1883
}

这里定义了连接 MQTT 代理服务器所需的参数,包括客户端 ID、用户名、密码、主机地址和端口号。

3、MQTT 客户端回调函数

def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))
    client.subscribe("Topic")

def on_message(client, userdata, msg):
    print("Received message: " + str(msg.payload))
    received_message.set(str(msg.payload))

这两个函数是 MQTT 客户端的回调函数。on_connect 函数在客户端连接到 MQTT 代理服务器时被调用,它订阅了一个主题。on_message 函数在接收到 MQTT 消息时被调用,它将接收到的消息内容显示在界面上。

4、发布消息函数

def publish_message(topic, message):
    client.publish(topic, json.dumps(message), qos=1)

这个函数用于向指定主题发布消息,将消息内容转换为 JSON 格式并发布到 MQTT 代理服务器。

5、创建 MQTT 客户端实例

client = mqtt.Client(client_id=params["clientId"], protocol=mqtt.MQTTv311)

使用之前定义的参数,设置了客户端 ID 和 MQTT 协议版本。

6、连接到 MQTT 代理服务器函数

def connect_to_mqtt():
    try:
        client.connect(params["mqttHostUrl"], params["port"], 60)
        messagebox.showinfo("MQTT连接", "已连接到MQTT服务器")
    except Exception as e:
        messagebox.showerror("MQTT连接错误", str(e))

尝试连接到 MQTT 代理服务器,如果连接成功则显示消息框提示已连接,否则显示连接错误信息。

7、与 MQTT 代理服务器断开连接函数

def disconnect_from_mqtt():
    try:
        client.disconnect()
        messagebox.showinfo("MQTT断开连接", "已断开与MQTT服务器的连接")
    except Exception as e:
        messagebox.showerror("MQTT断开连接错误", str(e))

尝试断开与 MQTT 代理服务器的连接,如果断开成功则显示消息框提示已断开连接,否则显示断开连接错误信息。

8、发布消息的函数

def publish_message_from_entry():
    topic_pub = "/a1mpJkhXSWj/WECHAT/user/WECHATfabu"
    message_content = {"data": entry.get()}
    publish_message(topic_pub, message_content)

从文本框中获取消息内容,然后将其封装成 JSON 格式,并通过调用 publish_message 函数发布到指定主题。

9、创建主窗口和 GUI 元素

root = tk.Tk()
root.title("WECHAT端")

connect_button = tk.Button(root, text="连接到MQTT", command=connect_to_mqtt)
disconnect_button = tk.Button(root, text="断开MQTT连接", command=disconnect_from_mqtt)
entry = tk.Entry(root, width=30)
publish_button = tk.Button(root, text="发布消息", command=publish_message_from_entry)
received_message = tk.StringVar()
received_label = tk.Label(root, textvariable=received_message)

# 在主窗口中布局 GUI 元素

创建主窗口和各种 GUI 元素,如连接按钮、断开连接按钮、文本框、发布按钮和用于显示接收到的消息的标签。

10、主循环

root.mainloop()

启动了Tkinter 应用程序的主循环,使程序能够响应用户的交互事件。

11、全篇

import tkinter as tk
from tkinter import messagebox
import paho.mqtt.client as mqtt
import json
import ssl

# 阿里云提供的MQTT参数
params = {
    "clientId": "yourclientId",
    "username": "yourusername",
    "mqttHostUrl": "yourmqttHostUrl",
    "passwd": "yourpasswd",
    "port": 1883
}

# MQTT客户端连接回调函数
def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))
    # 订阅主题
    client.subscribe("Topic")

# MQTT客户端消息接收回调函数
def on_message(client, userdata, msg):
    print("Received message: " + str(msg.payload))
    # 显示收到的消息
    received_message.set(str(msg.payload))

# 发布消息函数
def publish_message(topic, message):
    # 发布消息到指定主题
    client.publish(topic, json.dumps(message), qos=1)

# 创建MQTT客户端实例
client = mqtt.Client(client_id=params["clientId"], protocol=mqtt.MQTTv311)

# 设置TLS连接参数
client.tls_set(ca_certs=None, certfile=None, keyfile=None, cert_reqs=ssl.CERT_NONE, tls_version=ssl.PROTOCOL_TLS,
               ciphers=None)

# 设置用户名和密码
client.username_pw_set(params["username"], params["passwd"])

# 设置连接回调函数
client.on_connect = on_connect
client.on_message = on_message

# 连接到IoT平台的函数
def connect_to_mqtt():
    try:
        client.connect(params["mqttHostUrl"], params["port"], 60)
        messagebox.showinfo("MQTT连接", "已连接到MQTT服务器")
    except Exception as e:
        messagebox.showerror("MQTT连接错误", str(e))

# 断开与IoT平台的连接的函数
def disconnect_from_mqtt():
    try:
        client.disconnect()
        messagebox.showinfo("MQTT断开连接", "已断开与MQTT服务器的连接")
    except Exception as e:
        messagebox.showerror("MQTT断开连接错误", str(e))

# 发布消息的函数
def publish_message_from_entry():
    topic_pub = "/a1mpJkhXSWj/WECHAT/user/WECHATfabu"
    message_content = {"data": entry.get()}  # 从文本框获取消息内容
    publish_message(topic_pub, message_content)

# 创建主窗口
root = tk.Tk()
root.title("WECHAT端")

# 创建连接按钮
connect_button = tk.Button(root, text="连接到MQTT", command=connect_to_mqtt)
connect_button.pack(pady=10)

# 创建断开连接按钮
disconnect_button = tk.Button(root, text="断开MQTT连接", command=disconnect_from_mqtt)
disconnect_button.pack(pady=10)

# 创建文本框和发布按钮
entry = tk.Entry(root, width=30)
entry.pack(pady=10)
publish_button = tk.Button(root, text="发布消息", command=publish_message_from_entry)
publish_button.pack(pady=10)

# 创建标签用于显示收到的消息
received_message = tk.StringVar()
received_message.set("")  # 初始化为空字符串
received_label = tk.Label(root, textvariable=received_message)
received_label.pack(pady=10)

# 主循环
root.mainloop()

程序的基本流程:点击连接按钮后连接到 MQTT 代理服务器,然后可以输入消息并点击发布按钮发布消息。收到的消息会显示在界面上,用户也可以随时点击断开连接按钮断开与 MQTT 代理服务器的连接。

12、展示

首先把ESP01S连接上,我这里是用串口助手方便展示效果

898b28b712494a0eb63cb63949507dda.png

然后运行代码,点击连接a0633c3ebb584cab8d416635d175d1b6.png接下来就可以向设备端发送消息了16519585baed4ef3b579ed3c4ec8d045.png

 

 

 

 

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是使用Python连接阿里云物联网设备并接收数据的代码示例: ```python import paho.mqtt.client as mqtt import ssl # 阿里云物联网平台的设备信息 product_key = "your_product_key" device_name = "your_device_name" device_secret = "your_device_secret" # MQTT连接参数 endpoint = product_key + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" port = 1883 client_id = "python_mqtt_client" username = device_name + "&" + product_key password = "Signature|" + device_secret # MQTT连接回调函数 def on_connect(client, userdata, flags, rc): print("Connected with result code " + str(rc)) # 订阅设备的Topic client.subscribe("/" + product_key + "/" + device_name + "/user/get") # MQTT消息接收回调函数 def on_message(client, userdata, msg): print(msg.topic + " " + str(msg.payload)) # 创建MQTT客户端并连接 client = mqtt.Client(client_id=client_id, clean_session=False) client.username_pw_set(username, password) client.on_connect = on_connect client.on_message = on_message client.tls_set(ca_certs=None, certfile=None, keyfile=None, cert_reqs=ssl.CERT_NONE, tls_version=ssl.PROTOCOL_TLSv1_2, ciphers=None) client.connect(endpoint, port, keepalive=60) # 循环等待接收MQTT消息 client.loop_forever() ``` 在这个示例中,我们使用了Python的paho-mqtt库来连接阿里云物联网平台的MQTT服务器,通过设备密钥进行身份验证,并订阅了设备的Topic。当接收到设备消息时,会调用on_message回调函数进行处理。 需要注意的是,为了保证数据的安全性,我们使用了TLS连接。在连接时需要设置tls_set()方法的参数,其中包括设备证书和服务器证书等信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值