更新修复ASR_EN逻辑,播报时间,PWM,画图

This commit is contained in:
dahanzimin
2025-05-26 13:08:37 +08:00
parent 9d586e06b2
commit e5e705808d
6 changed files with 89 additions and 102 deletions

View File

@@ -16,6 +16,7 @@ _CI_ID_NUM = const(0x06)
_CI_ID_CLE = const(0x07)
_CI_ID_PACTRL = const(0x09)
_CI_ID_END = const(0x5A)
_TIME_SNUM = const(0x75)
class CI130X:
def __init__(self, i2c_bus, addr=_CI_ADDRESS):
@@ -65,7 +66,7 @@ class CI130X:
"""播放命令词对应ID语音"""
self._wreg(bytes([_CI_ID_SET, value, 0, _CI_ID_END]))
while blocking:
time.sleep_ms(10)
time.sleep_ms(15)
if not self.status()[1]:
break
@@ -89,6 +90,31 @@ class CI130X:
self.play_id(end)
time.sleep_ms(delay)
def play_time(self, times=None, detail=True, delay=10):
"""播报时间"""
data = time.localtime() if times is None else times
if detail:
for i in range(0, 3): #年 月 日
self.play_num(data[i])
time.sleep_ms(delay)
self.play_id(_TIME_SNUM + i)
time.sleep_ms(delay)
for i in range(3, 5): #时 分
self.play_num(data[i])
time.sleep_ms(delay)
self.play_id(_TIME_SNUM + i)
time.sleep_ms(delay)
if detail:
self.play_num(data[5]) #秒
time.sleep_ms(delay)
self.play_id(_TIME_SNUM + 5)
time.sleep_ms(delay)
self.play_id(_TIME_SNUM + 6) #星期
time.sleep_ms(delay)
self.play_num(data[6] + 1)
def pa_ctrl(self, value=True, delay=10):
self._wreg(bytes([_CI_ID_PACTRL, int(value), 0, _CI_ID_END]))
if value: time.sleep_ms(delay)

View File

@@ -0,0 +1,28 @@
"""
CI1302(继承ci130x)
MicroPython library for the CI130Xx (ASR-I2C)
=======================================================
@dahanzimin From the Mixly Team
"""
from ci130x import CI130X
class CI1302(CI130X):
def __init__(self, i2c_bus, addr=0x64):
self._device = i2c_bus
self._address = addr
self._cmd_id = None
def _wreg(self, reg):
'''Write memory address'''
try:
self._device.writeto(self._address, reg)
except Exception as e:
raise AttributeError("Power supply may not be turned on or", e)
def _rreg(self, reg, nbytes=1):
'''Read memory address'''
try:
return self._device.readfrom_mem(self._address, reg, nbytes)
except Exception as e:
raise AttributeError("Power supply may not be turned on or", e)

View File

