ESP32-CAM模块Arduino环境搭建测试
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-FiWiFi.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-replacerequest->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 编译时出错。
解决办法
相关文章:
ESP32-CAM模块Arduino环境搭建测试
ESP32-CAM模块Arduino环境搭建测试 一.ESP32OV2640摄像头模块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);pin…...
webassembly001 webassembly简述
WebAssembly 官方地址:https://webassembly.org/相关历史 https://en.wikipedia.org/wiki/WebAssembly https://brendaneich.com/2015/06/from-asm-js-to-webassembly/WebAssembly(缩写为Wasm)是一种基于堆栈的虚拟机的二进制指令格式。Wasm 被设计为编…...
vue 使用C-Lodop打印小票
先从官网下载js文件 https://www.lodop.net/LodopDemo.html 打开安装程序,一直下一步既可,我这边已经安装过就不演示了。 // 引入 import { getLodop } from /utils/CLodopfuncs.js;// 使用 let LODOP getLodop()let Count LODOP.GET_PRINTER_COUNT…...
【C++进阶(二)】STL大法--vector的深度剖析以及模拟实现
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:C从入门到精通⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你学习C 🔝🔝 vector 1. 前言2. 熟悉vector的接口函数2.1 vec…...
1. import pandas as pd 导入库
【目录】 文章目录 1. import pandas as pd 导入库1. pandas库的概念2. 导入pandas库2.1 常规导入2.2 别名导入 3. 别名的作用4. 课堂练习 【正文】 1. import pandas as pd 导入库 【学习时间】 10分钟 1. pandas库的概念 pandas:熊猫panda的复数, …...
DMK5框选变量之后不显示其他位置的此变量高亮
使用软件MDK5.3.8版本 如下在2的位置选择之后,其他同样的变量没有高亮,因为1的原因折叠了; 展开折叠之后就可以了...
0061__Appium
Appium Documentation - Appium Documentation APP自动化测试(3)-Appium Inspector介绍_六天测试工程师的博客-CSDN博客 https://github.com/appium/appium-inspector https://github.com/appium/appium-desktop https://github.com/appium/appium...
【DEVOPS】需求跟踪管理全面落地
0. 目录 1. 现状/背景2. 需求管理存在的问题3. 改进思路/措施4. 所谓"禅道尚未普及/铺开"5. 最后6. 相关 1. 现状/背景 近期又被领导问到"如何对项目过程中的需求进行量化和跟踪管理"。这真是一个狗皮膏药似的问题,反反复复地,隔一…...
算法修炼Day57|647. 回文子串 ● 516.最长回文子序列
LeetCode:647. 回文子串 647. 回文子串 - 力扣(LeetCode) 1.思路 暴力思路见对应代码… 动规解法:画图推导动规公式,当前状态由左侧和左下角推出,所以首层应该采用倒序的方式,内部采用正序的方式。 2.…...
呈现数据的精妙之道:选择合适的可视化方法
在当今数据时代,数据可视化已成为理解和传达信息的重要手段。然而,选择适合的数据可视化方法对于有效地呈现数据至关重要。不同的数据和目标需要不同的可视化方法,下面我们将探讨如何选择最佳的数据可视化方法来呈现数据。 1. 理解数据类型&a…...
数据结构(Java实现)-java对象的比较
元素的比较 基本类型的比较 在Java中,基本类型的对象可以直接比较大小。 对象比较的问题 Java中引用类型的变量不能直接按照 > 或者 < 方式进行比较 默认情况下调用的就是equal方法,但是该方法的比较规则是:没有比较引用变量引用对象的…...
Wolfram Mathematica 13 for Mac 数学计算工具
Wolfram Mathematica for Mac是一款功能强大、划时代的科学计算软件。它结合了数字和符号计算引擎、图形系统、编程语言、文本系统以及与其他应用程序的高级连接,在许多功能方面处于世界领先地位,截至2009年,它是使用最广泛的数学软件之一。人…...
系统架构设计高级技能 · Web架构
现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 点击进入系列文章目录 系统架构设计高级技能 Web架构 一、Web架构介绍1.1 Web架构涉及技术1.2 单台服务…...
再写CentOS7升级OpenSSL-1.0.1U
本文在CentOS7.4以及TencentOS 2.4上测试通过。 原系统自带OpenSSL 1.0.2k-fips。 编译安装方法跟之前的没啥区别。 从官网下载1.0.1u版https://www.openssl.org/source/ 使用tar解包 tar xfz openssl-1.0.1u.tar.gz 依次执行如下: cd openssl-1.0.1u ./con…...
HBase--技术文档--基本概念--《快速扫盲》
官网 Apache HBase – Apache HBase™ Home 阿里云hbase 云数据库HBase_大数据存储_订单风控_数据库-阿里云 云数据库 HBase-阿里云帮助中心 基本概念 HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。它基于Hadoop,采用列式存储方式,可…...
如何利用SFTP协议远程实现更安全的文件传输 ——【内网穿透】
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《高效编程技巧》《cpolar》 ⛺️生活的理想,就是为了理想的生活! 文章目录 1. 安装openSSH1.1 安装SSH1.2 启动ssh 2. 安装cpolar2.1 配置termux服务 3. 远程SFTP连接配置3.1 查看生成的随机公…...
深度学习8:详解生成对抗网络原理
目录 大纲 生成随机变量 可以伪随机生成均匀随机变量 随机变量表示为操作或过程的结果 逆变换方法 生成模型 我们试图生成非常复杂的随机变量…… …所以让我们使用神经网络的变换方法作为函数! 生成匹配网络 培养生成模型 比较基于样本的两个概率分布 …...
sql入门-多表查询
案例涉及表 ----------------------------------建表语句之前翻看之前博客文章 多表查询 -- 学生表 create table studen ( id int primary key auto_increment comment id, name varchar(50) comment 姓名, no varchar(10) comment 学号 ) comment 学生表; insert…...
软考A计划-网络工程师-必考知识点-上
点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…...
kafka复习:(17)seekToBeginning的用法
从分区的开始进行消费,因为kafka会定期清理历史数据,所以分区开始的位移不一定为0。seekToBeginning只是从目前保留的数据中最小的offset进行消费 package com.cisdi.dsp.modules.metaAnalysis.rest.kafka2023;import org.apache.kafka.clients.consume…...
C# textBox1.Text=““与textBox1.Clear()的区别
一、区别 textbox.Text "" 和 textbox.Clear() 都可以用于清空文本框的内容,但它们之间有一些细微的区别。 textbox.Text "": 这种方式会将文本框的 Text 属性直接设置为空字符串。这样会立即清除文本框的内容,并将文本框显示为空…...
CnetSDK .NET OCR SDK Crack
CnetSDK .NET OCR SDK Crack CnetSDK.NET OCR库SDK是一款高度准确的.NET OCR扫描仪软件,用于使用手写、文本和其他符号等图像进行字符识别。它是一款.NET OCR库软件,使用Tesseract OCR引擎技术,可将字符识别准确率提高99%。通过将此.NET OCR扫…...
Python最新面试题汇总及答案
一、基础部分 1、什么是Python?为什么它会如此流行?Python是一种解释的、高级的、通用的编程语言。Python的设计理念是通过使用必要的空格与空行,增强代码的可读性。它之所以受欢迎,就是因为它具有简单易用的语法 2、为什么Pytho…...
设计模式(单例模式,工厂模式),线程池
目录 什么是设计模式? 单例模式 饿汉模式 懒汉模式 工厂模式 线程池 线程池种类 ThreadPoolExcutor的构造方法: 手动实现一个线程池 什么是设计模式? 计算机行业程序员水平层次不齐,为了让所有人都能够写出规范的代码,于是就有了设计模式,针对一些典型的场景,给出一…...
在mybatis中的mapper.xml中如何使用parameterType实现方法单个传参,对象传参,多参数传参.
在MyBatis的mapper.xml文件中,可以使用parameterType属性来指定方法的参数类型。parameterType属性用于指定传递给映射方法的参数类型,这将影响到MyBatis在映射方法执行时如何处理参数。 以下是三种不同情况下如何在mapper.xml中使用parameterType实现方…...
No120.精选前端面试题,享受每天的挑战和学习
文章目录 浏览器强制缓存和协商缓存cookie,localStorage、sessionStoragejs闭包,原型,原型链箭头函数和普通函数的区别promise的状态扭转 浏览器强制缓存和协商缓存 浏览器缓存是浏览器用于提高网页加载速度的一种机制。浏览器缓存分为强制缓…...
c# 访问sqlServer数据库时的连接字符串
//sql server 身份验证的场合, 连接字符串 private string ConnstrSqlServer "server服务器名称;uid登录名称;pwd登录密码;database数据库名称"; //windows 身份验证连接字符串 private string ConnstrWindows "server服务器名称;database数据库…...
排序算法概述
1.排序算法分类 **比较类算法排序:**通过比较来决定元素的时间复杂度的相对次序,由于其时间复杂度不能突破 O ( n l o g n ) O(nlogn) O(nlogn),因此也称为非线性时间比较类算法 **非比较类算法排序:**不通过比较来决定元素间的…...
ChatGPT在高等教育中的应用利弊探讨
人工智能在教育领域的应用日益广泛。2022年11月OpenAI开发的聊天机器人ChatGPT在全球范围内流传开来,其中用户数量最多的国家是美国(15.22%)。由于ChatGPT应用广泛,具有类似人类回答问题的能力,它正在成为许多学生和教育工作者的可信赖伙伴…...
Java之API详解之Runtime的详细解析
3.1 概述 Runtime表示Java中运行时对象,可以获取到程序运行时设计到的一些信息 3.2 常见方法 常见方法介绍 我们要学习的Object类中的常见方法如下所示: public static Runtime getRuntime() //当前系统的运行环境对象 public void exit(int statu…...
五河网站建设哪家好/整站排名
什么是TimelineView 更紧凑的TimelineView定义 与样式类似,SwiftUI 团队正在推动我们为新的TimelineView. 从 Xcode 13b3 开始,这会生成弃用警告: TimelineView(EveryMinuteTimelineSchedule()) { context inText(context.date.descriptio…...
企业网站建设咨询/推广运营公司哪家好
表存储方案 行存储、列存储的建表语句 表的行/列存储通过表定义的orientation属性定义。当指定orientation属性为row时,表为行存储;当指定orientation属性为column时,表为列存储;如果不指定,默认为行存储 行存储&…...
宜春网站制作/网络推广赚钱平台有哪些
工控机安装 openvino2021.4 需要安装python 就安装了python3.8.8 但是直接报错 安装不上去 在网上找了各种方法,最后安装了KB2533623 之后可以安装python了 下载地址 链接: https://pan.baidu.com/s/15KpcRN2w5v7xQtaFm7JlMw?pwdaxs6 提取码: axs6 或者 KB25…...
WordPress做的网站源代码/网上有卖网站链接的吗
1,在wind搭建VisualSVN Server Manager 由于好几次启动server都找不到项目分支。解决办法:卸载重装之后项目出现,服务器项目不会消失。 2,sql更新语句 update DyMyOrderWTCE(表1) dy set dy.cesdzt (se…...
wordpress 容易/网上营销方式和方法
函数的嵌套: 在函数内部定义函数就是函数的嵌套 def func1(): pass def func2(): pass 闭包: example: def funcx(x): def funcy&…...
东台建设企业网站/如何优化搜索引擎的搜索功能
数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。算法是为求解一个问题需要遵循的、被清楚指定的简单指令的集合。下面是自己整理的常用数据结构与算法相关内容,如有错误,欢迎指出。 为了…...