esp32引脚图及其功能(esp32的flash引脚配置)

不久前,我注意到ESP32基于摄像头板称为ESP32-CAM在立创商城上,计划买一个来玩,但直到最近我看到一个教程时才有机会。我觉得这是一个很好的板子,今天的教程将重点介绍使用ESP32-CAM板构建视频流服务器。

这个ESP32-CAM非常便宜(价格不到10美元),一个基于ESP32-S芯片的小型摄像头模块人工智能思考者. 它本质上包括OV2640相机内置ESP32模块和外设(传感器和执行器)可连接的几个GPIO,以及一个microSD卡插槽,可用于存储相机的图像。突出的事实是,它是专为独立摄像头应用程序设计的,ESP32-CAM没有配备USB端口等功能,所有这些功能都可以在普通的ESP-32主板上使用。缺少USB端口也意味着缺少FTDI芯片,要对电路板进行编程,您需要使用FTDI程序员。「电路DIY」ESP32-CAM上的视频流服务器

ESP32-CAM(来源:Dealextreme)

ESP32-CAM板的一些功能如下所示:

  • 802.11b/g/n Wi-Fi BT SoC模块,支持STA/AP/STA AP工作模式
  • 低功耗32位CPU,也可以服务于应用处理器
  • 最高160MHz时钟速度,总计算能力高达600 DMIPS
  • 内置520 KB SRAM,外部4MPRAM
  • 支持UART/SPI/I2C/PWM/ADC/DAC
  • 支持OV2640和OV7670摄像头,并内置闪光灯
  • 支持图像WiFI上传
  • SD卡插槽
  • 嵌入式Lwip和FreeRTOS
  • 支持智能配置/AirKiss技术
  • 支持串行端口本地和远程固件升级(FOTA)

为了演示ESP32-CAM是如何工作的,我们将构建一个视频流服务器,它的IP地址可以从外部访问,从而从ESP32-CAM摄像头获取实时流。

这些步骤非常简单,在本教程的最后,您应该熟悉ESP32-CAM,足以用它构建一个更惊人的项目。

所需组件

本项目所需的组成部分包括:;

  1. ESP32-CAM
  2. 3.3V FTDI Programmer
  3. 跨接导线
  4. 面包板

组件可以从附加链接购买。对于FTDI,SparkFun的FTDI基本突破被使用,但是您可以决定使用任何其他类似的板3.3V逻辑电平 .

示意图

ESP32-CAM附带连接的摄像头,如果您的情况不同,您只需将摄像头连接到所提供的端口即可。这就留下了ESP32-CAM和FTDI程序员之间的联系。FTDI编程器通过UART与ESP32-CAM通信,它将连接到ESP32-CAM的UART引脚。连接如下图所示;「电路DIY」ESP32-CAM上的视频流服务器

示意图

再次检查连接,确保一切正常。

代码

我们将在这个项目中使用Arduino IDE,因此,我们需要为ESP32设置Arduino IDE和板文件。按照我们之前在鈥上写的本教程中详细介绍的步骤操作用Arduino IDE编程ESP32“去完成它

今天项目的代码基于CameraWebserverESP32库中的示例。这个项目背后的想法很简单,ESP32-CAM板被配置为一个web服务器,在网页上提供来自摄像头的实时反馈,因此与ESP在同一网络上的任何浏览器都可以通过访问该板的IP地址来查看实时提要。

代码使用esp摄像头图书馆和无线网络图书馆。这个esp摄像头库包含允许访问摄像机的功能和拍照和录制视频等功能,而ESP的无线网络库包含一些函数,这些函数允许我们将ESP32设置为web服务器。安装这些库时安装这些库ESP32 Arduino IDE公司因此,它们不需要特殊的安装过程。

像往常一样,我会对代码的某些部分做一个快速的解释,并在项目结束时提供完整的代码。

代码从包含我们将要使用的所有库开始。根据您的ESP32库/附加模块版本摄像头引脚.h文件将作为文件附着到草图,或将其内容复制到草图中。在我们的例子中,它是作为一个文件附加的,并且该文件已经被添加到下载部分下的文件中。

#include "esp_camera.h"
#include <WiFi.h>
#include "camera_pins.h"

接下来,将指定正在使用的相机的型号。在这种情况下,我们将使用人工智能思考者照相机,所以它是指定的。

// Select camera model
//#define CAMERA_MODEL_WROVER_KIT
//#define CAMERA_MODEL_ESP_EYE
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE
#define CAMERA_MODEL_AI_THINKER

接下来,我们提供要连接ESP32的访问点的凭据,并初始化StartCameraServer功能

const char* ssid = "ssid";
const char* password = "password";

