ESP32驱动摄像头:1.驱动OV2640模块(待验证)

news2024/9/20 8:02:54

一、装ArduCam库和ESPAsyncWebServer库

二、参考代码

#include <Wire.h>
#include <ArduCAM.h>
#include <SPI.h>
#include <WiFi.h>
#include <ESPAsyncWebServer.h>

#define CAM_CS 32 // modify according to your own wiring
#define OV2640_CHIPID_HIGH 0x0A
#define OV2640_CHIPID_LOW 0x0B

ArduCAM myCAM(OV2640, CAM_CS);

// Set your access point's SSID and password
const char* ssid = "...";  //wifi名 
const char* password = "....."; // 密码
AsyncWebServer server(80); // Create an instance of the server

// This function sends the live video frames to the client
void serverStream(AsyncWebServerRequest *request){
  AsyncWebServerResponse *response = request->beginResponse("multipart/x-mixed-replace;boundary=frame", HTTP_ANY, [](uint8_t *buffer, size_t maxLen, size_t alreadySent) -> size_t {
    if(myCAM.get_bit(ARDUCHIP_TRIG , CAP_DONE_MASK)){
	    size_t len = myCAM.read_fifo_length();
	    uint8_t * buf = (uint8_t *)malloc(len);
	    myCAM.CS_LOW();
	    myCAM.set_fifo_burst();
	    myCAM.spi_trans(0xFF);
	    myCAM.transferBytes(myCAM.camera_model,BUF,buf,len);
	    myCAM.CS_HIGH();
	    size_t available_len = len - (alreadySent ? 32 : 0);
	    size_t will_send =(available_len > maxLen) ? maxLen : available_len;
	    if (!alreadySent){ // First chunk
	      memcpy_P(buffer, buf, will_send);
	    } else { // Consequent chunks
	      buffer = buf + 32;
	    }
	    free(buf);
	    if (!alreadySent) {
	      return will_send;
	    } else if (alreadySent + will_send < len) {
	      return will_send;
	    } else {
	      myCAM.clear_fifo_flag();
	      return 0; // Last chunk sent, signaling end of response by returning 0 bytes left
	    }
	  }
	  return 0; // If there's nothing in the buffer, return 0 bytes left
  });
  response->addHeader("Connection", "close");
  request->send(response);
}

void setup() {
  Wire.begin(21, 22); // SDA, SCL
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
  }

  myCAM.set_format(JPEG);
  myCAM.InitCAM();
  myCAM.write_reg(ARDUCHIP_TIM, VSYNC_LEVEL_MASK);   // VSYNC is active HIGH
  myCAM.clear_fifo_flag();
  myCAM.write_reg(ARDUCHIP_FRAMES, 0x00);
  
  server.on("/stream", HTTP_GET, serverStream); // Route for live video stream
  server.begin();
}

void loop() {
  // You can put other code here
}

三、硬件接线

OV2640 VCC(电源) --> ESP32 3.3V

OV2640 GND(地线) --> ESP32 GND

OV2640 SDA(数据线) --> ESP32 IO21(I2C数据线SDA)

OV2640 SCL(时钟线) --> ESP32 IO22(I2C时钟线SCL)

OV2640 VSNC(帧同步) --> ESP32 IO25

OV2640 HREF(行同步) --> ESP32 IO23

OV2640 PCLK(像素时钟) --> ESP32 IO19

OV2640 XCLK(系统时钟) --> ESP32 IO18

OV2640 D0~D7(数据线) --> ESP32 IO5~IO13(8位并行数据线)

四、反思

        这个时候可能有细心的小伙伴发现了,一块ESP-WROOM-32开发板25元,一个OV2640模块23元,总计48元;而一块自带摄像头的ESP32CAM开发板只要41元。也就是说“ESP-WROOM-32+模块”的方案不仅难调通而且还亏损7元,那为什么不直接买一块ESP32CAM开发板呢?不要问我,因为我也才发现......

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

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

相关文章

