在CircuitPython中使用FireBeetle 2 ESP32-S3上的摄像头
本帖最后由 HonestQiao 于 2023-9-10 11:47 编辑FireBeetle 2 ESP32-S3套装,带有OV2640的摄像头,官方WiKi还提供了Arduino下面的教程: DFROBOT DFR0975 FireBeetle 2 Board ESP32-S3 产品资料 进阶教程
要使用这个摄像头,除了通用的ov2640驱动外,还需要 AXP313A 支持库,来控制给摄像头上电和断电。
AX0313A的支持库,可以从:cdjq/DFRobot_AXP313A (github.com) 下载。
在上述AX0313A的库中,还提供了micropython下的AX0313A库。
参考该库,经过简单修改,适配到了CircuitPython,以下为其使用方法。
一、直接上手试用
首先接好摄像头,摆好POSE:
然后,直接从: DFRobot_AXP313A/CircuitPython at master · HonestQiao/DFRobot_AXP313A (github.com) 下载下面的文件:
先将AXP313A.py上传到开发板的/lib/目录。
再将开发板上根目录下的 boot.py,参考如下进行修改:【如没有,则直接新建】
import storage
storage.remount("/", False)
注意:
1. 修改后,使得CircuitPython可以写入到内置存储,但将不能再电脑上直接进入U盘修改文件。
2. 在编辑器中,修改上述Flase为True,或者直接注释掉上面的行,就恢复原样。
再将开发板上根目录下的 settings.toml,参考如下进行修改:【如没有,则直接新建】
CIRCUITPY_RESERVED_PSRAM=1048576
特别注意:
1. settings.toml 必须修改,否则必然出错
2. boot.py 在存储图片到内置存储时,必须修改为True,否则必然出错;如存储到SD卡,则可以用False
现在务必按RST按键重置,就可以直接使用 dfrobot_firebeetle_2_board_esp32_s3_camera_demo.py 进行测试,运行输出的结果如下:
运行完成后,在开发板的根目录中,会生成test_001.jpg,将该文件拷贝出来,点击查看,即为通过通过摄像头拍摄的照片:
二、AX0313A.py说明
在该文件中,有具体的演示代码:
if __name__ == "__main__":
import busio
delay = lambda n: time.sleep(n/1000)
print("i2c init")
i2c = busio.I2C(scl=board.GPIO2, sda=board.GPIO1)
while not i2c.try_lock():
print("try lock");
delay(1000)
i2c.unlock()
delay(1000)
print("AXP313A init")
axp = AXP313A(i2c)
delay(1000)
print("AXP313A begin")
while not axp.begin():
print("init error");
delay(1000)
delay(1000)
print("AXP313A enable_camera_power")
axp.enable_camera_power(eOV2640) # 设置摄像头供电 power on
delay(3000)
print("AXP313A disable_power")
axp.disable_power() # 设置摄像头断电 power off
print("i2c deinit")
i2c.deinit()
上述代码把基本功能,演示得非常清楚了,主要就是:
* 初始化I2C
* 实例化AXP313A对象,并传入i2c
* AXP313A.begin():通过I2C寻找摄像头
* AXP313A.enable_camera_power(eOV2640):上电
* AXP313A.disable_power():断电
三、摄像头使用
dfrobot_firebeetle_2_board_esp32_s3_camera_demo.py中的演示,已经很详细了,也步骤清晰明了。
首先是引脚的定义:
# 数据引脚定义 data pins
CAMERA_DATA = (
board.GPIO39,
board.GPIO40,
board.GPIO41,
board.GPIO4,
board.GPIO7,
board.GPIO8,
board.GPIO46,
board.GPIO48
)
# 控制引脚定义 controll pins
CAMERA_PCLK=board.GPIO5
CAMERA_VSYNC=board.GPIO6
CAMERA_HREF=board.GPIO42
CAMERA_XCLK=board.GPIO45
然后使用circuitpython为esp32提供的摄像头库espcamera操作即可:
* espcamera.Camera():初始化摄像头
* cam.reconfigure():输出设置
* cam.take(1):截取当前一帧
截取到了图像,演示中,再存储到test_001.jpg中。
在实际使用中,还可以将获取的图像,输出到LCD进行显示。
四、常见错误
1. 出错提示:espidf.IDFError: Requested resource not found
问题原因:摄像头没接,或者接的不对
解决方法:参考教程,重新连线,然后断开USB,重新连接
2. 出错提示:MemoryError
问题原因:settings.toml未设置或设置错误,或设置后没有按RST按键重置
解决办法:参考前面的指导设置,设置完成后,务必按RST按键重置,然后继续
3. 出错提示:OSError: Read-only filesystem
问题原因:使用内置存储时,boot.py未设置或未按要求设置,或设置后没有按RST按键重置
解决办法:参考前面的指导设置,设置完成后,务必按RST按键重置,然后继续
补充:
有人问:为什么从瓶子里伸出来[旺柴]
回复:固定摄像头啊!不然用一直用手扶着么?
跑你的demo,报上面错误是啥问题?
豆爸 发表于 2023-9-9 22:48
跑你的demo,报上面错误是啥问题?
请参考常见问题2
页:
[1]