道闸管理上线
This commit is contained in:
69
communicate.py
Normal file
69
communicate.py
Normal file
@@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
向Hi3861设备发送JSON命令
|
||||
"""
|
||||
|
||||
import socket
|
||||
import json
|
||||
import time
|
||||
import pyttsx3
|
||||
import threading
|
||||
|
||||
target_ip = "192.168.43.12"
|
||||
target_port = 8081
|
||||
|
||||
def speak_text(text):
|
||||
"""
|
||||
使用文本转语音播放文本
|
||||
每次调用都创建新的引擎实例以避免并发问题
|
||||
"""
|
||||
def _speak():
|
||||
try:
|
||||
if text and text.strip(): # 确保文本不为空
|
||||
# 在线程内部创建新的引擎实例
|
||||
engine = pyttsx3.init()
|
||||
# 设置语音速度
|
||||
engine.setProperty('rate', 150)
|
||||
# 设置音量(0.0到1.0)
|
||||
engine.setProperty('volume', 0.8)
|
||||
|
||||
engine.say(text)
|
||||
engine.runAndWait()
|
||||
|
||||
# 清理引擎
|
||||
engine.stop()
|
||||
del engine
|
||||
except Exception as e:
|
||||
print(f"语音播放失败: {e}")
|
||||
|
||||
# 在新线程中播放语音,避免阻塞
|
||||
speech_thread = threading.Thread(target=_speak)
|
||||
speech_thread.daemon = True
|
||||
speech_thread.start()
|
||||
|
||||
def send_command(cmd, text):
|
||||
#cmd为1,道闸打开十秒后关闭,oled显示字符串信息(默认使用及cmd为4)
|
||||
#cmd为2,道闸舵机向打开方向旋转90度,oled上不显示(仅在qt界面手动开闸时调用)
|
||||
#cmd为3,道闸舵机向关闭方向旋转90度,oled上不显示(仅在qt界面手动关闸时调用)
|
||||
#cmd为4,oled显示字符串信息,道闸舵机不旋转
|
||||
|
||||
command = {
|
||||
"cmd": cmd,
|
||||
"text": text
|
||||
}
|
||||
|
||||
json_command = json.dumps(command, ensure_ascii=False)
|
||||
try:
|
||||
# 创建UDP socket
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
sock.sendto(json_command.encode('utf-8'), (target_ip, target_port))
|
||||
|
||||
# 发送命令后播放语音
|
||||
if text and text.strip():
|
||||
speak_text(text)
|
||||
|
||||
except Exception as e:
|
||||
print(f"发送命令失败: {e}")
|
||||
finally:
|
||||
sock.close()
|
||||
Reference in New Issue
Block a user