拍照
前言
生活中充满着形形式式的摄像头,其被广泛应用在各行业,如照相机、手机相机、安防监控等。使用摄像头可以拍照,记录美好瞬间。
实验平台
pyWiFi-ESP32-S3开发套件、3.2寸显示屏、OV2640摄像头。

实验目的
编写实现OV2640摄像头拍摄图片。
实验讲解
本例程实验的摄像头感光芯片为常用的OV2640,200万像素摄像头,最大支持1600*1200像素分辨率拍摄。点击购买>>
参数如下:

| 模块参数 | |
|---|---|
| 感光芯片 | OV2640 |
| 控制方式 | SCCB |
| 接口定义 | 24P 2.5mm排针 / 24P-0.5mm fpc座 |
| 像素 | 最高1600*1200(200万) |
| 模块尺寸 | 3.8 * 2.7mm |
pyWiFi-ESP32-S3带有24P标准摄像头接口,目前支持OV2640,接线方式如下:先将FPC座下方的黑色锁扣提起。

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

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实时显示摄像头采集数据。

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

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

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