void startCameraServer();

接下来是无效设置()功能。我们通过初始化串行通信来启动函数,然后配置摄像机,将其引脚设置为存储在摄像头引脚.h文件。我们还设置了频率和像素格式等设置。

camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;

接下来,我们检查电路板是否有一个PSRAM并初始化它,设置帧大小和JPEG质量。

if(psramFound()){
   config.frame_size = FRAMESIZE_UXGA;
   config.jpeg_quality = 10;
   config.fb_count = 2;
 } else {
   config.frame_size = FRAMESIZE_SVGA;
   config.jpeg_quality = 12;
   config.fb_count = 1;
 }

接下来,我们使用创建的配置初始化摄像机

// camera init
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
  Serial.printf("Camera init failed with error 0x%x", err);
  return;
}

并设置正在使用的摄影机传感器的属性。

  sensor_t * s = esp_camera_sensor_get();
  //initial sensors are flipped vertically and colors are a bit saturated
  if (s->id.PID == OV3660_PID) {
    s->set_vflip(s, 1);//flip it back
    s->set_brightness(s, 1);//up the blightness just a bit
    s->set_saturation(s, -2);//lower the saturation
  }
  //drop down frame size for higher initial frame rate
  s->set_framesize(s, FRAMESIZE_QVGA);

#if defined(CAMERA_MODEL_M5STACK_WIDE)
  s->set_vflip(s, 1);
  s->set_hmirror(s, 1);
#endif

接下来,我们使用前面提供的凭据将节点连接到接入点,并验证连接状态。

WiFi.begin(ssid, password);

 while (WiFi.status() != WL_CONNECTED) {
   delay(500);
   Serial.print(".");
 }
 Serial.println("");
 Serial.println("WiFi connected");

我们通过WiFi呼叫StartCameraServer()该功能可自动开始将摄像头馈送流至可通过板的IP地址访问的网页(显示在串行监视器上,使用Wifi.localIP())功能)

 startCameraServer();

  Serial.print("Camera Ready! Use 'http://");
  Serial.print(WiFi.localIP());
  Serial.println("' to connect");
}

这个无效循环()函数只是在每个刷新点引入一个延迟。

这个StartCameraServer()函数是ESP32库中内置的函数之一。你可以检查一下,以便更好地了解它是如何工作的。

项目的完整代码如下所示,并附在下载部分下。

#include "esp_camera.h"
#include <WiFi.h>
#include "camera_pins.h"

//
// WARNING!!! Make sure that you have either selected ESP32 Wrover Module,
//            or another board which has PSRAM enabled
//

// Select camera model
//#define CAMERA_MODEL_WROVER_KIT
//#define CAMERA_MODEL_ESP_EYE
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE
#define CAMERA_MODEL_AI_THINKER



const char* ssid = "ssid";
const char* password = "password";

void startCameraServer();

void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  Serial.println();

  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;
  //init with high specs to pre-allocate larger buffers
  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }

#if defined(CAMERA_MODEL_ESP_EYE)
  pinMode(13, INPUT_PULLUP);
  pinMode(14, INPUT_PULLUP);
#endif

  // camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }

  sensor_t * s = esp_camera_sensor_get();
  //initial sensors are flipped vertically and colors are a bit saturated
  if (s->id.PID == OV3660_PID) {
    s->set_vflip(s, 1);//flip it back
    s->set_brightness(s, 1);//up the blightness just a bit
    s->set_saturation(s, -2);//lower the saturation
  }
  //drop down frame size for higher initial frame rate
  s->set_framesize(s, FRAMESIZE_QVGA);

#if defined(CAMERA_MODEL_M5STACK_WIDE)
  s->set_vflip(s, 1);
  s->set_hmirror(s, 1);
#endif

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  startCameraServer();

  Serial.print("Camera Ready! Use 'http://");
  Serial.print(WiFi.localIP());
  Serial.println("' to connect");
}

void loop() {
  // put your main code here, to run repeatedly:
  delay(10000);
}

演示

将ESP-32 CAM连接到FTDI编程器,确保GPIO O引脚连接到GND,然后将编程器连接到您的PC,然后按照以下步骤上载代码:

  • 工具 >董事会然后选择ESP32翻转模块
  • 工具 >港口并选择ESP32/FTDI所连接的COM端口
  • 工具 >分区方案 , select巨大的应用程序(3MB无OTA) Holmium
  • 按下ESP32-CAM车载复位按钮
  • 然后,单击上载按钮上载代码

上载代码后,断开GPIO 0与GND的连接并打开串行监视器波特率为 one hundred and fifteen thousand and two hundred(与序列号。开始()功能)。按ESP板上显示的ESP-IP地址重置按钮。

