#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 硬件管理器模块 提供硬件对象的统一管理和访问 """ import threading import config from at_client import ATClient class HardwareManager: """硬件管理器(单例)""" _instance = None def __new__(cls): if cls._instance is None: cls._instance = super(HardwareManager, cls).__new__(cls) cls._instance._initialized = False return cls._instance def __init__(self): if self._initialized: return # 私有硬件对象 self._uart4g = None # 4G模块UART self._bus = None # I2C总线 self._adc_obj = None # ADC对象 self._at_client = None # AT客户端 self._initialized = True # ==================== 硬件访问(只读属性)==================== @property def uart4g(self): """4G模块UART(只读)""" return self._uart4g @property def bus(self): """I2C总线(只读)""" return self._bus @property def adc_obj(self): """ADC对象(只读)""" return self._adc_obj @property def at_client(self): """AT客户端(只读)""" return self._at_client # ==================== 初始化方法 ==================== def init_uart4g(self, device=None, baudrate=None): """初始化4G模块UART""" from maix import uart if device is None: device = config.UART4G_DEVICE if baudrate is None: baudrate = config.UART4G_BAUDRATE self._uart4g = uart.UART(device, baudrate) return self._uart4g def init_bus(self, bus_num=None): """初始化I2C总线""" from maix import i2c if bus_num is None: bus_num = config.I2C_BUS_NUM self._bus = i2c.I2C(bus_num, i2c.Mode.MASTER) return self._bus def init_adc(self, channel=None, res_bit=None): """初始化ADC""" from maix.peripheral import adc if channel is None: channel = config.ADC_CHANNEL if res_bit is None: res_bit = adc.RES_BIT_12 self._adc_obj = adc.ADC(channel, res_bit) return self._adc_obj def init_at_client(self, uart_obj=None): """初始化AT客户端""" if uart_obj is None: if self._uart4g is None: raise ValueError("uart4g must be initialized before at_client") uart_obj = self._uart4g self._at_client = ATClient(uart_obj) self._at_client.start() return self._at_client # 创建全局单例实例 hardware_manager = HardwareManager()