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 来方便后续重复利用。
相关文章:
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 …...
react中类式组件与函数式组件的区别
在React中,类式组件(Class Components)与函数式组件(Functional Components)是两种不同的组件定义方式,它们各有特点,适用于不同的场景。以下是它们之间的主要区别: 一、定义与语法…...
【D3.js in Action 3 精译_030】3.5 给 D3 条形图加注图表标签(下):Krisztina Szűcs 人物专访 + 3.6 本章小结
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…...
【重学 MySQL】五十六、位类型
【重学 MySQL】五十六、位类型 定义赋值与使用注意事项应用场景 在MySQL数据库中,位类型(BIT类型)是一种用于存储位字段值的数据类型。 定义 BIT(n)表示n个位字段值,其中n是一个范围从1到64的整数。这意味着你可以存储从1位到64…...
Centos7 NTP客户端
目录 1. NTP客户端1.1 安装1.2 启动1.3 同步状态异常1.4 更改/etc/chrony.conf配置文件1.5 同步状态正常 1. NTP客户端 1.1 安装 如果chrony没有安装,可以使用以下命令安装 sudo yum install chrony1.2 启动 启动并设置开机自启 sudo systemctl start chronyd …...
手机号归属地查询-手机号归属地-手机号归属地-运营商归属地查询-手机号码归属地查询手机号归属地-运营商归属地
手机号归属地查询API接口是一种网络服务接口,允许开发者通过编程方式查询手机号码的注册地信息。关于快证签API接口提供的手机号归属地查询服务,以下是一些关键信息: 一、快证签API接口简介 快证签API接口可能是一个提供多种验证和查询服务…...
CoppeliaSim和Matlab建立远程连接教程
CoppeliaSim和Matlab建立远程连接教程 Matlab通过调用CoppeliaSim的远程API和库函数实现远程连接,为实现Matlab和CoppeliaSim的联合仿真做准备。 一、获取并查看版本信息 点击 Help 查看版本信息 使用的CoppeliaSim Edu版本为:4.4.0 位数:64bit 二、拷贝API函数和库文件…...
使用STS以及签名URL临时授权访问OSS资源
本文介绍JAVA如何使用STS以及签名URL临时授权访问OSS资源。 注意事项 由于STS临时账号以及签名URL均需设置有效时长,当您使用STS临时账号生成签名URL执行相关操作(例如上传、下载文件)时,以最小的有效时长为准。例如您的STS临时账…...
Next.js 14 使用 react-md-editor 编辑器 并更改背景颜色
1.简介 react-md-editor是一款markdown编辑器,本文介绍如何在Next.js中使用它。 2.安装 安装命令: npm install uiw/react-md-editor3.MD编辑器 markdown编辑器的使用: "use client" import MDEditor from uiw/react-md-edi…...
【Iceberg分析】Spark与Iceberg集成落地实践(一)
Spark与Iceberg集成落地实践(一) 文章目录 Spark与Iceberg集成落地实践(一)清理快照与元数据配置表维度自动清理元数据文件属性手动清理 清理孤岛文件合并数据文件 清理快照与元数据 配置表维度自动清理元数据文件属性 每一次写…...
【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL45
异步FIFO 描述 请根据题目中给出的双口RAM代码和接口描述,实现异步FIFO,要求FIFO位宽和深度参数化可配置。 电路的接口如下图所示。 双口RAM端口说明: 端口名 I/O 描述 wclk input 写数据时钟 wenc input 写使能 waddr input 写…...
【强训笔记】day27
NO.1 代码实现: #include<iostream>using namespace std;int n,m; int main() {cin>>n>>m;long long retn;for(int i0;i<m-1;i)retret*(n-1)%109;cout<<ret<<endl;return 0; }NO.2 思路:bfs遍历实现,dis…...
Nginx06-静态资源部署
零、文章目录 Nginx06-静态资源部署 1、静态资源概述 静态资源:是在Web开发中不经常改变的文件,比如图片、CSS样式表、JavaScript脚本文件等。这些资源通常是预先编译好的,不需要服务器端的动态处理。动态资源:是在Web开发中需…...
MySQL数据库专栏(二)SQL语句基础操作
目录 数据库操作 创建数据库 查看数据库 选择数据库 删除数据库 数据表操作 数据表数据类型 数据表列约束 数据表索引 创建表 查看表 查看表结构 删除表 数据表的增删改操作 …...
【OpenCV 实战】1.手势虚拟拖拽(双手骨骼点识别)
step: 1.opencv 获取视频流 2.在画面上画一个方块 3.通过mediapipe获取手指关键点坐标 4.判断手指是否在方块上 5.若在方块上,方块跟着手指移动 mediapipe网站介绍:Hands - mediapipe (chuoling.github.io) 已上传到GitHub : plumqm/OpenC…...
基于springboot人力资源管理系统源码
项目技术:SpringBoot 运行环境:jdk1.8idea/eclipsemaven3mysql5.6 项目描述: 系统包括,员工管理,奖惩管理,合同管理,薪酬管理,培训管理,绩效评估等功能...
如何使用 Apt-Get 和 Apt-Cache 在 Ubuntu 和 Debian 中管理软件包
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 Apt 是 dpkg 打包系统的命令行前端,也是许多发行版中管理软件的首选方式。它是 Debian 及基于 Debian 的 Linux 发行版…...
Linux系统创建新分区并挂载的方法
一、引言 本文以CentOS为例讲述Linux系统创建新分区并挂载的方法。如下图所示,用fdisk -l命令可以看到该CentOS系统下有一个磁盘/dev/vda,其容量为2199G,即2T。该磁盘有两个分区:vda1和vda2: 用lsblk命令可以查看到磁…...
反射第二弹:用注册器动态注册(用自定义的注解标注的)策略,实现策略模式的设计
目录 引言 设计思路: 代码实现: 标注注解:@StrategyClass 扫描注解:trategyScan 注册器抽象类: 动态策略注册类: AOP类: 总结: 引言 曾经有人问我,假如有一个业务或者数据处理逻辑,会根据甲方客户繁杂的业务需求,而动态变化,该怎么处理,具体怎么实现? 将…...
【Xcode Command Line Tools】安装指南
安装指令 xcode-select --install安装 完成安装 验证 $ xcode-select -p /Library/Developer/CommandLineTools...
数字孪生-三维重建-透明建筑-以智能管控为价值
透明建筑的核心透明建筑,本质上不是 “玻璃造房子”,而是以三维重构为骨架、以空间连续为逻辑、以全域可视为目标、以智能管控为价值的新一代数字孪生空间形态。它的核心可以浓缩为四句话:1. 空间可视核心:打破物理遮挡࿰…...
通达信缠论插件ChanlunX:3分钟实现专业缠论分析的完整解决方案
通达信缠论插件ChanlunX:3分钟实现专业缠论分析的完整解决方案 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 你是否曾经面对复杂的K线图感到无从下手?是否因为缠论的手工绘制耗时…...
C++定时器实战:从线程轮询到时间轮算法的演进与选型
1. 定时器技术选型的核心痛点 当我们需要在C项目中实现定时任务调度时,最直观的做法可能就是直接开个线程轮询了。我刚开始做网络服务开发时也这么干过,结果上线后CPU直接飙到90%——这就是典型的"新手陷阱"。实际上,定时器的实现方…...
财联支付申请开通的门槛门槛高不高?
在数字支付蓬勃发展的当下,支付方式的便捷性和安全性成为了商户和消费者关注的焦点。财联支付作为数字支付领域的佼佼者,以其创新的技术和优质的服务吸引了众多商户的目光。然而,很多人对于财联支付申请开通的门槛存在疑问,究竟它…...
2026年实战指南:Jrebel本地与远程热加载的配置、排错与进阶场景
1. 热加载技术的前世今生 第一次接触热加载是在2016年,当时还在用Eclipse开发Spring项目。每次改完代码都要经历漫长的重启等待,直到同事推荐了JRebel这个神器。十年过去,热加载已经成为现代Java开发的标配,特别是在2026年的今天&…...
自建个人数字图书馆:基于Go+Vue+SQLite的Alexandria部署与优化指南
1. 项目概述:一个现代数字图书馆的诞生如果你和我一样,是个重度数字内容爱好者,硬盘里塞满了从各种渠道收集的电子书、论文、技术文档、漫画,甚至是整理好的网页存档,那你一定体会过那种“找东西”的痛苦。文件散落在不…...
i.MX6Q高温满负载压力测试:从散热原理到嵌入式产品可靠性设计
1. 项目概述与测试背景 在嵌入式产品的研发过程中,尤其是在工业控制、车载电子、户外设备等严苛应用场景下,系统的长期稳定性和可靠性是衡量产品成败的关键。其中,处理器作为系统的“大脑”,其在高负载、高温环境下的表现…...
Excel插件E灵实战:把杂乱的家庭成员明细表,一键变成规整的‘一户一档’报表
Excel插件E灵实战:从杂乱数据到专业报表的智能转换 在日常办公中,我们经常需要处理各种家庭成员信息表,这些原始数据往往杂乱无章,包含重复、缺失或不规范的记录。传统的手工整理方式不仅耗时费力,还容易出错。本文将详…...
从HelloWorld到第一个APK:用Android Studio 2022.3.1完整走一遍Android应用发布流程
从HelloWorld到第一个APK:Android Studio 2022.3.1全流程实战指南 当你第一次打开Android Studio,看到那只呆萌的长颈鹿图标时,可能既兴奋又迷茫。兴奋的是终于要开始Android开发之旅了,迷茫的是安装完成后该从哪里入手。本文将带…...
当声带萎缩遇上AI建模:ElevenLabs老年女性语音不可忽视的5项生理声学特征补偿技术
更多请点击: https://intelliparadigm.com 第一章:声带萎缩与老年女性语音建模的交叉挑战 随着人口老龄化加剧,构建高保真、个体化老年女性语音合成模型面临独特的生理—声学耦合难题。声带萎缩导致基频降低、抖动率(jitter&…...
