ESP32-CAM模块Arduino环境搭建测试

news2024/11/16 21:43:49

ESP32-CAM模块Arduino环境搭建测试

一.ESP32+OV2640摄像头模块CameraWebServer视频查看

二.测试ESP32-CAM(后续称cam模块)代码是否上传执行成功测试

const int led0 = 12;
const int led1 = 13;

void setup() {
    // put your setup code here, to run once:
    pinMode(led0, OUTPUT);
    pinMode(led1, OUTPUT);
}

void loop() {
    // put your main code here, to run repeatedly:
    digitalWrite(led0, HIGH);
    digitalWrite(led1, HIGH);
    delay(5000);
    digitalWrite(led0, LOW);
    digitalWrite(led1, LOW);
    delay(500);
}

PS:上叙代码是测试cam模块代码是否执行成功

二.由于之前使用的是Arduino IDE 1.8.5版本,ESP32-CAM模块上传代码后报错 Camera probe failed with error 0x105(ESP_ERR_NOT_FOUND) Camera init failed with error 0x105 , 代码如下

代码片段①

#include <esp_camera.h>

// 定义摄像头模块的引脚连接
#define CAMERA_MODEL_AI_THINKER // 如果你使用的是 AI Thinker 摄像头模块,请取消注释此行
//#define CAMERA_MODEL_M5STACK_PSRAM // 如果你使用的是 M5Stack 摄像头模块,请取消注释此行

const int ledPin = 4; // 摄像头准备拍照时闪烁的 LED 引脚

void setup() {
  Serial.begin(115200);

  // 配置摄像头模块
  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = 5;
  config.pin_d1 = 18;
  config.pin_d2 = 19;
  config.pin_d3 = 21;
  config.pin_d4 = 36;
  config.pin_d5 = 39;
  config.pin_d6 = 34;
  config.pin_d7 = 35;
  config.pin_xclk = 0;
  config.pin_pclk = 22;
  config.pin_vsync = 25;
  config.pin_href = 23;
  config.pin_sscb_sda = 26;
  config.pin_sscb_scl = 27;
  config.pin_pwdn = 32;
  config.pin_reset = -1;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_RGB565;
  config.frame_size = FRAMESIZE_QVGA; // 设置图像分辨率为QVGA

  // 摄像头初始化
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("摄像头初始化失败: %s", esp_err_to_name(err));
    return;
  }

  // 设置 LED 引脚为输出模式
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // 拍照
  camera_fb_t *fb = NULL;
  fb = esp_camera_fb_get();
  if (!fb) {
    Serial.println("获取图像缓冲区失败");
    return;
  }

  // 在串口打印图像大小
  Serial.printf("分辨率: %dx%d, 图像大小: %u bytes\n", fb->width, fb->height, fb->len);

  // 闪烁 LED 表示拍照完成
  digitalWrite(ledPin, HIGH);
  delay(500);
  digitalWrite(ledPin, LOW);

  // 释放图像缓冲区
  esp_camera_fb_return(fb);
}

ps:上叙代码片段报错 Camera probe failed with error 0x105(ESP_ERR_NOT_FOUND) Camera init failed with error 0x105,
获取图像失败!

代码片段②

#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <esp_camera.h>

// WiFi 参数
const char* ssid = "your_SSID";
const char* password = "12345678";

// 定义摄像头模块的引脚连接
#define CAMERA_MODEL_AI_THINKER // 如果你使用的是 AI Thinker 摄像头模块,请取消注释此行
//#define CAMERA_MODEL_M5STACK_PSRAM // 如果你使用的是 M5Stack 摄像头模块,请取消注释此行

// 创建 AsyncWebServer 实例
AsyncWebServer server(80);