@@ -1,98 +0,0 @@
"""
CI130X
MicroPython library for the CI130X (ASR-I2C)
=======================================================
@dahanzimin From the Mixly Team
"""
import time
from struct import pack
from micropython import const
_CI_ADDRESS = const(0x64)
_CI_ID_GET = const(0x02)
_CI_ID_SET = const(0x03)
_CI_ID_NUM = const(0x06)
_CI_ID_CLE = const(0x07)
_CI_ID_PACTRL = const(0x09)
_CI_ID_END = const(0x5A)
class CI130X:
def __init__(self, i2c_bus, func=None, addr=_CI_ADDRESS):
self._device = i2c_bus
self._address = addr
self._cmd_id = None
self._func = func
def _wreg(self, reg):
'''Write memory address'''
try:
self._device.writeto(self._address, reg)
except:
self._func(1) #打开电源
time.sleep_ms(500)
self._device.writeto(self._address, reg)
def _rreg(self, reg, nbytes=1):
'''Read memory address'''
try:
return self._device.readfrom_mem(self._address, reg, nbytes)
except:
self._func(1) #打开电源
time.sleep_ms(500)
return self._device.readfrom_mem(self._address, reg, nbytes)
def status(self):
"""返回 (是否唤醒, 是否播放)"""
_buf = self._rreg(_CI_ID_GET, 3)
return (bool(_buf[1] & 0x01), bool(_buf[1] & 0x10)) if _buf[2] == _CI_ID_END else (None, None)
def cmd_id(self, repeat=False):
"""返回 识别命令词对应ID"""
_buf = self._rreg(_CI_ID_GET, 3)
if not repeat:
self._wreg(bytes([_CI_ID_CLE, 0, 0, _CI_ID_END]))
time.sleep_ms(50)
self._cmd_id = _buf[0] if _buf[2] == _CI_ID_END else None
return self._cmd_id
def result(self, ext_id=None):
"""获取比较结果 或者输出结果"""
return self._cmd_id if ext_id is None else bool(self._cmd_id == ext_id)
def sys_cmd(self, value, blocking=True):
"""系统命令1,2唤醒 202~205音量调整 206,207回复播报开关 208退出唤醒"""
self.play_id(value, blocking)
def play_id(self, value, blocking=True):
"""播放命令词对应ID语音"""
self._wreg(bytes([_CI_ID_SET, value, 0, _CI_ID_END]))
while blocking:
time.sleep_ms(10)
if not self.status()[1]:
break
def play_num(self, value, blocking=True):
"""播放浮点数据的合成语音"""
self._wreg(bytes([_CI_ID_NUM]) + pack('d', float(value)) + bytes([0, _CI_ID_END]))
while blocking:
time.sleep_ms(10)
if not self.status()[1]:
break
def play(self, star=None, num=None, end=None, delay=10):
"""组合播报名词+数值+单位"""
if star is not None:
self.play_id(star)
time.sleep_ms(delay)
if num is not None:
self.play_num(num)
time.sleep_ms(delay)
if end is not None:
self.play_id(end)
time.sleep_ms(delay)
def pa_ctrl(self, value=True, delay=10):
self._wreg(bytes([_CI_ID_PACTRL, int(value), 0, _CI_ID_END]))
if value: time.sleep_ms(delay)

View File

@@ -63,8 +63,8 @@ except Exception as e:
'''ASR-Sensor'''
try :
from ci130xx import CI130X
onboard_asr = CI130X(inboard_i2c, onboard_bot.asr_en)
from ci1302x import CI1302
onboard_asr = CI1302(inboard_i2c)
except Exception as e:
print("Warning: Failed to communicate with CI130X (ASR) or",e)

View File

@@ -89,8 +89,9 @@ class BOT035:
def cam_reset(self, value):
self._wreg(_BOT035_CMD, (self._rreg(_BOT035_CMD) & 0xEF) | (value << 4))
def asr_en(self, value=None):
def asr_en(self, value=None, delay=500):
self._wreg(_BOT035_CMD, (self._rreg(_BOT035_CMD) & 0xF3) | (value << 2))
time.sleep_ms(delay)
def uart_select(self, value):
self._wreg(_BOT035_CMD, (self._rreg(_BOT035_CMD) & 0xFC) | value)

View File

@@ -0,0 +1,30 @@
"""
SANT G2 -MixGo SANT EXT G2
MicroPython library for the SANT G2 (Expansion board for MixGo SANT)
=======================================================
@dahanzimin From the Mixly Team
"""
import gc
from machine import Pin, SoftI2C
'''i2c-extboard'''
ext_i2c = SoftI2C(scl=Pin(18), sda=Pin(21), freq=400000)
'''RFID_Sensor'''
try :
import rc522
ext_rfid = rc522.RC522(ext_i2c)
except Exception as e:
print("Warning: Failed to communicate with SI522A (RFID) or",e)
'''RADAR_Sensor'''
try :
import cbr817
ext_mmw = cbr817.CBR817(ext_i2c)
except Exception as e:
print("Warning: Failed to communicate with CBR817 (RADAR) or",e)
'''Reclaim memory'''
gc.collect()