Skip to main content

拍照

前言

生活中充满着形形式式的摄像头,其被广泛应用在各行业,如照相机、手机相机、安防监控等。使用摄像头可以拍照,记录美好瞬间。

实验平台

pyWiFi-ESP32-S3开发套件、3.2寸显示屏、OV2640摄像头。 img

实验目的

编写实现OV2640摄像头拍摄图片。

实验讲解

本例程实验的摄像头感光芯片为常用的OV2640,200万像素摄像头,最大支持1600*1200像素分辨率拍摄。点击购买>>

参数如下:

img

模块参数
感光芯片OV2640
控制方式SCCB
接口定义24P 2.5mm排针 / 24P-0.5mm fpc座
像素最高1600*1200(200万)
模块尺寸3.8 * 2.7mm

pyWiFi-ESP32-S3带有24P标准摄像头接口,目前支持OV2640,接线方式如下:先将FPC座下方的黑色锁扣提起。

img

将摄像头排线插入,然后按下黑色卡扣锁紧即可。(FPC座子支持双面接线,用户可以根据自己实验不同厂家摄像头选择接触面,注意引脚1和24顺序即可。)

img

01Studio已经将OV2640相关功能封装成MicroPython库,用户直接使用即可,ESP32-S3最大支持分辨率为640x480。 OV2640对象如下:

OV2640对象

构造函数

sensor.OV2640()

构建OV2640对象。

使用方法

OV2640.reset()

OV2640摄像头模块初始化。


OV2640.set_framesize(framesize)

设置摄像头拍摄的尺寸。

  • framesize 帧尺寸大小,默认尺寸为 sensor.LCD – 240*240

    • sensor.QQQVGA - 80x60;
    • sensor.QQVGA - 160x120;
    • sensor.LCD - 240x240 ;(ESP32-S3特有)
    • sensor.QVGA - 320x240;
    • sensor.VGA - 640x480;

OV2640.set_vflip(value=0)

设置垂直翻转;

  • value: 设置值。
    • 1:-开启;
    • 0:-关闭。

OV2640.set_hmirror(value=0)

设置水平镜像;

  • value: 设置值。
    • 1:-开启;
    • 0:-关闭。

OV2640.snapshot(filename)

拍摄照片并保存。最大支持 sensor.VGA – 640*480

  • filename: 路径+名称,如 '/flash/test.jpg'

OV2640.display()

LCD实时显示摄像头图像;


OV2640.display_stop()

关闭摄像头LCD实时显示。


OV2640.stream()

摄像头网络图传。开发板联网后在同一局域网下的PC或手机浏览器输入开发板的IP地址即可。


OV2640.deinit()

注销摄像头对象。


更多用法请阅读官方文档:
https://docs.01studio.cc/library/sensor/sensor.html#ov2640

从上表可以看到,除了拍摄外,还支持图像在LCD实时显示。我们可以编写实现开发板上电后LCD实时显示摄像头采集图像,通过按键来拍照并保存到文件系统。编程思路如下:

参考代码

'''
实验名称:拍照并保存
版本:v1.0
平台:pyWiFi ESP32-S3
作者:01Studio
说明:编程实现录拍摄图片并保存。
'''

from machine import Pin
from tftlcd import LCD32
import sensor,time

########################
# 构建3.2寸LCD对象并初始化
########################
d = LCD32(portrait=1) #默认方向竖屏

KEY=Pin(0,Pin.IN,Pin.PULL_UP) #构建KEY对象

#摄像头初始化
cam = sensor.OV2640()
cam.reset()
cam.set_framesize(sensor.LCD) #240*240分辨率
cam.display() #LCD显示

num=0 #用于命名图片
cam_flag = 0 #拍照标志位

##############################
# USR按键 拍照并保存
##############################
def fun(KEY):
global cam_flag
time.sleep_ms(10) #消除抖动
if KEY.value()==0: #确认按键被按下
cam_flag = 1

#中断初始化
KEY.irq(fun,Pin.IRQ_FALLING) #定义中断,下降沿触发

while True:

#收到拍照命令
if cam_flag == 1:

#拍照并保存图片
cam.snapshot("/"+str(num)+".jpg")

num=num+1 #照片名称
cam_flag=0 #清空标志位

实验结果

运行代码,可以看到LCD实时显示摄像头采集数据。

img

按下KEY键,即可拍照并保存到开发板的文件系统。

img

复位开发板,可以看到刚刚拍摄的照片。文件为JPG格式。点击右键—下载即可下载图片到本地查看。

img

本节实现了micropython的摄像头模块实现了拍照和图像采集显示。配合按键打造了一个简易的照相机。Ov2640受光线影响比较大,拍摄时候需要保证光线充足。