void setup() {
  Serial.begin(115200);
  
  // 连接到 Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Wi-Fi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  
  // 配置摄像头模块
  camera_config_t config;
  // 省略摄像头配置参数设置
  
  // 摄像头初始化
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("摄像头初始化失败: %s", esp_err_to_name(err));
    return;
  }
  
  // 设置路由和处理程序
  server.on("/", HTTP_GET, handleRoot);
  server.on("/stream", HTTP_GET, handleStream);
  
  // 启动服务器
  server.begin();
  Serial.println("Server started");
}

void loop() {
  // 不需要代码
}

// 处理根路径请求的处理程序
void handleRoot(AsyncWebServerRequest* request) {
  request->send(200, "text/plain", "Hello from ESP32!");
}

// 处理图像流请求的处理程序
void handleStream(AsyncWebServerRequest* request) {
  // 设置图像类型为 multipart/x-mixed-replace
  request->sendHeader("Content-Type", "multipart/x-mixed-replace; boundary=boundary");

  while (true) {
    // 拍照
    camera_fb_t* fb = esp_camera_fb_get();
    if (!fb) {
      Serial.println("获取图像缓冲区失败");
      break;
    }
  
    // 发送图像数据
    request->send_P(200, "image/jpeg", (const char*)fb->buf, fb->len);

    // 释放图像缓冲区
    esp_camera_fb_return(fb);
  
    // 延时一段时间,控制图像刷新率
    delay(100);
  }
}


串口报错 Camera probe failed with error 0x105(ESP_ERR_NOT_FOUND) Camera init failed with error 0x105, 报错ESPAsyncWebServer.h,esp_camera.h not found , 获取图像失败!

代码片段③

#include "esp_camera.h"

// 定义摄像头配置
camera_config_t config;

void setup() {
  Serial.begin(115200);

  // 配置摄像头
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = 32;
  config.pin_d1 = 35;
  config.pin_d2 = 34;
  config.pin_d3 = 5;
  config.pin_d4 = 39;
  config.pin_d5 = 18;
  config.pin_d6 = 36;
  config.pin_d7 = 19;
  config.pin_xclk = 27;
  config.pin_pclk = 21;
  config.pin_vsync = 25;
  config.pin_href = 26;
  config.pin_sscb_sda = 22;
  config.pin_sscb_scl = 23;
  config.pin_reset = -1; // 不使用复位引脚
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;

  // 启动摄像头
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("摄像头启动失败!错误代码: 0x%x\n", err);
    return;
  }

  Serial.println("摄像头已启动!");
}

void loop() {
  // 捕获图像
  camera_fb_t *fb = esp_camera_fb_get();

  if (!fb) {
    Serial.println("获取图像失败!");
    Serial.print("fb = ");
    Serial.println((unsigned long)fb);
    return;
  }

  // 打印图像数据
  for (size_t i = 0; i < fb->len; i++) {
    Serial.write(fb->buf[i]);
  }

  // 释放图像缓存
  esp_camera_fb_return(fb);

  delay(1000); // 延迟1秒后再次捕获图像
}

上叙代码还是同样报错,导致一度怀疑摄像头是坏的

三.成功运行成功代码.

PS 后经过查询,看到很多博主教程中使用的都是Arduino 版本都是比本人使用的高,并且选择的工具开发板是AI -Thinker ESP32-CAM, 本人使用的1.8.5版本经过折腾始终没有出现AI-Thinker ESP32-CAM选项, 干脆升级到了 Arduino 2.1.0 版本
安装过程中使用魔法后依然报错Error: 2 UNKNOWN: Get “https://github.com/espressif/crosstool-NG/releases/download/esp-2021r2-patch5/xtensa-esp32-elf-gcc8_4_0-esp-2021r2-patch5-win64.zip”: dial tcp 20.205.243.166:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. 解决办法直接使浏览器贴入https://github.com/espressif/crosstool-NG/releases/download/esp-2021r2-patch5/xtensa-esp32-elf-gcc8_4_0-esp-2021r2-patch5-win64.zip, 下载下来后,粘贴到 C:\Users\Search\AppData\Local\Arduino15\staging\packages, 注:每个人电脑C:\Users\Search\路径不一样, 然后接着点击安装在这里插入图片描述
新版本 2.0.11也尝试安装但是失败
文件首选项开发板管理器地址中的https://dl.espressif.com/dl/package_esp32_index.json,经过查询最新版本只能到1.0.6
https://arduino.me/packages/esp32.json经过查看最新版本能到2.0.9
在这里插入图片描述
猜测是导致2.0.11安装失败的原因吧,

