refine the code to different part
This commit is contained in:
119
hardware.py
Normal file
119
hardware.py
Normal file
@@ -0,0 +1,119 @@
|
||||
#!/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._distance_serial = None # 激光测距串口
|
||||
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 distance_serial(self):
|
||||
"""激光测距串口(只读)"""
|
||||
return self._distance_serial
|
||||
|
||||
@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_distance_serial(self, device=None, baudrate=None):
|
||||
"""初始化激光测距串口(激光控制)"""
|
||||
from maix import uart
|
||||
if device is None:
|
||||
device = config.DISTANCE_SERIAL_DEVICE
|
||||
if baudrate is None:
|
||||
baudrate = config.DISTANCE_SERIAL_BAUDRATE
|
||||
|
||||
print(f"[HW] 初始化激光串口: device={device}, baudrate={baudrate}")
|
||||
self._distance_serial = uart.UART(device, baudrate)
|
||||
print(f"[HW] 激光串口初始化完成: {self._distance_serial}")
|
||||
return self._distance_serial
|
||||
|
||||
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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user