如何用 ESP32-CAM 做一个实时视频流服务器

文章目录

  • ESP32-CAM 概述
    • ESP32-S 处理器
    • 内存
    • Camera 模块
    • MicroSD 卡槽
    • 天线
    • 板载 LED 和闪光灯
    • 其他
      • 数据手册和原理图
      • ESP32-CAM 功耗
  • ESP32-CAM 引脚参考
    • 引脚排列
    • GPIO 引脚
      • 哪些 GPIO 可以安全使用?
      • GPIO 0 引脚
      • MicroSD 卡引脚
  • ESP32-CAM 的烧录方式
      • 使用 ESP32-CAM-MB 编程器(推荐)
      • 使用 FTDI 适配器
  • 基于 ESP32-CAM 实时视频流服务器
    • 选择主板
    • 测试开发板
    • 实时视频流服务器

ESP32-CAM 是一款于 2019 年初上市的开发板,它的出现惊艳了一众嵌入式开发爱好者,不到 35 元的价格,就可以获得一台支持摄像头和 SD 卡的 ESP32。毫无疑问,ESP32-CAM 是一款功能强大的设备,唯一的缺点可能是,ESP32-CAM 的 IO 引脚较少,其中一些与 SD 卡共享,因此在插入 SD 卡时部分 IO 引脚无法使用,因此很难围绕它设计项目。

当然,这个模块非常简约小巧,无论是检测人脸、解码车牌,还是仅仅需要一个安全摄像头,都值得在 DIY 工具箱中拥有一席之地。

在这里插入图片描述

ESP32-CAM 概述

ESP32-CAM 的核心是安信可科技(Ai-Thinker)的 ESP32-S 系统级芯片。作为系统级芯片,ESP32-S 芯片在单个芯片上包含微处理器、RAM、存储和外围设备。虽然该芯片的功能令人印象深刻,但 ESP32-CAM 开发板增加了更多功能,下面我们逐一看一下每个组件。

ESP32-S 处理器

ESP32-CAM 搭载了安信可科技的 ESP32-S 表面贴装印刷电路板模块。它相当于乐鑫的 ESP-WROOM-32 模组(外形尺寸和通用规格相同)。

在这里插入图片描述

ESP32-S 包含一个 Tensilica Xtensa® LX6 微处理器,带有两个 32 位内核,运行频率高达 240 MHz,这就是 ESP32-S 适用于视频处理、面部识别甚至人工智能等密集型任务的原因。

内存

内存对于复杂任务至关重要,因此 ESP32-S 具有完整的 520 KB 内部 RAM,与芯片的其他组件位于同一芯片上。

在这里插入图片描述

520 KB RAM 可能不足以完成 RAM 密集型任务,因此 ESP32-CAM 包括 4 MB 的外部 PSRAM1(Pseudo Static Random Access Memory,伪静态随机存取存储器)来扩展内存容量,这个容量对于密集的音频或图形处理已经足够了。

为了有足够的存储空间来存储程序和数据,ESP32-S 芯片还包含 4 MB 的片上闪存(Flash Memory)。

Camera 模块

ESP32-CAM 上的 OV2640 摄像头传感器使其有别于其他 ESP32 开发板,非常适合用于视频门铃或保姆摄像头等视频项目。

在这里插入图片描述

OV2640 摄像机的分辨率为 200 万像素,相当于最大 1600×1200 像素,这对于许多监控应用来说已经足够了。

同时,ESP32-CAM 也兼容 esp32-camera 上列出的各种摄像头传感器。

MicroSD 卡槽

在 ESP32-CAM 上增加一个 microSD 卡插槽,可以用于数据记录器或图像捕获。

在这里插入图片描述

天线

ESP32-CAM 配有板载 PCB 走线天线以及用于连接外部天线的 u.FL 连接器。天线选择跳线是一个零欧电阻,默认是板载 PCB 走线天线,如果要切换成外部天线,需要用电烙铁把零欧电阻焊接在另一个焊盘上。

在这里插入图片描述

一般用 PCB 天线用于试验 ESP32-CAM ,尤其是靠近路由器时效果最好(安信可科技称 PCB 天线的增益为 2.1dBi)。但一些离离路由器较远的项目,可能会遇到视频流缓慢和其他连接问题。在这种情况下,可以使用带有 IPX 连接器的 2.4GHz 外部天线,需要更改天线跳线以启用 u.FL 连接器。

在这里插入图片描述

三个焊盘位于 u.FL 连接器旁边以及板载天线和 ESP32-S 的金属外壳之间,一个零欧电阻器连接顶部的两个焊盘,只需将零欧电阻取下并焊在下面焊盘即可。

板载 LED 和闪光灯