昇思25天训练营Day11 - 基于 MindSpore 实现 BERT 对话情绪识别

模型简介 BERT全称是来自变换器的双向编码器表征量&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;&#xff0c;它是Google于2018年末开发并发布的一种新型语言模型。与BERT模型相似的预训练语言模型例如问答、命名实体识别、自然语言推理、…

电焰灶:烹饪性能的深度剖析

在如今众多的厨房炉灶选择中&#xff0c;华火电焰灶以其独特的技术和性能吸引了不少消费者的目光。那么&#xff0c;华火电焰灶的综合烹饪性能究竟如何呢&#xff1f;让我们一起来深入探究。 首先&#xff0c;从火力方面来看&#xff0c;华火电焰灶展现出了强大的优势。其火焰强…

5G/4G加密边缘计算电力网关,开启智慧电力新篇章

计讯物联TG452&#xff0c;一款面向电力行业应用的工业级物联网网关&#xff0c;持电力协议及规约标准&#xff0c;支持采集、存储、算力、通信组网 、协议转换、控制等多功能。    电力应用   计讯物联电力网关TG452支持电力IEC101、IEC104、IEC61850、DL/T645等协议标准…

uniapp 微信小程序,最简单的流式输出:Transfer-Encoding: chunked

在GPT项目中&#xff0c;流式输出是实现流畅对话体验的关键技术之一。今天&#xff0c;我们将探讨如何在uniapp开发的微信小程序中优雅地实现这一功能。虽然WebSocket是一种常见的解决方案&#xff0c;但在某些场景下&#xff0c;我们可能寻求更轻量级且易于集成的替代方案。本…

unity使用 MQTT复现plant simulate仿真

unity使用 MQTT复现plant simulate仿真 一、plant simulate端配置 1、plant simulate MQTT组件配置&#xff0c;该组件在类库的信息流类目下&#xff0c;端口不变&#xff0c;填写ip即可&#xff1b; 2、设备配置界面&#xff0c;在控件入口和出口处各挂一个脚本&#xff0c;…

新手教学系列——MongoDB聚合查询的进阶用法

引言 MongoDB的聚合查询是其最强大的功能之一。无论是汇总、平均值、计数等标准操作,还是处理复杂的数据集合,MongoDB的聚合框架都能提供高效且灵活的解决方案。本文将通过几个实例,详细讲解如何在实际项目中使用MongoDB进行聚合查询。 标准应用:汇总、平均值、计数等 在…

认识string(一)详解

目录 标准库中的string类了解如何看文档Construct string (构造string)string()空字符串构造函数&#xff08;默认构造函数&#xff09;string (const string& str) 拷贝构造函数string (const string& str, size_t pos, size_t len npos)string (const char* s)复制构…

FiddlerScript Rules修改-更改发包中的cookie

直接在fiddler script editor中增加如下处理代码即可 推荐文档oSession -- 参数说明 测试笔记 看云

SSRF漏洞深入利用与防御方案绕过技巧

文章目录 前言SSRF基础利用1.1 http://内网资源访问1.2 file:///读取内网文件1.3 dict://探测内网端口 SSRF进阶利用2.1 Gopher协议Post请求2.2 Gopher协议文件上传2.3 GopherRedis->RCE2.4 JavaWeb中的适用性&#xff1f; SSRF防御绕过3.1 Url黑名单检测的绕过3.2 Url白名单…

公共安全和应急管理系统:提升社区韧性与危机应对能力

引言 公共安全和应急管理是现代社会不可或缺的组成部分&#xff0c;其核心目标是确保社会的稳定和居民的福祉。随着全球化、城市化和技术进步&#xff0c;社会面临的风险和威胁日益复杂多样&#xff0c;从自然灾害到人为事故&#xff0c;从公共卫生危机到恐怖袭击&#xff0c;公…

机器学习(V)--无监督学习(三)EM算法

EM算法 极大似然估计 极大似然估计&#xff1a;(maximum likelihood estimate, MLE) 是一种常用的模型参数估计方法。它假设观测样本出现的概率最大&#xff0c;也即样本联合概率&#xff08;也称似然函数&#xff09;取得最大值。 为求解方便&#xff0c;对样本联合概率取对…

强烈推荐!!李沐老师《动手学深度学习》最新Pytorch版!

动手学深度学习(PyTorch版)》是由李沐、Aston Zhang和孔德威共同编写的教材&#xff0c;专为深度学习初学者和实践者设计。本书使用PyTorch作为主要的深度学习框架&#xff0c;全面系统地介绍了深度学习的基本理论、常见模型和实际应用技巧。 书中内容包括深度学习的基础知识、…

【YOLOv8】 用YOLOv8实现数字式工业仪表智能读数(一)

上一篇圆形表盘指针式仪表的项目受到很多人的关注&#xff0c;咱们一鼓作气&#xff0c;把数字式工业仪表的智能读数也研究一下。本篇主要讲如何用YOLOV8实现数字式工业仪表的自动读数&#xff0c;并将读数结果进行输出&#xff0c;若需要完整数据集和源代码可以私信。 目录 &…

Html5+Css3学习笔记

Html5 CSS3 一、概念 1.什么是html5 html: Hyper Text Markup Language ( 超文本标记语言) 文本&#xff1a;记事本 超文本&#xff1a; 文字、图片、音频、视频、动画等等&#xff08;网页&#xff09; html语言经过浏览器的编译显示成超文本 开发者使用5种浏览器&#xf…

element ui ts table重置排序

#日常# 今天带的实习生&#xff0c;在遇到开发过程中&#xff0c;遇到了element ui table 每次查询的时候都需要重置排序方式&#xff0c;而且多个排序是由前端排序。 <el-table :data"tableData" ref"restTable"> </<el-table> <script…

谷粒商城实战笔记-24-分布式组件-SpringCloud Alibaba-Nacos配置中心-命名空间与配置分组

文章目录 一&#xff0c;命名空间1&#xff0c;简介1.1&#xff0c;命名空间的主要功能和特点1.2&#xff0c;使用场景1.3&#xff0c;如何指定命名空间 2&#xff0c;命名空间实战2.1&#xff0c;环境隔离2.2&#xff0c;服务隔离 二&#xff0c;配置集三&#xff0c;配置集ID…

半月内笔者暂不写时评文

今晨&#xff0c;笔者在刚恢复的《新浪微博》发布消息表态如下&#xff1a;“要开会了&#xff01;今起&#xff0c;半月内笔者暂不写敏感时评文&#xff0c;不让自媒体网管感到压力&#xff0c;也是张驰有度、识时务者为俊杰之正常选择。野钓去也。” 截图&#xff1a;来源笔者…

apple watch程序出错 Cannot launch apps while in nightstand mode

开发的时候运行apple watch程序出错&#xff1a; ailure Reason: The request was denied by service delegate (IOSSHLMainWorkspace) for reason: Busy ("Cannot launch apps while in nightstand mode"). 这是因为&#xff1a; 将Apple Watch放在充电器上并直立…

4款免费国产开源软件,功能过于强大,常被认为是外国人开发

之前小编分享了一些良心的电脑软件&#xff0c;大部分都是国外的开源软件&#xff0c;就有部分同学在后台说小编有点极端了&#xff0c;国内也是有良心的电脑软件的。 本期就是国产软件专场&#xff0c;今天就给大家推荐几款良心的国产电脑软件&#xff0c;说真的&#xff0c;…

“离职员工”试图打包资料带走,如何防止敏感数据外泄?

2010年5月间&#xff0c;某家电巨头四名前职工非法泄露该家电洗衣机重要生产和采购环节数据&#xff0c;给家电集团造成直接经济损失共计2952.35万元。 2017年1月&#xff0c;某科技巨头消费者终端业务6名员工&#xff0c;离职后拿着该企业终端的知识产权结果赚钱&#xff0c;最…