搜索
bottom↓
回复: 0

《ESP32-S3使用指南—MicroPython版 V1.0》第二十七章 摄像头实验

[复制链接]

出0入234汤圆

发表于 2 小时前 | 显示全部楼层 |阅读模式
2.jpg
1)实验平台:正点原子ESP32S3开发板
2)购买链接:https://detail.tmall.com/item.htm?id=768499342659
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-347618-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子手把手教你学ESP32S3快速入门视频教程:https://www.bilibili.com/video/BV1sH4y1W7Tc
6)正点原子FPGA交流群:132780729
1.png
3.png

第二十七章 摄像头实验


       本章,我们将介绍ESP32-S3如何驱动摄像头,并在LCD上显示摄像头图像。
       本章分为如下几个小节:
       27.1摄像头模块
       27.2 硬件设计
       27.3 程序设计
       27.4 下载验证

       27.1摄像头模块
       摄像头模块也是以C模块的形式编写而来的。由于MicroPython库并未包含驱动ESP32-S3摄像头的应用,因此若想在MicroPython环境下实现摄像头功能,必须以C模块的形式添加摄像头驱动。可在Github仓库中找到摄像头驱动,该仓库的链接是:https://github.com/lemariva/micropython-camera-driver
       CAMERA驱动程序(modcamera.c/.h)可以在以下路径中找到:A盘6,软件资料1,软件2,MicroPython开发工具01-Windows2,正点原子MicroPython驱动CModules_Lib CAMERA。作者对该模块的函数和使用进行了详细解释。如果读者不了解这个程序的编写流程,请重新阅读第七章的内容。

       1,CAMERA模块构造方法
       CAMERA模块的构造方法如下:
  1. class camera.init(id,d0,d1,d2,d3,d4,d5,d6,d7,format,framesize,
  2. xclk_freq,href,vsync,reset,sioc,siod,xclk,pclk,fb_location)
  3. 使用示例:camera.init(0, format = camera.RGB565,fb_location = camera.PSRAM,
  4. framesize = camera.FRAME_240X240,xclk_freq = 24000000)
复制代码
       该构造方法的参数描述,如下表所示。

1.png
表27.1.1 camera.init构造方法参数描述

       返回值:无。

       2,CAMERA模块的方法

       ①:图像上下翻
  1. camera.flip(1)
复制代码

       ②:图像左右翻
  1. camera.mirror(1)
复制代码

       ③:设置输出图像大小
  1. camera.framesize(camera.FRAME_240x240)
  2. # The options are the following:
  3. # FRAME_96X96 FRAME_QQVGA FRAME_QCIF FRAME_HQVGA FRAME_240X240
  4. # FRAME_QVGA FRAME_CIF FRAME_HVGA FRAME_VGA FRAME_SVGA
  5. # FRAME_XGA FRAME_HD FRAME_SXGA FRAME_UXGA FRAME_FHD
  6. # FRAME_P_HD FRAME_P_3MP FRAME_QXGA FRAME_QHD FRAME_WQXGA
  7. # FRAME_P_FHD FRAME_QSXGA
  8. # Check this link for more information: <a href="https://bit.ly/2YOzizz" target="_blank">https://bit.ly/2YOzizz</a>
复制代码

       ④:设置特技效果
  1. # special effects
  2. camera.speffect(camera.EFFECT_NONE)
  3. # The options are the following:
  4. # EFFECT_NONE (default)
  5. EFFECT_NEG
  6. EFFECT_BW
  7. EFFECT_RED
  8. EFFECT_GREEN
  9. EFFECT_BLUE
  10. EFFECT_RETRO
复制代码

       ⑤:设置白平衡
  1. camera.whitebalance(camera.WB_NONE)
  2. # The options are the following:
  3. # WB_NONE (default)
  4. WB_SUNNY
  5. WB_CLOUDY
  6. WB_OFFICE
  7. WB_HOME
复制代码

       ⑥:设置饱和度
  1. camera.saturation(0)
  2. # -2,2 (default 0). -2 grayscale
复制代码

       ⑦:设置亮度
  1. camera.brightness(0)
  2. # -2,2 (default 0). 2 brightness
复制代码

       ⑧:设置对比
  1. # contrast
  2. camera.contrast(0)
  3. #-2,2 (default 0). 2 highcontrast
复制代码

       ⑨:设置图像质量
  1. # quality
  2. camera.quality(10)
  3. # 10-63 lower number means higher quality
复制代码

       ⑩:获取图像数据
  1. buf = camera.capture()
