ESP32-WROOM-32 连接OV7670(非FIFO)实时获取图片

本文主要记录使用ESP32-WROOM-32 连接OV7670(非FIFO)实时获取图片的过程

1、硬件选择

a.ESP32-WROOM-32

b.OV7670 非FIFO

OV7670 有2个版本,带FIFO的的和不带FIFO的,我们使用的是不带FIFO的

2、接线图

我们使用杜邦线进行线路连接,接线如下

OV7670 non-FIFO

ESP32 Pin

D0

27    
D117
D216
D315
D414
D513
D612
D74
SDA21
SCL22
MCLK32
PCLK33
VS(VSYNC)34
HS(HREF)35
RSTEN
PWINNone(不接)
3.3V

3.3V

GNDGND




























 

3、编写程序

本程序I2S引用项目“ESP32 I2S Camera” (GitHub - bitluni/ESP32CameraI2S

a.打开VScode ,platformio IDE 新建一个项目,Board 选择“Espressif ESP32 Dev Module”

Framework 选择 Arduino

b.将“ESP32 I2S Camera” 项目中的 以下文件复制到src下

c、打开main.cpp 开始编写代码,代码如下:

#include <Arduino.h>
#include "OV7670.h"

#include <WiFi.h>
#include <WiFiMulti.h>
#include <WiFiClient.h>
#include "BMP.h"

const int SIOD = 21; //SDA
const int SIOC = 22; //SCL

const int VSYNC = 34;
const int HREF = 35;

const int XCLK = 32;
const int PCLK = 33;

const int D0 = 27;
const int D1 = 17;
const int D2 = 16;
const int D3 = 15;
const int D4 = 14;
const int D5 = 13;
const int D6 = 12;
const int D7 = 4;


// WIFI相关
const char* g_ssid = "ChinaNet-xxxx";
const char* g_password = "xxxxxx";
WiFiClient g_espclient;
String g_hostname = "esp32cam";

WiFiServer server(80);

OV7670 *camera;

unsigned char bmpHeader[BMP::headerSize];


void startWebServer()
{
   server.begin();
   Serial.println("Http web server started.");
}

void connectWifi();

void serve()
{

  WiFiClient client = server.available();
  if (client) 
  {
    String currentLine = "";
    while (client.connected()) 
    {
      if (client.available()) 
      {
        char c = client.read();
        //Serial.write(c);
        if (c == '\n') 
        {
          if (currentLine.length() == 0) 
          {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();
            client.print(
              "<style>body{margin: 0}\nimg{height: 120px; width:160px }</style>"
              "<img id='a' src='/camera' onload='this.style.display=\"initial\"; var b = document.getElementById(\"b\"); b.style.display=\"none\"; b.src=\"camera?\"+Date.now(); '>"
              "<img id='b' style='display: none' src='/camera' onload='this.style.display=\"initial\"; var a = document.getElementById(\"a\"); a.style.display=\"none\"; a.src=\"camera?\"+Date.now(); '>");
            client.println();
            break;
          } 
          else 
          {
            currentLine = "";
          }
        } 
        else if (c != '\r') 
        {
          currentLine += c;
        }
        
        if(currentLine.endsWith("GET /camera"))
        {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:image/bmp");
            client.println();
            
            client.write(bmpHeader, BMP::headerSize);
            client.write(camera->frame, camera->xres * camera->yres * 2);
        }
      }
    }
    // close the connection:
    client.stop();
    //Serial.println("Client Disconnected.");
  } 
}
void setup() {
  // put your setup code here, to run once:
  //打开串行端口:
  Serial.begin(115200);
  Serial.println();
  connectWifi();
  Serial.println();
  if(WiFi.status() == WL_CONNECTED){
    startWebServer();
    camera = new OV7670(OV7670::Mode::QQVGA_RGB565, SIOD, SIOC, VSYNC, HREF, XCLK, PCLK, D0, D1, D2, D3, D4, D5, D6, D7);
    BMP::construct16BitHeader(bmpHeader, camera->xres, camera->yres);
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  serve();
  camera->oneFrame();
  delay(250);
}

// 连接wifi
void connectWifi()
{
  // 初始化WIFI
  WiFi.mode(WIFI_STA);
  WiFi.begin(g_ssid, g_password);
  WiFi.setSleep(false);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print("wifi connecting...");
  }
  Serial.println("");
  Serial.println("wifi connected!");
  Serial.println("IP地址: ");
  Serial.print(WiFi.localIP());
}

d、点击编译 -->上传,打开串口监视器

e、打开浏览器输入 192.168.1.3 (具体是程序运行时候串口打印出来的地址,如上图的192.168.1.3)

ESP32-S3-WROOM-CAM开发板和ESP32-S3开发板都是基于ESP32-S3芯片的硬件平台,但它们在功能和设计上有一些区别: 1. **摄像头模块**: - **ESP32-S3-WROOM-CAM开发板**:集成了摄像头模块,通常是OV2640或OV3660摄像头。这使得它常适合用于图像和视频捕捉应用,如安防监控、智能门铃等。 - **ESP32-S3开发板**:通常不集成摄像头模块,需要外接摄像头模块才能实现图像和视频捕捉功能。 2. **尺寸和设计**: - **ESP32-S3-WROOM-CAM开发板**:由于集成了摄像头模块,尺寸通常较大,设计上也会考虑摄像头的安装和散热。 - **ESP32-S3开发板**:尺寸相对较小,设计上更加灵活,适合多种应用场景。 3. **接口和扩展性**: - **ESP32-S3-WROOM-CAM开发板**:接口设计通常围绕摄像头模块进行扩展,提供与摄像头相关的接口,如CSI接口等。 - **ESP32-S3开发板**:提供更多的通用接口,如GPIO、I2C、SPI、UART等,适合多种传感器和模块的扩展。 4. **应用场景**: - **ESP32-S3-WROOM-CAM开发板**:主要用于需要摄像头功能的场景,如家庭安防、智能门铃、智能家居等。 - **ESP32-S3开发板**:适用于需要多种传感器和模块的应用场景,如物联网设备、无线控制、数据采集等。 总结来说,ESP32-S3-WROOM-CAM开发板集成了摄像头模块,适合需要图像和视频捕捉的应用;而ESP32-S3开发板则提供了更多的通用接口和扩展性,适合多种传感器和模块的应用。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值