问题描述
代码能运行第一个显示,切换摄像头得时候会报错:
Traceback (most recent call last):
File "", line 80, in
File "media/sensor.py", line 1, in snapshot
RuntimeError: sensor(1) snapshot chn(0) failed(3)
MPY: soft reboot
复现步骤
'''
实验平台:01Studio CanMV K230
'''
import time, os, sys, network
from media.sensor import * #导入sensor模块,使用摄像头相关接口
from media.display import * #导入display模块,使用display相关接口
from media.media import * #导入media模块,使用meida相关接口
from media.pyaudio import * #导入pyaudio模块,用于采集和播放音频
import media.wave as wave #导入wav模块,用于保存和加载wav音频文件
from machine import Pin,TOUCH
from machine import FPIOA
#将GPIO52、GPIO21配置为普通GPIO模式
fpioa = FPIOA()
fpioa.set_function(52,FPIOA.GPIO52)
fpioa.set_function(21,FPIOA.GPIO21)
LED=Pin(52,Pin.OUT) #构建LED对象,开始熄灭
KEY=Pin(21,Pin.IN,Pin.PULL_UP) #构建KEY对象
LED.value(1)
time.sleep_ms(150)
LED.value(0)
time.sleep_ms(150)
LED.value(1)
time.sleep_ms(150)
LED.value(0)
time.sleep_ms(150)
#构建3.5寸电容触摸屏对象
tp = TOUCH(0)
state=0 #LED引脚状态
test = 1 #测试项目编号
camera_index = 0 #当前摄像头索引
# 初始化三个摄像头
sensor0 = Sensor(id=0, fps=30) #构建摄像头对象0
sensor0.reset() #复位和初始化摄像头
sensor0.set_framesize(width=800, height=480) #设置帧大小(800x480)
sensor0.set_pixformat(Sensor.RGB565) #设置输出图像格式
sensor1 = Sensor(id=1, fps=30) #构建摄像头对象1
sensor1.reset() #复位和初始化摄像头
sensor1.set_framesize(width=800, height=480) #设置帧大小(800x480)
sensor1.set_pixformat(Sensor.RGB565) #设置输出图像格式
sensor2 = Sensor(id=2, fps=30) #构建摄像头对象2
sensor2.reset() #复位和初始化摄像头
sensor2.set_framesize(width=800, height=480) #设置帧大小(800x480)
sensor2.set_pixformat(Sensor.RGB565) #设置输出图像格式
#使用IDE缓冲区输出图像,显示尺寸和sensor配置一致。
Display.init(Display.ST7701, to_ide = True)
MediaManager.init() #初始化media资源管理器
# 启动所有摄像头(无需停止,直接切换)
sensor0.run()
sensor1.run()
sensor2.run()
clock = time.clock()
while True:
########################
### 测试信息:摄像头和LCD
########################
while test == 1: #摄像头和LCD测试
# 根据摄像头索引选择不同的摄像头拍摄
if camera_index == 0:
img = sensor0.snapshot() #拍摄摄像头0的图
elif camera_index == 1:
img = sensor1.snapshot() #拍摄摄像头1的图
else:
img = sensor2.snapshot() #拍摄摄像头2的图
#写字符,支持中文。
img.draw_string_advanced(0, 0, 40, "1.Camera and LCD", color = (255, 255, 255))
img.draw_string_advanced(450, 0, 40, "(Press KEY to next)", color = (255, 255, 255))
img.draw_string_advanced(0, 40, 30, f"Camera ID: {camera_index}", color = (255, 255, 255))
Display.show_image(img) #显示图片
if KEY.value()==0: #按键被按下
time.sleep_ms(10) #消除抖动
if KEY.value()==0: #确认按键被按下
# 直接切换到下一个摄像头(无需停止)
if camera_index < 2:
camera_index += 1
else:
# 已经显示完所有摄像头,进入下一项测试
test = test + 1
camera_index = 0 # 重置摄像头索引
break # 跳出摄像头测试循环
while not KEY.value(): #检测按键是否松开
pass
# 不要break,让循环继续执行显示新的摄像头
硬件板卡
01studio-K230
软件版本
CanMV v1.3-142-g902d740(based on Micropython e00a144) on 2025-08-26; k230_canmv_01studio with K230