利用百度物联网MQTT平台远程在线聊天室的实现,使用自带GUI,并通过Pyinstaller进行exe打包

一、项目简介

XIBI(随便取的)是一个简单的聊天工具,通过MQTT协议实现消息的发布和订阅。你可以通过它和连接到同一个MQTT服务器的其他小伙伴聊天。当然,你也可以把它当作一个学习MQTT协议的练手项目。

主要功能:

  1. 连接MQTT服务器:输入昵称,点击连接按钮,就可以加入聊天室。

  2. 发送消息:在输入框里输入你想说的话,按下回车键或者点击发送按钮,消息就会发送到所有连接到服务器的客户端。

  3. 接收消息:当其他用户发送消息时,你会实时收到并显示在聊天框中。

  4. 语音播报:收到新消息时,系统会用语音提醒你,让你不错过任何一条“撩人”的消息。

二、代码解析

1. 导入必要的库

  • paho.mqtt.client:用于MQTT通信。

  • tkinter:用于创建图形用户界面(GUI)。

  • pyttsx3:用于文本转语音,提醒你有新消息。

import paho.mqtt.client as mqtt
import tkinter as tk
from tkinter import scrolledtext
import random
import json
import datetime  # 导入 datetime 模块以获取当前时间
import pyttsx3  # 文本转语音库

2. 初始化文本转语音引擎

这里设置了语音的语速和音量,你可以根据自己的喜好调整。

engine = pyttsx3.init()
engine.setProperty("rate", 1000)  # 语速
engine.setProperty("volume", 1.0)  # 音量 (0.0 到 1.0)

3. MQTT配置

这里配置了MQTT服务器的地址、端口、主题(最好发布和订阅一样,后续只需要通过id来避免自己的消息就好)以及设备的名称和密钥。你可以根据自己的MQTT服务器进行修改。

BROKER = "auyppwt.iot.gz.baidubce.com"  # 接入点地址
PORT = 1883  # 端口
TOPIC_PUB = "自己设计的主题"  # 发布主题
TOPIC_SUB = "自己设计的主题"  # 订阅主题

DEVICE_NAME = "百度云物联网平台获得"  # 设备名称
DEVICE_SECRET = "百度云物联网平台获得"  # 设备密钥

4. 生成随机昵称

为了防止你忘记输入昵称,贴心地为你生成了一个随机的昵称,比如“Xibi123456”。这个其实是client_id,为了避免出现两个客户端重复的情况,但是也可以修改为自己喜欢的,当然和自己的小伙伴聊天应该是不会重复的。

def generate_random_name():
    return str(random.randint(100, 9999999))

5. 获取当前时间

每条消息都会带上时间戳,方便你查看消息的发送时间。

def get_current_time():
    now = datetime.datetime.now()
    return now.strftime("[%H:%M:%S]")

6. MQTT连接回调

这个没什么好说的就是当成功连接到MQTT服务器时,系统会提示你“成功连接Xibi!请开始聊天吧”。如果连接失败,会显示错误代码。

def on_connect(client, userdata, flags, rc, properties=None):
    if rc == 0:
        insert_output_box("成功连接Xibi!\n请开始聊天吧\n", "system")
        client.subscribe(TOPIC_SUB, qos=1)
    else:
        insert_output_box(f"连接失败,错误代码:{rc}\n", "error")

7. MQTT消息接收回调

当收到消息时,系统会解析消息内容并显示在聊天框中。如果是你自己发送的消息,系统会自动忽略。这个就是因为发布和订阅的是一个主题,所以如果id一样就不会显示内容。后续实现一对一聊天也可以通过id来判断。

def on_message(client, userdata, msg):
    try:
        payload = json.loads(msg.payload.decode('utf-8'))
        id = payload.get("id", "未知设备")
        content = payload.get("str", "")
        if id == client_id_entry.get():
            return
        insert_output_bo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值