浏览代码

命令单独发送

rambo 9 月之前
父节点
当前提交
2a0fe605c0
共有 7 个文件被更改,包括 380 次插入69 次删除
  1. 11 3
      python/mcu/BaseClass.py
  2. 12 4
      python/mcu/BlueToothMode.py
  3. 253 42
      python/mcu/DeviceControl.py
  4. 8 1
      python/mcu/Mcu.py
  5. 34 19
      python/mcu/RemoteControlV2.py
  6. 46 0
      python/settings.py
  7. 16 0
      python/sockets/message_handler.py

+ 11 - 3
python/mcu/BaseClass.py

@@ -7,9 +7,17 @@ class BaseClass:
     def __init__(self, websocket_manager: ConnectionManager):
         self.websocket_manager = websocket_manager
         self.msg_type = ""
+        # -1连接失败  0未连接 1连接中  2连接成功  3端口占用
+        # self.device_status = 2
 
-    def sendSocketMessage(self, code=0, msg="", data=None):
-        data = {"code": code, "msg": msg, "data": data, "msg_type": self.msg_type}
+    def sendSocketMessage(self, code=0, msg="", data=None,device_status=2):
+        data = {
+            "code": code,
+            "msg": msg,
+            "status": device_status,
+            "data": data,
+            "msg_type": self.msg_type,
+        }
         loop = asyncio.get_event_loop()
         loop.create_task(message_queue.put(data))
     def change_hex_to_int(self,_bytearray):
@@ -86,4 +94,4 @@ class BaseClass:
             except:
                 serial_handle = None
                 _recv_data = b""
-                return False
+                return False

+ 12 - 4
python/mcu/BlueToothMode.py

@@ -50,11 +50,17 @@ class BlueToothMode(BaseClass,metaclass=SingletonType):
         """扫描附近的BLE设备,并寻找ESP32"""
         if self.connect_state == True:
             return
-        print("Scanning for ESP32 devices...*****************")
+        # self.sendSocketMessage(
+        #     code=0, msg="遥控设备V2 未连接", data=None, device_status=-1
+        # )
+        # print("Scanning for ESP32 devices...*****************")
         try:
             devices = await BleakScanner.discover()
         except BaseException as e:
             self.print_error("蓝牙疑似未打开,{}".format(e))
+            self.sendSocketMessage(
+                code=0, msg="蓝牙疑似未打开,{}".format(e), data=None, device_status=-1
+            )
             return
         for d in devices:
             # print(f"Device: {d.name} - Address: {d.address}")
@@ -175,12 +181,12 @@ class BlueToothMode(BaseClass,metaclass=SingletonType):
                         self.print_error(
                                 f"Device {address} disconnected unexpectedly."
                             )
-                        if len(self.devices) == 0:
-                            break
                         with self._lock:
                             self.disconnect_device(
                                     address=address, name=self.devices[address]["name"]
                                 )
+                            if len(self.devices) == 0:
+                                break
                             self.devices[address]["connect_state"] = False
                         break
                     if len(self.devices) == 0:
@@ -226,7 +232,9 @@ class BlueToothMode(BaseClass,metaclass=SingletonType):
                 "plugins_mode": "remote_control",
                 "data": "遥控设备V2 打开蓝牙成功",
             }
-            self.sendSocketMessage(code=0, msg="遥控设备V2 打开蓝牙成功", data=message)
+            self.sendSocketMessage(
+                code=0, msg="遥控设备V2 打开蓝牙成功", data=message, device_status=2
+            )
             return
         await self.scan_for_esp32()
         # 定期重新扫描以发现新设备

+ 253 - 42
python/mcu/DeviceControl.py

@@ -7,10 +7,13 @@ from .BaseClass import BaseClass
 from sockets import ConnectionManager
 from collections import defaultdict
 import threading
+import settings
+
 
 # mcu命令