ESP32-CAM 有一个白色的方形 LED,是一个板载的相机闪光灯,也可用于一般照明,引脚为 GPIO 4,输出高电平点亮闪光灯。背面有一个小的红色 LED,可用作状态指示灯(可编程),引脚为 GPIO 33,输出低电平点亮 LED。

在这里插入图片描述

其他

数据手册和原理图

有关 ESP32-CAM 的更多信息,请参阅:

ESP32-CAM 原理图

OV2640 Camera 数据手册

[!CAUTION]

ESP32-CAM 的数据手册在线链接已经失效了(原链接:https://docs.ai-thinker.com/_media/esp32/docs/esp32-cam_product_specification_zh.pdf),希望安信可科技官方能尽快解决这个问题。

ESP32-CAM 功耗

ESP32-CAM 的功耗范围从不流式传输视频时的 80 mAh 到流式传输视频时的 100~160 mAh 左右,如果打开闪光灯后,功耗可以达到 270 mAh。

ESP32-CAM 引脚参考

引脚排列

ESP32-CAM 共有 16 个引脚。为方便起见,具有相似功能的 pin 被组合在一起。引脚分配如下:

在这里插入图片描述

GPIO 引脚

ESP32-S 芯片共有 32 个 GPIO 引脚,但由于其中许多引脚在内部用于摄像头和 PSRAM,因此 ESP32-CAM 只有 10 个 GPIO 引脚可用。通过对适当的寄存器进行编程,可以为这些引脚分配各种外设功能,例如 UART、SPI、ADC 和 Touch等。

在这里插入图片描述

哪些 GPIO 可以安全使用?

下表显示了哪些引脚可以安全使用,哪些引脚应谨慎使用:

[!IMPORTANT]

⭕️ – 可以放心使用的引脚;

❗️ – 需要谨慎使用的引脚;

❌ – 建议不使用的引脚。

标签GPIO使用建议原因
IO00❗️启动时必须为 HIGH,下载代码时必须为 LOW
U0T1UART0 的发送引脚,用于烧录和调试
IO22❗️开机时必须为 LOW,当有 microSD 卡时不能使用
U0R3UART0 的接受引脚,用于刷写和调试
IO44❗️连接到板载闪光灯,当有 microSD 卡时无法使用
IO1212❗️开机时必须为 LOW,当有 microSD 卡时不能使用
IO1313❗️当有 microSD 卡时无法使用
IO1414❗️当有 microSD 卡时无法使用
IO1515❗️启动时必须为 HIGH,如果拉低则会阻止启动日志的输出,当有 microSD 卡时无法使用
IO1616⭕️
板载 LED33⭕️

GPIO 0 引脚

GPIO 0 是最重要的引脚。它确定 ESP32 是否处于下载模式。

该 GPIO 在启动时必须为高电平,在下载模式时必须为低电平。该引脚在内部有一个 10KΩ 的电阻上拉。如果要下载程序到开发板上,需要把该引脚拉低,即短接到 GND,使开发板进入下载模式,即可烧录程序。烧录程序完成后,断开与 GND 的短接,引脚被拉回高电平,进而重启开发板。

MicroSD 卡引脚

以下引脚用于连接 MicroSD 卡,如果不使用 MicroSD 卡,可以将这些引脚用作常规输入和输出。

在这里插入图片描述

ESP32-CAM 的烧录方式

对 ESP32-CAM 进行编程可能会有点麻烦,因为它没有内置的 USB 端口,用户需要额外的硬件才能程序下载到开发板上。过程不复杂,但很不方便。

一般有两种下载方式,一种是用 ESP32-CAM-MB 编程器,另一种是 FTDI 适配器或者 USB-to-TTL 模块。

使用 ESP32-CAM-MB 编程器(推荐)

一般在购买 ESP32-CAM 的时候,卖家都会推荐再买一个 ESP32-CAM-MB 的小型附加子板,如下图:

在这里插入图片描述

这个编程器板载了一个 CH340G USB 转串口芯片,不仅可以烧写程序,还可以与电脑进行串口通信。此外,还有附带了 RESET 按钮(与 ESP32-CAM 的复位按钮并联)、BOOT 按钮(连接在 GPIO 0,按下时可将 GPIO 0 下拉到低电平)、电源指示灯 LED 和稳压器,可为 ESP32-CAM 提供充足的电力。

按下图的安装方式,把 ESP32-CAM 安装进 ESP32-CAM-MB,下载程序时,按住 ESP32-CAM-MB 上的 BOOT 按钮,直到程序下载完成再松开。

在这里插入图片描述

使用 FTDI 适配器

如果在购买 ESP32-CAM 时,没有附购 ESP32-CAM-MB,那么就需要用 FTDI 适配器下载程序了。接线方式如下:

在这里插入图片描述

许多 FTDI 编程器都有一个跳帽,可在 3.3V 和 5V 之间进行切换。由于 ESP32-CAM 供电为 5V,请确保跳线设置为 5V。

另外,下载程序时,需要将 GPIO 0 引脚短接在 GND,下载完成后,必须断开才能正常运行。

基于 ESP32-CAM 实时视频流服务器

选择主板

ESP32-CAM 开发板在 Arduino IDE 有单独的选项,如下图所示,选择 “AI Thinker ESP32-CAM” 即可。

在这里插入图片描述

Arduino IDE 2.0以上版本可以直接搜索设置,如下图:

在这里插入图片描述

测试开发板

先用一个点亮闪光灯的程序测试一下开发板,如下:

#define CAMERA_FLASH 4void setup()
{pinMode(CAMERA_FLASH, OUTPUT);
}void loop()
{digitalWrite(CAMERA_FLASH, HIGH);delay(1000);digitalWrite(CAMERA_FLASH, LOW);delay(2000);
}

把程序下载到开发板上运行,如果闪光灯按预设的亮一秒、熄灭两秒的规律运行,说明开发板正常。

实时视频流服务器

这个程序不需要我们亲自编写,如下图操作,乐鑫官方为用户提供了一个示例,就是实时视频流服务器的示例程序。

在这里插入图片描述

该例程使 ESP32-CAM 成为功能齐全的网络摄像头,具有人脸检测和大量自定义选项等功能。不过这个例程不能直接下载到 ESP32-CAM,需要做一些修改。Arduino IDE 的例程为只读文件,是不允许直接修改的,所以我们需要把例程另存为用户文档,直接操作另存为即可,这里不做演示。

因为 ESP32-CAM 使用的是 AI-Thinker 模型,所以要取消注释 CAMERA_MODEL_AI_THINKER 这个宏定义,并注释所有其他模型。

在这里插入图片描述

接下来,需要将 ESP32-CAM 连接到WiFi,把 WiFi 名称和密码都写在下面两个变量即可。

在这里插入图片描述

修改好即可编译上传到开发板,以波特率 115200 打开串行监视器,然后按 ESP32-CAM 上的重置按钮。稍等一会就可以在 Serial Monitor 中看到 IP 地址。

在这里插入图片描述

启动浏览器并输入串行监视器上显示的 IP 地址。确保 Web 浏览器与 ESP32-CAM 在同一网络上。ESP32-CAM 应显示一个网页。按下网页的 Start Stream 按钮,即可开始推送视频流。

在这里插入图片描述

可以在左侧窗格中尝试各种摄像机设置。例如,可以更改视频的分辨率和帧速率,以及其亮度、对比度、饱和度等。点击 Get Still 按钮拍照,图像会下载到计算机。


  1. PSRAM 的全称是 Pseudo Static Random Access Memory(伪静态随机存取存储器)。它采用 1T1C(一个晶体管和一个电容器)的架构,类似于 DRAM,但外部接口与 SRAM 相同,提供类似 SRAM 的简单接口和驱动方式‌。PSRAM 结合了 SRAM 的高速和 DRAM 的高容量特性,适用于需要大容量存储且要求高速访问的场景‌。 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/66688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Virgo:增强慢思考推理能力的多模态大语言模型

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

照片做成图书小程序开发制作介绍

照片做成图书小程序系统,主要是让用户直接通过小程序选择需要做成书的类型和照片排版布局模板,以及上传照片的数量。照片上传完成后,生成模板图片样式进行预览或编辑修改。修改完成全部保存。保存后生成完整的照片书进行预览没问题&#xff0…

《Spring Framework实战》10:4.1.4.2.详细的依赖和配置

欢迎观看《Spring Framework实战》视频教程 集合 <list/>、<set/>、<map/>和<props/>元素分别设置Java集合类型list、set、map和properties的属性和参数。以下示例显示了如何使用它们&#xff1a; <bean id"moreComplexObject" class&qu…

花生好坏缺陷识别数据集,7262张图片,支持yolo,coco json,pasical voc xml格式的标注,识别准确率在95.7%

花生好坏缺陷识别数据集,7262张图片&#xff0c;支持yolo&#xff0c;coco json&#xff0c;pasical voc xml格式的标注&#xff0c;识别准确率在95.7% 数据集分割 训练组87&#xff05; 6353图片 有效集8% 606图片 测试集4% 303图片 预处理 自动定…

WebLogic安全基线

WebLogic安全基线 一、 用户权限1 、检查weblogic 的启动用户2 、用户权限整改3 、使用普通用户重启weblogic 二、账户共用1 、检查weblogic 控制台的账户2 、账户共用整改3 、测试登录weblogic 控制台新账户 三、 账户清理1 、检查weblogic 控制台的账户2 、帐户清理整改 四、…

react-quill 富文本组件编写和应用

index.tsx文件 import React, { useRef, useState } from react; import { Modal, Button } from antd; import RichEditor from ./RichEditor;const AnchorTouchHistory: React.FC () > {const editorRef useRef<any>(null);const [isModalVisible, setIsModalVis…

TDv2:一种用于离线数学表达式识别的新型树形结构解码器

TDv2:一种用于离线数学表达式识别的新型树形结构解码器 本文提出了一种针对手写数学表达式识别(HMER)任务的新型树形解码器(TDv2) ,旨在充分利用数学表达式的树结构标签进行更有效的建模和预测。相较于传统的LaTeX字符串解码器,该模型通过采用一个节点分类模块和一个分…

银行信贷管理系统flask

完整源码项目包获取→点击文章末尾名片&#xff01;

WordPress静态缓存插件WP Super Cache与 WP Fastest Cache

引言 WordPress是一款开源的内容管理系统&#xff08;CMS&#xff09;&#xff0c;最初作为博客平台开发&#xff0c;现已发展成为一个功能强大的建站工具&#xff0c;支持创建各种类型的网站&#xff0c;包括企业网站、在线商店、个人博客等。它具有用户友好的界面、丰富的插…

onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制

文章目录 1. 页面跳转方式2. 你的场景分析3. 页面生命周期4. 总结5. 建议 在微信小程序中&#xff0c;页面跳转时&#xff0c; onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制。以下是详细说明&#xff1a; 1. 页面跳转方式 微信小程序提供了多种页面…

【深度学习】通俗理解偏差(Bias)与方差(Variance)

在统计学习中&#xff0c;我们通常使用方差与偏差来衡量一个模型 1. 方差与偏差的概念 偏差(Bais)&#xff1a; 预测值和真实值之间的误差 方差(Variance)&#xff1a; 预测值之间的离散程度 低偏差低方差、高偏差低方差&#xff1a; 图中每个点表示同一个模型每次采样出不同…

生态水文研究中的机器学习与数学建模方法选择

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【LeetCode】力扣刷题热题100道(21-25题)附源码 接雨水 合并区间 字母异位词 滑动窗口 覆盖子串(C++)

目录 1.接雨水 2.合井区间 3.找到字符串中所有字母异位词 4.滑动窗口最大值 5.最小覆盖子串 1.接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 代码如下所示&#xff1a; class Solution {…

慧集通(DataLinkX)iPaaS集成平台-智能体(Agent)API

功能简介&#xff1a; 该功能下主要是用来管理集成平台对外开放接口得管控以及调用日志信息得查看操作&#xff0c;并支持日志得重放等操作&#xff1b;注&#xff1a;所有触发类单据得日志也可以在此查看(如使用数据触发组件自动触发流程得日志信息) 1.第三方调用接口类日志查…

HTB:Bank[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 提取出靶机TCP开放端口 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用curl对域名进行访问…

创建基本的 Electron 应用项目的详细步骤

创建一个基本的 Electron 应用项目的详细步骤。我们将从安装 Node.js 开始&#xff0c;然后创建项目文件夹并初始化 Electron 项目。 1. 安装 Node.js 首先&#xff0c;确保你已经安装了 Node.js 和 npm。你可以在终端中运行以下命令来检查是否已经安装&#xff1a; node -v…

TDengine + MQTT :车联网时序数据库如何高效接入

现代新能源汽车&#xff0c;作为一种内部系统极为复杂的交通工具&#xff0c;配备了大量传感器、导航设备、应用软件&#xff0c;这些传感器产生的数据都需要上报到车联网平台当中。对于这些车辆的状态数据&#xff08;如车速、发动机转速等&#xff09;、位置数据&#xff08;…

2. Scala 高阶语法之集合与元组

背景 上一章简单介绍了scala是什么&#xff0c;以及scala的基础用法&#xff0c;本文介绍scala的高阶语法&#xff0c;希望看完本章之后&#xff0c;读者能体会到scala和java的明显区别&#xff0c;以及scala的强大之处。 1. 数组 Scala中提供了一种数据结构-数组&#xff0…

初学STM32 --- USMART

目录 USMART简介 USMART主要特点&#xff1a; USMART原理 USMART组成&#xff1a; USMART 的实现流程简单概括 USMART扫描函数&#xff1a; USMART系统命令 USMART移植 USMART简介 USMART是一个串口调试组件&#xff0c;可以大大提高代码调试效率&#xff01; USMART主…

SQL编程语言

第一章 1. 数据库是长期储存在计算机内&#xff0c;由专门的数据管理软件(数据库管理系统)&#xff0c;进行统一组织和管理控制的大量数据的集合。 2.数据库的基本特点不包括可以快速检索。 3. 数据管理技术的发展经历了&#xff1a;人工管理阶段、文件系统阶段、数据库系统阶…