3411|2

1万

帖子

25

TA的资源

版主

楼主
 

CircuitPython正在ESP32-S2中添加摄像头功能 [复制链接]

 

 

Adafruit的博客消息,circuitpython正在ESP32-S2上添加对摄像头的支持,只需要简单几行代码,就可以初始化、读取摄像头并显示图像。

 

import time
import board
import busio
import displayio
import adafruit_ili9341

displayio.release_displays()

#spi = busio.SPI(MISO=board.LCD_MISO, MOSI=board.LCD_MOSI, clock=board.LCD_CLK)
spi = busio.SPI(MOSI=board.LCD_MOSI, clock=board.LCD_CLK)

display_bus = displayio.FourWire(spi, command=board.LCD_D_C, chip_select=board.LCD_CS)

kw = dict(width=240, height=320)
def init_with_madctl(madctl):
    return adafruit_ili9341._INIT_SEQUENCE.replace(b'\x36\x01\x38',
            bytes([0x36, 1, madctl]))

display = displayio.Display(display_bus,
    init_with_madctl(0b010_110_00), width=320, height=240)

from adafruit_ov7670 import (
    OV7670,
    OV7670_SIZE_DIV1,
    OV7670_SIZE_DIV16,
    OV7670_TEST_PATTERN_COLOR_BAR,
    OV7670_TEST_PATTERN_SHIFTING_1,
    OV7670_TEST_PATTERN_COLOR_BAR_FADE,
)
from displayio import (
    Bitmap,
    Group,
    TileGrid,
    FourWire,
    release_displays,
    ColorConverter,
    Colorspace,
)


bus = busio.I2C(scl=board.CAMERA_SIOC, sda=board.CAMERA_SIOD)

# Set up the camera (you must customize this for your board!)
cam = OV7670(
    bus,
    data_pins=board.CAMERA_DATA,
    clock=board.CAMERA_PCLK,
    vsync=board.CAMERA_VSYNC,
    href=board.CAMERA_HREF,
    mclk=board.CAMERA_XCLK,
    mclk_frequency = 20_000_000,
)
#cam.test_pattern = OV7670_TEST_PATTERN_COLOR_BAR
width = display.width
height = display.height

bitmap = None
# Select the biggest size for which we can allocate a bitmap successfully, and
# which is not bigger than the display
for size in range(OV7670_SIZE_DIV1, OV7670_SIZE_DIV16 + 1):
    cam.size = size
    if cam.width > width:
        continue
    if cam.height > height:
        continue
    try:
        bitmap = Bitmap(cam.width, cam.height, 65535)
        break
    except MemoryError:
        continue

print(width, height, cam.width, cam.height)
if bitmap is None:
    raise SystemExit("Could not allocate a bitmap")

g = Group(scale=1, x=(width - cam.width) // 2, y=(height - cam.height) // 2)
tg = TileGrid(
    bitmap, pixel_shader=ColorConverter(input_colorspace=Colorspace.RGB565_SWAPPED)
)
g.append(tg)
display.show(g)

t0 = time.monotonic_ns()
display.auto_refresh = False
while True:
    cam.capture(bitmap)
    t1 = time.monotonic_ns()
    bitmap.dirty()
    display.refresh(minimum_frames_per_second=0)
    t1 = time.monotonic_ns()
    print("fps", 1e9 / (t1 - t0), end="\r")
    t0 = t1

 

最新回复

都将近百行了,太多了   详情 回复 发表于 2021-7-5 08:53
点赞 关注
 
 

回复
举报

1万

帖子

25

TA的资源

版主

沙发
 

测试的硬件平台就是去年论坛活动评测的 ESP32-S2 Kaluga dev 套件,支持 OV7670 和 OV2640 两种摄像头。

 
 
 

回复

707

帖子

0

TA的资源

纯净的硅(高级)

板凳
 

都将近百行了,太多了

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表