-class DeviceControl(BaseClass,metaclass=SingletonType):
+class DeviceControl(BaseClass, metaclass=SingletonType):
     lock = threading.Lock()
+
     def __init__(self, websocket_manager: ConnectionManager):
         super().__init__(websocket_manager)
         self.msg_type = "mcu"
@@ -25,7 +28,7 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
         self.last_from_mcu_move_respond_data = None
         self.camera_motor_speed = 0
         self.camera_motor_value = 0
-
+        self.init_state = False
         self.port_name = ""
         self.t_n = 0
         self.serial_ins = None
@@ -99,7 +102,9 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
 
     async def initDevice(self):
         if not self.is_running:
-            self.sendSocketMessage(code=1,msg="mcu设备未连接,请先连接设备")
+            self.sendSocketMessage(
+                code=1, msg="mcu设备未连接,请先连接设备", device_status=0
+            )
             return False
         self.serial_ins.clearn_flush()
         self.to_init_device_origin_point(device_name="mcu")
@@ -124,7 +129,7 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
         #     {"_type": "show_info", "plugins_mode": "mcu", "data": "MCU 连接失败"}
         # )
         message = {"_type": "show_info", "plugins_mode": "mcu", "data": "MCU 连接失败"}
-        self.sendSocketMessage(code=1, msg="MCU 连接失败", data=message)
+        self.sendSocketMessage(code=1, msg="MCU 连接失败", data=message,device_status=-1)
         self.close_connect()
 
     def stop_mcu(self):
@@ -139,7 +144,7 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
         self.add_send_data_queue(buf)
 
     def query_remote_control_battery(self):
-        '''查询遥控器电量'''
+        """查询遥控器电量"""
         buf = [self.command["query_remote_control_battery"]]
         buf.extend(self.encapsulation_data(data=1, len_data=1))
         buf.extend(self.encapsulation_data(data=1, len_data=1))
@@ -212,22 +217,27 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
     def send_cmd(self):
         self.lock.acquire()
         if self.send_data_queue:
+            self.sendSocketMessage(msg="正在发送命令", device_status=1)
             data = self.send_data_queue.pop(0)
             self.serial_ins.write_cmd(data)
-        else:
-            self.t_n += 1
-            # 加大发送获取基础数据的时间间隔
-            # 默认为0.01秒一个循环,每隔1.5秒发送数据
-            if self.t_n > 150:
-                self.t_n = 0
-                data = [self.command["get_all_info"], 1]
-                self.serial_ins.write_cmd(data)
+            self.sendSocketMessage(msg="命令发送完成", device_status=2)
+        # else:
+        #     self.t_n += 1
+        #     # 加大发送获取基础数据的时间间隔
+        #     # 默认为0.01秒一个循环,每隔1.5秒发送数据
+        #     if self.t_n > 150:
+        #         self.t_n = 0
+        #         data = [self.command["get_all_info"], 1]
+        #         self.serial_ins.write_cmd(data)
         self.lock.release()
 
     def print_mcu_error_data(self, receive_data):
         # 扫码数据
         try:
             data = receive_data[1:].decode()
+            if "设备初始化完成" in data:
+                self.init_state = True
+                self.sendSocketMessage(msg=data, device_status=2)
             print("115  print_mcu_error_data:", data)
         except BaseException as e:
             print("117 error {}".format(e))
@@ -250,7 +260,7 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
         print("接收链接信息")
         return
 
-    def to_init_device_origin_point(self, device_name, is_force=True):
+    def to_init_device_origin_point(self, device_name, is_force=False):
         device_id = self.device_name_dict[device_name]
         cmd = 2
         data = [cmd, device_id, 0 if is_force is False else 1]
@@ -311,6 +321,7 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
             # )
             message = {"_type": "mcu_button", "plugins_mode": "mcu", "data": "todo_3"}
             self.sendSocketMessage(code=0, msg="", data=message)