复制代码

       27.2 硬件设计

       1. 例程功能
       本章实验功能简介:程序下载完成,摄像头的图像数据在SPILCD显示屏上显示。

       2. 硬件资源

       1)XL9555
              IIC_INT-IO0(需在P5连接IO0)
              IIC_SDA-IO41
              IIC_SCL-IO42

       2)SPILCD
              CS-IO21
              SCK-IO12
              SDA-IO11
              DC-IO40(在P5端口,使用跳线帽将IO_SET和LCD_DC相连)
              PWR- IO1_3(XL9555)
              RST- IO1_2(XL9555)

       3)CAMERA
              OV_SCL-IO38
              OV_SDA- IO 39
              VSYNC- IO 47
              HREF- IO 48
              PCLK- IO 45
              D0- IO 4
              D1- IO 5
              D2- IO 6
              D3- IO 7
              D4- IO 15
              D5- IO 16
              D6- IO 17
              D7- IO 18
              RESET-IO0_5(XL9555)
              PWDN-IO0_4(XL9555)

       3. 原理图
       CAMERA接口与ESP32-S3的连接关系,如下图所示:

第二十七章 摄像头实验2785.png
图27.2.1 CAMERA接口与ESP32-S3的连接电路图

       27.3 程序设计

       27.3.1 程序流程图
       程序流程图能帮助我们更好的理解一个工程的功能和实现的过程,对学习和设计工程有很好的主导作用。下面看看本实验的程序流程图。

第二十七章 摄像头实验2929.png
图27.3.1.1 程序流程图

       27.3.2 程序解析
       本书籍的代码都在main.py脚本下编写的,读者可在光盘资料下找到对应的源码。CAMERA实验main.py源码如下:
  1. import time
  2. import camera
  3. import atk_xl9555 as io_ex
  4. import atk_lcd as lcd
  5. from machine import Pin,SPI,I2C


  6. """
  7. * @brief       程序入口
  8. * @param       无
  9. * @retval      无
  10. """
  11. if __name__ == '__main__':
  12.    
  13.     # IIC初始化
  14.     i2c0 = I2C(0, scl = Pin(42), sda = Pin(41), freq = 400000)
  15.     # XL9555初始化
  16.     xl9555 = io_ex.init(i2c0)
  17.     xl9555.write_bit(io_ex.BEEP,1)
  18.    
  19.     # 复位摄像头
  20.     xl9555.write_bit(io_ex.OV_RESET,0)
  21.     time.sleep_ms(100)
  22.     xl9555.write_bit(io_ex.OV_RESET,1)
  23.     time.sleep_ms(100)
  24.     # 开启摄像头
  25.     xl9555.write_bit(io_ex.OV_PWDN,1)
  26.     time.sleep_ms(100)
  27.     xl9555.write_bit(io_ex.OV_PWDN,0)
  28.     time.sleep_ms(100)
  29.    
  30.     # 初始化摄像头
  31.     try:
  32.         camera.init(0, format = camera.RGB565,fb_location = camera.PSRAM,
  33. framesize = camera.FRAME_240X240,xclk_freq = 24000000)
  34.     except Exception as e:
  35.         camera.deinit()
  36.         camera.init(0, format = camera.RGB565,fb_location = camera.PSRAM,
  37. framesize = camera.FRAME_240X240,xclk_freq = 24000000)
  38.    
  39.     # 复位LCD
  40.     xl9555.write_bit(io_ex.SLCD_RST,0)
  41.     time.sleep_ms(100)
  42.     xl9555.write_bit(io_ex.SLCD_RST,1)
  43.     time.sleep_ms(100)
  44.    
  45.     # 初始化SPI
  46.     spi = SPI(2,baudrate = 80000000, sck = Pin(12), mosi=Pin(11), miso=Pin(13))
  47.     # 初始化LCD,lcd = 0为正点原子2.4寸屏幕;lcd = 1为正点原子1.3寸SPILCD屏幕;
  48. display = lcd.init(spi,dc = Pin(40,Pin.OUT,Pin.PULL_UP,value = 1),
  49. cs = Pin(21,Pin.OUT,Pin.PULL_UP,value = 1),dir = 1,lcd = 0)
  50.     # 开启背光
  51.     xl9555.write_bit(io_ex.SLCD_PWR,1)
  52.     time.sleep_ms(100)
  53.     display.camera(42,5)
复制代码
       从上述源码可知,我们首先初始化各个外设,如IIC、SPI、XL9555、摄像头和LCD等驱动,然后调用display.camera函数在SPILCD显示屏上显示摄像头图像。

       27.4 下载验证
       程序下载到开发板后,LCD显示屏不断更新摄像头输出的图像数据,如下图所示。

第二十七章 摄像头实验4678.png
图27.4.1 LCD显示效果图

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 17:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表