「电路DIY」ESP32-CAM上的视频流服务器

IP地址

要从摄像头访问源,请在与ESP位于同一网络的设备上打开浏览器,然后在地址栏中输入ESP32-CAM IP地址。按启动流媒体按钮,您应该可以看到正在流式传输的视频。

这个项目可以取得相当大的进步。只需很少或不需要额外的编码,您就可以轻松地将项目连接到您的家庭助理,这样您就可以从家庭助理应用程序查看流,再多花一点力气和一张SD卡,我们就可以像面部识别这样做了。

就这样!请随时通过评论区与我联系有关项目的问题,也让我知道,如果你将作出任何改进。

版权声明:本文图片和内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送联系客服 举报,一经查实,本站将立刻删除,请注明出处:https://www.4kpp.com/7774.html

(0)
漫空客漫空客
上一篇 2023年4月23日
下一篇 2023年4月23日

相关推荐

  • 贷款销售好做吗(贷款销售怎么找客户)

    很多销售新人都经历过这样的苦恼:新人入职培训时,信心十足,热情高涨,可等正式上岗后,一两个月没有开一单,转正都成了困难。有的人在这个时候放弃了,留下来的人继续煎熬, 面对严厉的考核…

    2023年4月23日
    1600
  • 杨氏大宗祠(杨氏宗祠牌匾)

    杨氏大宗祠(杨氏宗祠牌匾) 杨氏大宗祠坐落于珠海南屏镇北山村,建于清同治七年,也就是1868年,距今140多年的历史,目前是珠海最大的宗祠,宗祠坐南向北,依山而建,占地面积多达88…

    2023年4月22日
    3360
  • 教你怎么远程监控老婆手机(不被对方察觉手机定位)

    教你怎么远程监控老婆手机(不被对方察觉手机定位)微信里有很多有意思的小功能,或许就在你打开的菜单里,或许就是你没有注意到。今天来看个有点意思的功能。那就是如何百思特网查看别人微信的…

    2023年4月23日
    2770
  • 怎么复读高三(复读高三大概需要多少钱)

    今天小编给各位分享怎么复读高三(复读高三大概需要多少钱),如果能碰巧解决你现在面临的问题,别忘了关注小站,我们一起开始吧! 高三可以直接去专门的复读学校吗? 高三新生可以去高考复读…

    投稿 2023年4月23日
    990
  • 圆脸怎么变瓜子脸(圆脸如何变成瓜子脸)

    今天小编给各位分享圆脸怎么变瓜子脸(圆脸如何变成瓜子脸),如果能碰巧解决你现在面临的问题,别忘了关注小站,我们一起开始吧! 如何让脸快速从圆脸变成瓜子脸? 最后,把圆脸变成瓜子脸最…

    投稿 2023年4月23日
    1000
  • 水月洞天第3部(水月洞天第3部幽冥传奇)

    今天小编给各位分享水月洞天第3部(水月洞天第3部幽冥传奇),如果能碰巧解决你现在面临的问题,别忘了关注小站,我们一起开始吧! 《水洞天月》第三部的大结局是什么? 隐月洞没有第三部。…

    投稿 2023年4月23日
    3870
  • 数字化转型推动税收治理现代化(数字化转型)

    当今世界正经历百年未有之大变局,科技创新是其中一个关键变量。 着眼未来5年乃至更长一段时期,党的十九届五中全会提出,坚持创新在我国现代化建设全局中的核心地位,把科技自立自强作为国家…

    投稿 2023年4月23日
    990
  • qq信用分怎么查看(如何查自己的信用分)

    站长之家(Chinaz.com)注:腾讯信用分上线有一段时间了,不过还有很多网友不是很清楚腾讯信用是什么,腾讯信用分又该怎查询,本文就从这两方面跟大家分享一下。 据官方介绍,腾讯信…

    2023年4月23日
    2270
  • 董事长和ceo的区别(董事长可以开除ceo吗)

    董事长,CEO,总裁,都是一些什么岗位? 1、董事长是相对于股东而言的。 有限责任公司可以设立董事会,有董事长一名。如果规模太小,也可以不设立董事会,这样就由一名执行董事来行使董事…

    2023年4月23日
    2140
  • 包含山川异域日月同天是什么意思的词条

    今天给大家介绍一下什么叫有山有水,异国风情,日月同天,以及相应的知识点。希望对你有帮助,也别忘了收藏这个站点。 什么叫山河不同,月亮一样? 中日两国历史上的佛教典故都是指山河在异地…

    投稿 2023年4月23日
    1290

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注