+
     # 获取偏移量信息
     def get_from_mcu_deviation_info(self, receive_data):
         if len(receive_data) == 18:
@@ -390,6 +401,7 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
             self.sendSocketMessage(msg="接收偏移量信息", data=message)
             print("接收偏移量信息")
         return
+
     # 获取其他信息
     def get_from_mcu_other_info(self, receive_data):
         is_auto_send_base_info = self.get_data_from_receive_data(
@@ -556,6 +568,9 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
                     "state_move_turntable_steering": self.state_move_turntable_steering,
                 },
             }
+            # if self.state_camera_motor 
+            if all(value == 2 for value in [self.state_camera_motor, self.state_camera_steering, self.state_turntable_steering, self.state_overturn_steering]):
+                self.init_state = True
             self.sendSocketMessage(msg="获取mcu设备运行状态信息", data=message)
         # 检查是否成功初始化
         if self.is_just_init_time is False:
@@ -596,6 +611,7 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
         if len(ports_dict) <= 0:
             return {}
         return ports_dict
+
     def remove_port(self, port_name):
         """移除串口"""
         print("remove", port_name)
@@ -616,8 +632,9 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
             "plugins_mode": "auto_select_com",
             "data": {"text": "开始识别接口:{}".format(port_name)},
         }
-
-        self.sendSocketMessage(msg="开始识别接口:{}".format(port_name), data=message_data)
+        self.sendSocketMessage(
+            msg="开始识别接口:{}".format(port_name), data=message_data, device_status=1
+        )
         time.sleep(1)
         """
         步骤:
@@ -636,6 +653,7 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
                 1,
                 msg="串口:{} 被占用,或无法识别".format(port_name).format(port_name),
                 data=message_data,
+                device_status=3,
             )
             print("串口:{} 被占用".format(port_name))
             return
@@ -691,8 +709,7 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
                     "data": {"text": "MCU开始连接"},
                 }
                 self.sendSocketMessage(
-                    msg="MCU开始连接",
-                    data=message_data,
+                    msg="MCU开始连接", data=message_data, device_status=1
                 )
                 self.connected_ports_dict[port_name] = "MCU"
             message_data = {
@@ -704,8 +721,7 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
                 },
             }
             self.sendSocketMessage(
-                msg="MCU连接成功",
-                data=message_data,
+                msg="MCU连接成功", data=message_data, device_status=2
             )
         else:
             print("串口无法识别")
@@ -725,38 +741,37 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
         try:
             self.serial_ins = SerialIns(port_name=port_name, baud=115200, timeout=0.1)
             if not self.serial_ins.serial_handle:
-                message_data= {
-                        "_type": "show_info",
-                        "plugins_mode": "mcu",
-                        "data": "MCU 打开串口失败",
-                    }
+                message_data = {
+                    "_type": "show_info",
+                    "plugins_mode": "mcu",
+                    "data": "MCU 打开串口失败",
+                }
                 self.sendSocketMessage(
-                    msg="MCU 打开串口失败",
-                    data=message_data,
+                    msg="MCU 打开串口失败", data=message_data, device_status=-1
                 )
                 self.serial_ins = None
                 self.connect_state = False
                 return False
 
         except:
-            message_data={
+            message_data = {
                 "_type": "show_info",
                 "plugins_mode": "mcu",
                 "data": "MCU 打开串口失败",
             }
             self.sendSocketMessage(
-                msg="MCU 打开串口失败",
-                data=message_data,
+                msg="MCU 打开串口失败", data=message_data, device_status=-1
             )
             self.serial_ins = None
             self.connect_state = False
             return False
 
-        message_data={"_type": "show_info", "plugins_mode": "mcu", "data": "MCU 开始连接"}
-        self.sendSocketMessage(
-            msg="MCU 开始连接",
-            data=message_data,
-        )
+        message_data = {
+            "_type": "show_info",
+            "plugins_mode": "mcu",
+            "data": "MCU 开始连接",
+        }
+        self.sendSocketMessage(msg="MCU 开始连接", data=message_data, device_status=1)
         # =======================发送连接请求=================================
         cmd = 90
         data = [cmd, 1]
@@ -790,8 +805,7 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
                     "data": "MCU 已连接",
                 }
                 self.sendSocketMessage(
-                    msg="MCU 已连接",
-                    data=message_data,
+                    msg="MCU 已连接", data=message_data, device_status=1
                 )
                 self.connect_state = True
                 self.is_running = True
@@ -805,10 +819,7 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
             "plugins_mode": "mcu",
             "data": "MCU 连接失败",
         }
-        self.sendSocketMessage(
-            msg="MCU 连接失败",
-            data=message_data,
-        )
+        self.sendSocketMessage(msg="MCU 连接失败", data=message_data, device_status=-1)
         self.close_connect()
 
     def close_connect(self):
@@ -820,6 +831,7 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
             self.connected_ports_dict = {}  # 已连接的ports
             self.p_list = []
             self.temp_ports_dict = {}
+            self.init_state = False
             print("关闭MCU")
 
     @property
@@ -849,6 +861,204 @@ class DeviceControl(BaseClass,metaclass=SingletonType):
         # self._mcu_move_state = 2
         return self._mcu_move_state
 
+    def to_deal_device(self, device_name, value=1, _type=0, times=1, delay=0):
+        """
+        value 激光0关 1开
+        mp3_player  value 表示0表示关,1表示开,_type 表示歌曲切换到指定歌曲
+        delay:延迟处理,单位为0.1秒,即delay=100时,表示延迟10秒
+        """
+        device_id = self.device_name_dict[device_name]
+        if device_name == "buzzer":
+            value = int(value)
+
+        cmd = 3
+        data = [
+            cmd,
+            device_id,
+            value,
+            _type,
+            times,
+            delay,
+        ]
+
+        self.add_send_data_queue(data)
+        # if self.serial_ins:
+        #     self.serial_ins.write_cmd(data)
+        return True
+
+    def to_device_move(
+        self,
+        device_name,
+        value=0,
+        max_speed=None,
+        up_speed=None,
+        down_speed=None,
+        _is_debug=0,
+        is_relative=0,
+        is_deviation=1,
+    ):
+        """
+        此处输入单位为 毫米,以及度  需要先缩小,再放大
+        """
+
+        speed = settings.moveSpeed()
+
+        cmd = 1
+        device_id = self.device_name_dict[device_name]
+        match device_name:
+            case "camera_high_motor":
+                # value 单位毫米
+                # max_speed = 10000 if max_speed is None else max_speed
+                # up_speed = 800 if up_speed is None else up_speed
+                # down_speed = 700 if down_speed is None else down_speed
+
+                max_speed = (
+                    speed[device_name]["max_speed"] if max_speed is None else max_speed
+                )
+                up_speed = (
+                    speed[device_name]["up_speed"] if up_speed is None else up_speed
+                )
+                down_speed = (
+                    speed[device_name]["down_speed"]
+                    if down_speed is None
+                    else down_speed
+                )
+
+                value = value / 10  # value 单位毫米
+                assert 0 <= value <= 40
+                assert 0 <= max_speed <= 10000
+            case "camera_steering":
+                # 角度为度 未放大 精确到0.1度
+                max_speed = 6000 if max_speed is None else max_speed
+                up_speed = 500 if up_speed is None else up_speed
+                down_speed = 500 if down_speed is None else down_speed
+                assert -360 <= value <= 360
+            case "turntable_steering":
+                # 角度为度 未放大 精确到0.1度
+                # max_speed = 6000 if max_speed is None else max_speed
+                # up_speed = 500 if up_speed is None else up_speed
+                # down_speed = 400 if down_speed is None else down_speed
+                max_speed = (
+                    speed[device_name]["max_speed"] if max_speed is None else max_speed
+                )
+                up_speed = (
+                    speed[device_name]["up_speed"] if up_speed is None else up_speed
+                )
+                down_speed = (
+                    speed[device_name]["down_speed"]
+                    if down_speed is None
+                    else down_speed
+                )
+
+                assert -720 <= value <= 720
+
+            case "overturn_steering":
+                # 角度为度 未放大 精确到0.1度
+                max_speed = 2 if max_speed is None else max_speed
+                up_speed = 1 if up_speed is None else up_speed
+                down_speed = 1 if down_speed is None else down_speed
+                assert 0 <= value <= 360
+
+            case "turntable_position_motor":
+                # value 单位毫米
+                max_speed = 11000 if max_speed is None else max_speed
+                up_speed = 900 if up_speed is None else up_speed
+                down_speed = 900 if down_speed is None else down_speed
+                value = value / 10  # value 单位毫米
+                assert 0 <= value <= 900
+                assert 0 <= max_speed <= 15000
+
+        _dir = True if value >= 0 else False
+
+        value = int(abs(value * 10))  # 此处value赋值后,单位为mm以及0.1度
+        print("准备执行",device_name, value)
+        data = [
+            cmd,
+            device_id,
+            1 if _dir else 0,
+            0xFF & value >> 8,
+            0xFF & value,
+            0xFF & max_speed >> 8,
+            0xFF & max_speed,
+            0xFF & up_speed >> 8,
+            0xFF & up_speed,
+            0xFF & down_speed >> 8,
+            0xFF & down_speed,
+            _is_debug,
+            is_deviation,
+            is_relative,
+        ]
+        self.add_send_data_queue(data)
+
+    def controlDevice(self, device_name, value):
+        '''控制设备移动等'''
+        if not self.is_running:
+            self.sendSocketMessage(
+                code=1, msg="mcu设备未连接,请先连接设备", device_status=0
+            )
+            return False
+        if not self.init_state:
+            self.sendSocketMessage(
+                code=1, msg="mcu设备未初始化", device_status=4
+            )
+            return False
+        _is_debug = 1
+        match device_name:
+            case "camera_high_motor":
+                # 相机电机
+                print(device_name, value)
+                self.to_device_move(
+                    device_name=device_name,
+                    value=value,
+                    max_speed=1400,
+                    up_speed=400,
+                    down_speed=100,
+                    _is_debug=_is_debug,
+                    is_deviation=0,
+                )
+            case "camera_steering":
+                print(device_name, value)
+                # 相机舵机
+                self.to_device_move(
+                    device_name=device_name,
+                    value=value,
+                    _is_debug=_is_debug,
+                    is_deviation=0,
+                )
+            case "turntable_steering":
+                # 转盘舵机
+                self.to_device_move(
+                    device_name=device_name,
+                    value=value,
+                    _is_debug=_is_debug,
+                    is_deviation=0,
+                )
+            case "turntable_position_motor":
+                # 转盘舵机
+                self.to_device_move(
+                    device_name=device_name,
+                    value=value,
+                    max_speed=1400,
+                    up_speed=400,
+                    down_speed=100,
+                    _is_debug=_is_debug,
+                    is_deviation=0,
+                )
+            case "overturn_steering":
+                # 翻板舵机中位
+                self.to_device_move(
+                    device_name="overturn_steering",
+                    value=value,
+                    _is_debug=_is_debug,
+                    is_deviation=0,
+                )
+            case "to_deal_device":
+                self.to_deal_device(device_name, value=value, _type=0, times=1)
+            case _:
+                pass
+            # case "photograph":
+            #     self.photograph(goods_art_no=None)
+
 
 async def checkMcuConnection(device_ctrl: DeviceControl):
     if device_ctrl.is_running == True:
@@ -857,6 +1067,7 @@ async def checkMcuConnection(device_ctrl: DeviceControl):
             "plugins_mode": "auto_select_com",
             "data": device_ctrl.temp_ports_dict,
         }
+        device_ctrl.device_status = 2
         device_ctrl.sendSocketMessage(code=0, msg="MCU连接成功", data=message)
         return
     """实时检测串口是否连接"""
@@ -870,7 +1081,7 @@ async def checkMcuConnection(device_ctrl: DeviceControl):
                 _p = device_ctrl.p_list.pop()
                 device_ctrl.remove_port(_p)
             print("串口未连接,请检查")
-            device_ctrl.sendSocketMessage(code=1, msg="串口未连接,请检查")
+            device_ctrl.sendSocketMessage(code=1, msg="串口未连接,请检查",device_status=-1)
             continue
         if ports_dict:
             for index, _i in enumerate(device_ctrl.p_list):

+ 8 - 1
python/mcu/Mcu.py

@@ -33,6 +33,7 @@ class Mcu(BaseClass, metaclass=SingletonType):
         self.last_from_mcu_move_respond_data = None
         self.camera_motor_speed = 0
         self.camera_motor_value = 0
+        self.init_state = False
 
         self.connect_state = False
         self.port_name = ""
@@ -116,6 +117,9 @@ class Mcu(BaseClass, metaclass=SingletonType):
         # 扫码数据
         try:
             data = receive_data[1:].decode()
+            if data == "设备初始化完成":
+                self.init_state = False
+                self.sendSocketMessage(msg=data,device_status=2)
             print("115  print_mcu_error_data:", data)
         except BaseException as e:
             print("117 error {}".format(e))
@@ -541,7 +545,9 @@ class Mcu(BaseClass, metaclass=SingletonType):
         #     {"_type": "show_info", "plugins_mode": "mcu", "data": "MCU 开始连接"}
         # )
         message = {"_type": "show_info", "plugins_mode": "mcu", "data": "MCU 开始连接"}
-        self.sendSocketMessage(code=1, msg="MCU 开始连接", data=message)
+        self.sendSocketMessage(
+            code=1, msg="MCU 开始连接", data=message, device_status=1
+        )
         # =======================发送连接请求=================================
         cmd = 90
         data = [cmd, 1]
@@ -599,6 +605,7 @@ class Mcu(BaseClass, metaclass=SingletonType):
         if self.serial_ins:
             self.serial_ins.close_serial_port()
             self.connect_state = False
+            self.init_state = False
 
     @property
     def mcu_move_state(self):

+ 34 - 19
python/mcu/RemoteControlV2.py

@@ -43,7 +43,10 @@ class RemoteControlV2(BaseClass):
                     "data": "遥控设备V2 打开串口成功",
                 }
                 self.sendSocketMessage(
-                    code=0, msg="遥控设备V2 打开串口成功", data=message
+                    code=0,
+                    msg="遥控设备V2 打开串口成功",
+                    data=message,
+                    device_status=1,
                 )
                 # print(message)
                 self.connect_state = True
@@ -52,7 +55,7 @@ class RemoteControlV2(BaseClass):
                     "plugins_mode": "remote_control",
                     "data": port_name,
                 }
-                self.sendSocketMessage(code=0, msg="", data=message)
+                self.sendSocketMessage(code=0, msg="", data=message,device_status=2)
                 print(message)
                 self.port_name = port_name
 
@@ -68,7 +71,8 @@ class RemoteControlV2(BaseClass):
                     "data": "遥控设备V2 打开串口失败",
                 }
                 self.sendSocketMessage(
-                    code=1, msg="遥控设备V2 打开串口失败", data=message
+                    code=1, msg="遥控设备V2 打开串口失败", data=message,
+                    device_status=-1
                 )
                 print(message)
                 self.serial_ins = None
@@ -81,7 +85,9 @@ class RemoteControlV2(BaseClass):
                 "data": "遥控设备V2 打开串口失败",
             }
             print(message)
-            self.sendSocketMessage(code=1, msg="遥控设备V2 打开串口失败", data=message)
+            self.sendSocketMessage(
+                code=1, msg="遥控设备V2 打开串口失败", data=message, device_status=-1
+            )
             self.serial_ins = None
             self.connect_state = False
             self.set_voltage_value(None)
@@ -107,7 +113,7 @@ class RemoteControlV2(BaseClass):
             "data": "遥控设备V2 打开蓝牙成功",
         }
         print(message)
-        self.sendSocketMessage(code=0, msg="遥控设备V2 打开蓝牙成功", data=message)
+        self.sendSocketMessage(code=0, msg="遥控设备V2 打开蓝牙成功", data=message,device_status=2)
         self.connect_state = True
         self.is_running = True
         self.set_voltage_value(0)
@@ -124,32 +130,38 @@ class RemoteControlV2(BaseClass):
                 "data": "遥控设备V2 蓝牙断开",
             }
             print(message)
-            self.sendSocketMessage(code=1, msg="遥控设备V2 蓝牙断开", data=message)
+            self.sendSocketMessage(
+                code=1, msg="遥控设备V2 蓝牙断开", data=message, device_status=-1
+            )
             self.close_connect()
             print("关闭蓝牙")
 
     def set_voltage_value(self, voltage_value=None, voltage_text=None):
+        device_status = 2
         if self.is_running:
             flag = "接收器已连接 {}".format(
                 "蓝牙" if self.bluetooth_address else "串口"
             )
         else:
             flag = "接收器未连接"
+            device_status = -1
 
         if voltage_value is None:
-            # self.windows.show_label.setText("{}".format(flag))
             if voltage_text:
                 print(voltage_text)
                 # 发送电量剩余消息
-                self.sendSocketMessage(msg=voltage_text)
-                # self.windows.show_label.setText("{}".format(voltage_text))
+                self.sendSocketMessage(msg=voltage_text, device_status=device_status)
+            else:
+                self.sendSocketMessage(msg=flag, device_status=device_status)
         else:
             if voltage_value == 0:
                 print(flag)
-                # self.windows.show_label.setText("{}".format(flag))
+                self.sendSocketMessage(msg=flag, device_status=device_status)
             else:
                 print("电量:{}%".format(voltage_value))
-                # self.windows.show_label.setText("电量:{}%".format(voltage_value))
+                self.sendSocketMessage(
+                    msg="电量:{}%".format(voltage_value), device_status=device_status
+                )
         # print("打印===>", flag)
     def close_connect(self):
         self.port_name = ""
@@ -184,8 +196,9 @@ class RemoteControlV2(BaseClass):
 
         if not receive_data:
             return
+        receive_data_parser = receive_data[0]
         # 数据 结构 command,按命令解析
-        if receive_data[0] == 1:
+        if receive_data_parser == 1:
             # self.play_sound("get_qr_code")
             # 扫码数据
             bar_code = receive_data[1:].decode()
@@ -193,20 +206,20 @@ class RemoteControlV2(BaseClass):
             bar_code = bar_code.replace("\n", "")
             message = {"_type": 0, "plugins_mode": "remote_control", "data": bar_code}
             print(message)
-            self.sendSocketMessage(code=0, msg="", data=message)
+            self.sendSocketMessage(code=0, msg="", data=message, device_status=2)
             return
-        if receive_data[0] == 9:
+        if receive_data_parser == 9:
             # 播放声音
             button_value = receive_data[1]
             data = {"button_value": button_value}
             message = {"_type": 9, "plugins_mode": "remote_control", "data": data}
             print(message)
-            self.sendSocketMessage(code=0, msg="", data=message)
+            self.sendSocketMessage(code=0, msg="", data=message, device_status=2)
             if settings.IS_DEBUG:
                 print("收到按键", button_value)
             return
 
-        if receive_data[0] == 10:
+        if receive_data_parser == 10:
             voltage_value = receive_data[1]
             self.set_voltage_value(voltage_value)
             if settings.IS_TEST:
@@ -214,7 +227,7 @@ class RemoteControlV2(BaseClass):
             return
 
         # 使用Max17048 查看电量
-        if receive_data[0] == 12:
+        if receive_data_parser == 12:
             chg_status = self.get_data_from_receive_data(
                 receive_data=receive_data, start=1, len_data=1
             )
@@ -328,7 +341,7 @@ class RemoteControlV2(BaseClass):
                     "data": "遥控设备V2 未连接",
                 }
                 print(message)
-                self.sendSocketMessage(code=1, msg="遥控设备V2 未连接", data=message)
+                self.sendSocketMessage(code=1, msg="遥控设备V2 未连接", data=message,device_status=-1)
                 break
             self.analysis_received_data()
 
@@ -340,5 +353,7 @@ class RemoteControlV2(BaseClass):
                 "data": "遥控设备V2 未连接",
             }
             print(message)
-            self.sendSocketMessage(code=1, msg="遥控设备V2 未连接", data=message)
+            self.sendSocketMessage(
+                code=1, msg="遥控设备V2 未连接", data=message, device_status=-1
+            )
             self.set_voltage_value(None)

+ 46 - 0
python/settings.py

@@ -13,6 +13,52 @@ def get_dict_value(_dict, key, default=None):
         return _dict[key]
     else:
         return default
+MACHINE_LEVEL = "二档"
+
+def moveSpeed(level: str = None):
+    config = {
+        "一档": {
+            "camera_high_motor": {
+                "max_speed": 10000,
+                "up_speed": 800,
+                "down_speed": 700,
+            },
+            "turntable_steering": {
+                "max_speed": 6000,
+                "up_speed": 500,
+                "down_speed": 400,
+            },
+        },
+        "二档": {
+            "camera_high_motor": {
+                "max_speed": 7000,
+                "up_speed": 600,
+                "down_speed": 500,
+            },
+            "turntable_steering": {
+                "max_speed": 4500,
+                "up_speed": 350,
+                "down_speed": 300,
+            },
+        },
+        "三档": {
+            "camera_high_motor": {
+                "max_speed": 3500,
+                "up_speed": 400,
+                "down_speed": 300,
+            },
+            "turntable_steering": {
+                "max_speed": 3000,
+                "up_speed": 200,
+                "down_speed": 200,
+            },
+        },
+    }
+
+    if level is None:
+        return config[MACHINE_LEVEL]
+    else:
+        return config[level]
 
 
 config = configparser.ConfigParser()

+ 16 - 0
python/sockets/message_handler.py

@@ -15,6 +15,7 @@ async def handlerSend(
     jsonType = receiveData.get("type")
     code = receiveData.get("code")
     msg = receiveData.get("msg")
+    data = receiveData.get("data")
     print("receiveData", receiveData)
     print("jsonType", jsonType)
     match jsonType:
@@ -42,3 +43,18 @@ async def handlerSend(
         case "init_mcu":
             device_ctrl = DeviceControl(websocket_manager=manager)
             loop.create_task(device_ctrl.initDevice(), name="init_mcu")
+        case "control_mcu":
+            device_name = data.get("device_name")
+            value = data.get("value")
+            if (device_name == "" or device_name == None) or (
+                value == "" or value == None
+            ):
+                data = manager.jsonMessage(code=1,msg="参数错误")
+                await manager.send_personal_message(data, websocket)
+                return
+            device_ctrl = DeviceControl(websocket_manager=manager)
+            device_ctrl.controlDevice(device_name, value)
+        case _:
+            data = manager.jsonMessage(code=1, msg="未知消息")
+            await manager.send_personal_message(data, websocket)
+            return