1948浏览
查看: 1948|回复: 0

[ESP8266/ESP32] 基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机

[复制链接]
本帖最后由 豆爸 于 2023-9-10 23:19 编辑

FireBeetle 2 ESP32-S3是一款基于ESP32-S3-WROOM-1U-N16R8模组设计的主控板,拥有16MB Flash和8MB PSRAM,拥有强大的神经网络运算能力和信号处理能力,适用于图像识别、语音识别等项目。

基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机图1


本项目是一个基于CircuitPython的FireBeetle 2 ESP32-S3延时相机,实现自动间隔一定时间拍照数张的功能。间隔时间、照片张数可以进行修改。

【1.下载固件】

https://downloads.circuitpython.org/bin/yd_esp32_s3_n16r8/en_US/adafruit-circuitpython-yd_esp32_s3_n16r8-en_US-8.2.5.bin



【2.刷固件】

使用USB线将FireBeetle 2 ESP32-S3连接到电脑。同时按住BOOT与RST键,先松开RST键,再松下BOOT键,进入下载模式。

选择ESP32-S3、USB,如下图所示。

基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机图11



选择刚才下载的固件,地址写0x00,选择串口,如下图所示。

基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机图15



点击“ERASE”,进行擦除,如下图所示。


基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机图14


点击“START”,进行刷写固件,如下图所示。


基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机图13



等待下载完成,如下图所示。

基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机图12


按RST键重启。

【3.上传程序】

打开我的电脑,找到CIRCUITPY盘符,并打开,如下图所示。

基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机图10


基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机图9


将下载的文件解压到电脑,如下图所示。

基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机图8


将上述文件复制粘贴到CIRCUITPY盘符盘符下,替换目标中的文件,如下图所示。

基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机图7


【4.运行程序】

打开Thonny软件,点击“运行”-“配置解释器”,如下图所示。

基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机图6


进行解释器设置,如下图所示。

基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机图5


打开dfrobot_fireBeetle_2_board_esp32_s3_camera_demo.py文件,按F5运行当前脚本,如下图所示。

基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机图4


上述程序运行完后,会间隔1秒拍一张照片,一次拍10张,如下图所示。

基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机图3


间隔时间与拍照的张数来自程序中的两个常量,如下图所示。

基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机图2




