当前位置: 首页 > news >正文

esp32-camera入门(基于ESP-IDF)

主要参考资料:
ESP32-S2 Kaluga camera + lcd 示例入门: https://blog.csdn.net/Marchtwentytwo/article/details/121121028
摄像头应用方案常见问题汇总: https://docs.espressif.com/projects/esp-faq/zh_CN/latest/application-solution/camera-application.html

目录

  • 一、camera初始化
    • 1.配置接线和驱动
    • 2.相机初始化 并 配置图像传感器
  • 二、传输camera 到 lcd 显示

一、camera初始化

1.配置接线和驱动

static camera_config_t camera_config = {.pin_pwdn = CAM_PIN_PWDN,.pin_reset = CAM_PIN_RESET,.pin_xclk = CAM_PIN_XCLK,.pin_sscb_sda = CAM_PIN_SIOD,.pin_sscb_scl = CAM_PIN_SIOC,.pin_d7 = CAM_PIN_D7,.pin_d6 = CAM_PIN_D6,.pin_d5 = CAM_PIN_D5,.pin_d4 = CAM_PIN_D4,.pin_d3 = CAM_PIN_D3,.pin_d2 = CAM_PIN_D2,.pin_d1 = CAM_PIN_D1,.pin_d0 = CAM_PIN_D0,.pin_vsync = CAM_PIN_VSYNC,.pin_href = CAM_PIN_HREF,.pin_pclk = CAM_PIN_PCLK,.xclk_freq_hz = 20000000, //XCLK 20MHz or 10MHz for OV2640 double FPS (Experimental).ledc_timer = LEDC_TIMER_0,	//ledc定时器用于生成XCLK.ledc_channel = LEDC_CHANNEL_0,.pixel_format = PIXFORMAT_RGB565, //YUV422,GRAYSCALE,RGB565,JPEG.frame_size = FRAMESIZE_QVGA,     //QQVGA-UXGA Do not use sizes above QVGA when not JPEG FRAMESIZE_QVGA.jpeg_quality = 12,               //0-63 lower number means higher quality.fb_count = 2,                    //控制使用 framebuffer 的个数,个数越多消耗内存越大。其值大于 2 时,获取的一帧图像可能不是实时的。仅与JPEG一起使用。.fb_location = CAMERA_FB_IN_PSRAM,//存放在外部PSRAM中,还可选择内部DRAM.grab_mode = CAMERA_GRAB_WHEN_EMPTY//当缓冲区为空时填充缓冲区。资源较少,但第一个'fb_count'帧可能是旧的
};

2.相机初始化 并 配置图像传感器

void app_camera_init()
{// camera initesp_err_t err = esp_camera_init(&camera_config);if (err != ESP_OK){ESP_LOGE(TAG, "Camera init failed with error 0x%x", err);return;}//配置图像传感器sensor_t *s = esp_camera_sensor_get();s->set_vflip(s, 0);s->set_hmirror(s, 1);
}

二、传输camera 到 lcd 显示

可以看到 camera 示例 里对应的代码如下:

    while (1) {camera_fb_t *pic = esp_camera_fb_get();if (pic) {ESP_LOGI(TAG, "picture: %d x %d %dbyte", pic->width, pic->height, pic->len);lcd_set_index(0, 0, pic->width - 1, pic->height - 1);
#ifdef CONFIG_CAMERA_JPEG_MODEjpg2rgb565(pic->buf, pic->len, rgb565, JPG_SCALE_NONE);lcd_write_data(rgb565, 2 * (pic->width * pic->height));
#elselcd_write_data(pic->buf, pic->len);
#endifesp_camera_fb_return(pic);} else {ESP_LOGE(TAG, "Get frame failed");}}

这部分就是经过封装的 API 调用。先调用 esp_camera_fb_get 获取 camera 拍摄的数据,然后通过 lcd_set_index 设置 lcd 的起始和结束地址。之后将 camera 拍摄到的数据通过 lcd_write_data 来让 lcd 显示出来,最后使用 esp_camera_fb_return 释放 camera 使用的 buffer 来方便后续重复利用。

http://www.lryc.cn/news/455277.html

相关文章:

  • react中类式组件与函数式组件的区别
  • 【D3.js in Action 3 精译_030】3.5 给 D3 条形图加注图表标签(下):Krisztina Szűcs 人物专访 + 3.6 本章小结
  • 【重学 MySQL】五十六、位类型
  • Centos7 NTP客户端
  • 手机号归属地查询-手机号归属地-手机号归属地-运营商归属地查询-手机号码归属地查询手机号归属地-运营商归属地
  • CoppeliaSim和Matlab建立远程连接教程
  • 使用STS以及签名URL临时授权访问OSS资源
  • Next.js 14 使用 react-md-editor 编辑器 并更改背景颜色
  • 【Iceberg分析】Spark与Iceberg集成落地实践(一)
  • 【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL45
  • 【强训笔记】day27
  • Nginx06-静态资源部署
  • MySQL数据库专栏(二)SQL语句基础操作
  • 【OpenCV 实战】1.手势虚拟拖拽(双手骨骼点识别)
  • 基于springboot人力资源管理系统源码
  • 如何使用 Apt-Get 和 Apt-Cache 在 Ubuntu 和 Debian 中管理软件包
  • Linux系统创建新分区并挂载的方法
  • 反射第二弹:用注册器动态注册(用自定义的注解标注的)策略,实现策略模式的设计
  • 【Xcode Command Line Tools】安装指南
  • springboot开发网站-使用redis数据库定时特征限制指定ip的访问次数
  • 【大模型理论篇】大模型相关的周边技术分享-关于《NN and DL》的笔记
  • CSS 圆形边框与阴影
  • Bianchi模型、python计算及ns3验证
  • SQL常用语法
  • 计算机毕业设计 玩具租赁系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 浏览器前端向后端提供服务
  • 文本到语音或视频的构想
  • 请解释一下数据库的分区和分片?请解释一下数据库的日志和日志的重要性?
  • windows C++-创建数据流代理(二)
  • 大数据毕业设计选题推荐-个性化图书推荐系统-Python数据可视化-Hive-Hadoop-Spark