当你安装成功后
在这里插入图片描述

四.运行示例代码注意事项

在这里插入图片描述
在这里插入图片描述

验证代码过程中会报错项目太大了;阅读以下页面的提示减小文件大小。
http://www.arduino.cc/en/Guide/Troubleshooting#size
为开发板 ESP32 Wrover Module 编译时出错。
解决办法
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

C# 使用NPOI操作EXCEL

1.添加NOPI 引用->管理NuGet程序包->添加NOPI 2.相关程序集 3.

LLMs 缩放指令模型Scaling instruct models FLAN(Fine-tuned LAnguage Net,微调语言网络)

本论文介绍了FLAN&#xff08;Fine-tuned LAnguage Net&#xff0c;微调语言网络&#xff09;&#xff0c;一种指导微调方法&#xff0c;并展示了其应用结果。该研究证明&#xff0c;通过在1836个任务上微调540B PaLM模型&#xff0c;同时整合Chain-of-Thought Reasoning&#…

python分析实战(4)--获取某dou热榜

1. 分析需求 打开某音热搜&#xff0c;选择需要获取的热榜如图 查找包含热搜内容的接口返回如图 将url地址保存 2. 开发 定义请求头 headers {Cookie: 自己的cookie,Accept: application/json, text/plain, */*,Accept-Encoding: gzip, deflate,Host: www.douyin.com,…

容器管理工具-Portainer

文章目录 简介安装登陆Portainer初始化设置添加其它服务器到Portainer平台Portainer搭建Redis 简介 Docker Portainer是一个开源的容器管理工具&#xff0c;用于简化Docker容器的部署、监控和管理任务。它提供了一个直观易用的图形化用户界面&#xff0c;可以通过浏览器访问&a…

SpringBoot日志持久化以及使用lombok输出日志

上一篇文章介绍了日志级别和自定义输出日志 链接https://blog.csdn.net/qq_45875349/article/details/132510387?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132510387%22%2C%22source%22%3A%22qq_45875349%22%7D那么想要将控…

react解决死循环方法?

使用useeffect&#xff08;副作用&#xff09;方法结束这个操作 1、导入useeffect、useState 2、把下方代码写入&#xff1a;里面填写的是你要终止某个东西的代码 注意&#xff1a;不可不写&#xff0c;也可以写依赖或不写

springboot整合第三方技术邮件系统

springboot整合第三方技术邮件系统&#xff0c;发邮件是java程序的基本操作&#xff0c;springboot整合javamail其实就是简化开发。不熟悉邮件的小伙伴可以先学习完javamail的基础操作&#xff0c;再来看这一部分内容才能感触到springboot整合javamail究竟简化了哪些操作。简化…

使用锐捷RG-EG210G-E路由器实现两个IP地址冲突的局域网互通

需求背景&#xff1a; 之前写过一篇博文使用路由器实现三个不同网段局域网内的计算机相互访问&#xff0c;链接如下 https://blog.csdn.net/agang1986/article/details/131862160 当前的需求又发生了变更&#xff0c;有两个独立的局域网&#xff0c;内部的计算机个数和配置的IP…

新型数据中心网络安全体系研究

当前&#xff0c;新型基础设施建设已上升至国家战略&#xff0c;被赋予了数字化、智能化的新意义。作为算力基础设施&#xff0c;新型数据中心是信息基础设施中的重要内容&#xff0c;是数字政府、数字经济的“信息底座”&#xff0c;是未来引领数字经济发展的关键载体和支柱&a…

每日一博 - 闲聊云原生和容器编排