【5.程序代码】
  1. '''
  2. 感谢 HonestQiao提供的DFRobot FireBeetle_2_Board_ESP32_S3 摄像头演示程序
  3. 使用指导:请务必参考以下网址的使用指导,否则可能会出现各种问题
  4.     https://mc.dfrobot.com.cn/thread-316903-1-1.html
  5. 参考资料:
  6.     https://learn.adafruit.com/adafruit-ov5640-camera-breakout/jpeg-capture-demo
  7.     https://wiki.dfrobot.com.cn/_SKU_DFR0975_FireBeetle_2_Board_ESP32_S3_Advanced_Tutorial#target_12
  8.     https://learn.adafruit.com/circuitpython-essentials/circuitpython-storage
  9. '''
  10. import os
  11. import board
  12. import busio
  13. import time
  14. import espcamera
  15. import AXP313A
  16. import time
  17. from digitalio import DigitalInOut, Direction
  18. # LED setup.
  19. led = DigitalInOut(board.GPIO21)
  20. led.direction = Direction.OUTPUT
  21. led.value = False
  22. number = 10  # 拍摄多少张照片
  23. interval = 0.1  # 间隔时间(秒)
  24. '''
  25. PWDN_GPIO_NUM      = -1
  26. RESET_GPIO_NUM     = -1
  27. XCLK_GPIO_NUM      = 45
  28. SIOD_GPIO_NUM      = 1
  29. SIOC_GPIO_NUM      = 2
  30. Y9_GPIO_NUM        = 48
  31. Y8_GPIO_NUM        = 46
  32. Y7_GPIO_NUM        = 8
  33. Y6_GPIO_NUM        = 7
  34. Y5_GPIO_NUM        = 4
  35. Y4_GPIO_NUM        = 41
  36. Y3_GPIO_NUM        = 40
  37. Y2_GPIO_NUM        = 39
  38. VSYNC_GPIO_NUM     = 6
  39. HREF_GPIO_NUM      = 42
  40. PCLK_GPIO_NUM      = 5
  41. '''
  42. # 数据引脚定义 data pins
  43. CAMERA_DATA = (
  44.     board.GPIO39,
  45.     board.GPIO40,
  46.     board.GPIO41,
  47.     board.GPIO4,
  48.     board.GPIO7,
  49.     board.GPIO8,
  50.     board.GPIO46,
  51.     board.GPIO48
  52. )
  53. # 控制引脚定义 controll pins
  54. CAMERA_PCLK=board.GPIO5
  55. CAMERA_VSYNC=board.GPIO6
  56. CAMERA_HREF=board.GPIO42
  57. CAMERA_XCLK=board.GPIO45
  58. # 延时函数定义 delay function
  59. delay = lambda n: time.sleep(n/1000)
  60. print("i2c init")
  61. i2c = busio.I2C(scl=board.GPIO2, sda=board.GPIO1)
  62. while not i2c.try_lock():
  63.     print("try lock");
  64.     delay(1000)
  65. i2c.unlock()
  66. delay(1000)
  67. print("AXP313A init")
  68. axp = AXP313A.AXP313A(i2c)
  69. delay(1000)
  70. print("AXP313A begin")
  71. while not axp.begin():
  72.     print("init error");
  73.     delay(1000)
  74. delay(1000)
  75. print("AXP313A enable_camera_power")
  76. axp.enable_camera_power(AXP313A.eOV2640) # 设置摄像头供电 power on
  77. delay(1000)
  78. print("Initializing camera")
  79. try:
  80.     cam = espcamera.Camera(
  81.         data_pins=CAMERA_DATA,
  82.         external_clock_pin=CAMERA_XCLK,
  83.         pixel_clock_pin=CAMERA_PCLK,
  84.         vsync_pin=CAMERA_VSYNC,
  85.         href_pin=CAMERA_HREF,
  86.         pixel_format=espcamera.PixelFormat.JPEG,
  87.         frame_size=espcamera.FrameSize.QVGA,
  88.         i2c=i2c,
  89.         external_clock_frequency=20_000_000,
  90.         framebuffer_count=1)
  91.     print("initialized")
  92.     #print("reconfigure")
  93.     # for display
  94.     #cam.reconfigure(
  95.     #    pixel_format=espcamera.PixelFormat.RGB565,
  96.     #    frame_size=espcamera.FrameSize.QVGA,
  97.     #)
  98.     #frame = cam.take(1)
  99. '''
  100. # for display
  101. print("Initializing camera")
  102. cam = espcamera.Camera(
  103.     data_pins=board.CAMERA_DATA,
  104.     external_clock_pin=board.CAMERA_XCLK,
  105.     pixel_clock_pin=board.CAMERA_PCLK,
  106.     vsync_pin=board.CAMERA_VSYNC,
  107.     href_pin=board.CAMERA_HREF,
  108.     pixel_format=espcamera.PixelFormat.RGB565,
  109.     frame_size=espcamera.FrameSize.QVGA,
  110.     i2c=i2c,
  111.     external_clock_frequency=20_000_000,
  112.     framebuffer_count=2)
  113. print(cam.width, cam.height)
  114. display.auto_refresh = False
  115. '''
  116.     # 切换到DCIM目录下
  117.     os.chdir("/DCIM")
  118.    
  119.     print("延时相机启动")
  120.     for i in range(number):
  121.         # for jpeg
  122.         cam.reconfigure(
  123.             pixel_format=espcamera.PixelFormat.JPEG,
  124.             frame_size=espcamera.FrameSize.SVGA,
  125.         )
  126.         print("capture jpeg")
  127.         jpeg = cam.take(1)
  128.         print("write jpeg")
  129.         
  130.         # 获取当前日期和时间
  131.         current_time = time.localtime()
  132.         year, month, day, hour, minute, second, _, _, _ = current_time
  133.         # 构建文件名
  134.         filename = "{:04d}{:02d}{:02d}_{:02d}{:02d}{:02d}.jpg".format(year, month, day, hour, minute, second)
  135.         print(filename)
  136.         
  137.         filename = "IMG_" + filename
  138.         with open(
  139.             filename, "wb") as f:
  140.             f.write(jpeg)
  141.         print(f"Write {len(jpeg)} bytes of jpeg data")
复制代码


鸣谢:最后感谢 @HonestQiao 提供的摄像头演示程序。





基于CircuitPython实现的FireBeetle 2 ESP32-S3延时相机.rar

3.48 KB, 下载次数: 2586

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail