news 2026/8/17 10:41:45

python mqgg 发送 json 文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python mqgg 发送 json 文件
pip install paho-mqtt

发送json,含有音频文件;

import json, base64 import paho.mqtt.client as mqtt import time def on_connect(client, userdata, flags, rc): if rc == 0: print("[A] Connected to broker") client.subscribe(TOPIC_SUB) print(f"[A] Subscribed to {TOPIC_SUB}") else: print(f"[A] Connection failed: {rc}") def on_message(client, userdata, msg): print(f"[A] Received message on '{msg.topic}': {msg.payload.decode()}") if __name__ == '__main__': #install "pip install paho-mqtt" BROKER = "192.168.8.127" BROKER = "localhost" PORT = 1883 TOPIC_SUB = "ue/state" # 订阅状态 TOPIC_PUB = "ue/command" # 发布命令 client = mqtt.Client(client_id="ClientA") client.on_connect = on_connect client.on_message = on_message client.connect(BROKER, PORT, keepalive=30) # non-blocking loop client.loop_start() wav_path = r"D:\data\audios\post_2.wav" # 发送一些命令 for i in range(5000): msg = f"command {i}" with open(wav_path, "rb") as f: audio_bytes = f.read() audio_b64 = base64.b64encode(audio_bytes).decode("utf-8") msg_audio = json.dumps({ "type": "audio", "data": audio_b64, }) client.publish("ue/messages", msg_audio) # ===== 发送命令 ===== msg_cmd = json.dumps({ "type": "command", "data": "pause", }) # client.publish("ue/messages", msg_cmd) print(f"[A] Sent: {msg}") time.sleep(3) client.loop_stop() client.disconnect()

接收json,含有音频文件

import json import base64 import paho.mqtt.client as mqtt import os # ====== 配置 ====== BROKER = "localhost" # MQTT Broker PORT = 1883 TOPIC_SUB = "ue/messages" # 订阅 Topic SAVE_DIR = r"D:\data\audios_received" os.makedirs(SAVE_DIR, exist_ok=True) file_index = 0 # ====== MQTT 回调 ====== def on_connect(client, userdata, flags, rc): if rc == 0: print("[B] Connected to broker") client.subscribe(TOPIC_SUB) print(f"[B] Subscribed to {TOPIC_SUB}") else: print(f"[B] Connection failed: {rc}") def on_message(client, userdata, msg): global file_index try: payload_str = msg.payload.decode('utf-8') data = json.loads(payload_str) if data.get("type") == "audio": audio_b64 = data.get("data", "") if not audio_b64: return audio_bytes = base64.b64decode(audio_b64) file_path = os.path.join(SAVE_DIR, f"received_{file_index}.wav") file_index += 1 # 自动判断是否是完整 WAV if is_wav_file(audio_bytes): # 已经是完整 WAV,直接写入文件 with open(file_path, 'wb') as f: f.write(audio_bytes) print(f"[B] Saved complete WAV to {file_path}") else: # 裸 PCM,需要自己加 WAV 头 # 默认假设 16-bit PCM,单声道,采样率 44100 save_pcm_as_wav(file_path, audio_bytes, sample_rate=44100, num_channels=1) print(f"[B] Saved PCM as WAV to {file_path}") elif data.get("type") == "command": cmd = data.get("data") print(f"[B] Received command: {cmd}") except Exception as e: print(f"[B] Error processing message: {e}") # ====== 判断是否完整 WAV 文件 ====== def is_wav_file(data_bytes): # WAV 文件头前4字节是 "RIFF" return data_bytes[:4] == b'RIFF' # ====== 将 PCM 数据写入 WAV 文件 ====== def save_pcm_as_wav(file_path, audio_bytes, sample_rate=44100, num_channels=1): import wave with wave.open(file_path, 'wb') as wf: wf.setnchannels(num_channels) wf.setsampwidth(2) # 16-bit wf.setframerate(sample_rate) wf.writeframes(audio_bytes) # ====== 主程序 ====== if __name__ == "__main__": client = mqtt.Client(client_id="ClientB") client.on_connect = on_connect client.on_message = on_message client.connect(BROKER, PORT, keepalive=30) client.loop_forever()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/9 5:06:53

springboot_ssm814大学生就业帮助系统--论文

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 摘要 随着高校毕业生数量逐年增加,就业压力日益凸显,传统就业服务模式存在信息不对称、资源分散、效…

作者头像 李华
网站建设 2026/8/9 22:35:39

【计算机毕业设计案例】基于springboot+vue的javaweb宝贝回家走失儿童报备基于springboot的走失儿童认领与登记系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/8/10 10:37:37

Java计算机毕设之基于springboot+vue的走失儿童认领与登记系统基于SpringBoot的宝贝回家走失儿童报备系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/8/10 2:51:09

Java毕设选题推荐:基于springboot的走失儿童认领与登记系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/8/12 20:33:03

实验室智能监控系统实战源码-基于YOLOv8的实时目标检测与PyQt5可视化界面

实验室智能监控系统实战源码-基于YOLOv8的实时目标检测与PyQt5可视化界面 前言 实验室安全管理一直是科研机构和教育单位的重点。传统依赖人工巡查的方式存在效率低、易遗漏、成本高等问题,难以满足全天候监控需求。随着计算机视觉技术的发展,基于深度…

作者头像 李华