文章目录 概念1. 云原生&#xff08;Cloud Native&#xff09;&#xff1a;2. 容器编排&#xff08;Container Orchestration&#xff09;&#xff1a; 小结 概念 云原生和容器编排是两个不同的概念&#xff0c;但它们之间有着密切的联系。下面将分别介绍这两个概念&#xff0…

Docker搭建私有仓库并迁移

目录 方案 A、B机器安装docker 设置阿里云镜像源 安装 Docker-CE并设置为开机自动启动 A机器准备数据 拷贝数据 B机器运行redis、mysql镜像 重启docker服务 方案 准备两台机器&#xff1a;A机器&#xff08;可以连接外网&#xff09;&#xff0c;B机器&#xff08;内网机器…

Maven-Java代码格式化插件spring-javaformat

TOC 官方文档&#xff1a;点击进入 前言 项目研发过程中&#xff0c;随着团队人员的增加变更环境配置的不同&#xff0c;有些同学甚至没有格式化代码的习惯&#xff0c;导致编码风格不统一杂乱无章&#xff0c;为解决这一问题引入Spring提供的格式化代码插件。插件支持多种方…

Python|爬虫和测试|selenium框架模拟登录示例(一)

前言&#xff1a; 上一篇文章Python|爬虫和测试|selenium框架的安装和初步使用&#xff08;一&#xff09;_晚风_END的博客-CSDN博客 大概介绍了一下selenium的安装和初步使用&#xff0c;主要是打开某个网站的主页&#xff0c;基本是最基础的东西&#xff0c;那么&#xff0c;…

C++ 网络编程项目fastDFS分布式文件系统(八)--

目录 1 程序中的相关协议 1 程序中的相关协议 1. 注册 客户端 // url http: //127.0.0.1:80/reg // post 数据格式 { userName:xxxx, nickName:xxx, firstPwd:xxx, phone:xxx, email:xxx } 服务器 成功 {"code":"002"} 该用户已存在 {&q…

Mysql45讲学习笔记

前言&#xff1a;这篇文章主要总结事务&#xff0c;锁、索引的一些知识点&#xff0c;然后分享一下自己学习小心得&#xff0c;我会从点到线在到面展开说说&#xff0c;对于学习任何知识&#xff0c;我们都应该藐其全貌&#xff0c;不要一开始就选入细节 基础 一、基础架构&a…

4.Redis数据类型的编码方式

数据结构和内部编码 type 命令实际返回的就是当前键的数据结构类型&#xff0c;它们分别是&#xff1a;string&#xff08;字符串&#xff09;、list&#xff08;列表&#xff09;、hash&#xff08;哈希&#xff09;、set&#xff08;集合&#xff09;、zset&#xff08;有序…

kali安装Hashpump(简单无比)

安装 OpenSSL 开发库&#xff1a; sudo apt-get update sudo apt-get install libssl-dev克隆 Hashpump 仓库 git clone https://github.com/bwall/HashPump.git进入 HashPump 目录 cd HashPump编译并安装 Hashpump make sudo make install使用 Hashpump 工具&#xff1a; …

OLED透明屏拼接:创造更大尺寸的显示区域,提供更广阔的视觉体验

OLED透明屏拼接是一项创新技术&#xff0c;可以实现更大尺寸的显示区域和更加连续和流畅的画面效果&#xff0c;为广告、商场、零售、智能家居等领域提供更多的创意和可能。 下面将详细介绍OLED透明屏拼接的原理、优势、应用领域&#xff0c;希望看后对您了解OLED透明屏有所帮…

WPF怎么实现文件拖放功能winform怎么实现拖拽功能

WPF怎么实现文件拖放功能winform怎么实现文件拖拽功能&#xff0c;在管理员模式下wpf winform怎么实现文件的拖拽功能 WPF实现文件拖放功能&#xff0c;正常情况并没有什么问题&#xff0c;但是如果你的程序使用管理员身份启动&#xff0c;你就会发现文件拖放功能就会失效。同…