VSCode + ESP-IDF 开发XIAO ESP32S3(Sense)以及摄像头camera ov2640(同样使用于乐鑫ESP32S3,以及其他系列的摄像头)(未完结)

VSCode + ESP-IDF 开发XIAO ESP32S3(Sense)以及摄像头camera ov2640(同样使用于乐鑫ESP32S3,以及其他系列的摄像头)

0 前言

别用傻逼逆天板子(原因见最后后言,不影响阅读)(暂未完结)

1 搭建环境

对照着乐鑫给出的手册来进行搭建

1.1 软件层面的准备

1.1.1 理论(看看就行)
  • 设置工具链,用于编译 ESP32-S3 代码;
  • 编译构建工具——CMake 和 Ninja 编译构建工具,用于编译 ESP32-S3 应用程序
  • 获取 ESP-IDF 软件开发框架。该框架已经基本包含 ESP32-S3 使用的 API(软件库和源代码)和运行 工具链 的脚本;
1.1.2 IDE安装(选择VSCode Extension)

跟着github上的安装

1.1.3 手动安装(选择Windows Installer)

跟着他安装就行

1.1.4 使用命令提示符来进行编译烧录

(跟着手册问题不大)

打开Windows Installer下载好的ESP-IDF(大概率在桌面),然后找到你想编译烧录的工程

  • 打开工程

在这里插入图片描述

  • 设置芯片
    在这里插入图片描述

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

  • build构建

在这里插入图片描述

  • 烧录

在这里插入图片描述

  • 监测

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.1.5 使用vscode

跟着手册构建好hello_world

然后就是手册啥都没说的配置了

  • 串口配置

在这里插入图片描述

  • 芯片配置

在这里插入图片描述

  • 构建build

在这里插入图片描述

  • 清除构建

在这里插入图片描述

  • 烧录

在这里插入图片描述

  • 构建烧录检测

在这里插入图片描述

1.1.5.1 bug(1)

在这里插入图片描述

从这里打开的终端,命令行操作的时候会有报错
在这里插入图片描述

要从这里打开
在这里插入图片描述

2 配置摄像头

可以参考官网的esp32-camera工程,但官方,真就算只给了个模块底层(也可能我fw)

2.1 espressif/esp32-camera

在这里插入图片描述

这个就是上面的bug 1.1.5.1了,需要采用下面的那个打开终端
在这里插入图片描述
在这里插入图片描述

会在main底下生成idf_component.yml
在这里插入图片描述

然后记得点开看下,是不是真加入了espressif/esp32-camera

在这里插入图片描述

2.2 PSRAM

在这里插入图片描述

这个是最难绷的,因为官方手册中给出的PSRAM在menuconfig里面的位置和真实的位置是不一样的

2.2.1 VScode自带的menuconfig(SDK配置编辑器)

就是上面那个按键
在这里插入图片描述

然后就是如果你根据官方给的那个顺序去找的话,大概率是找不到的,下面那个就是gpt给的(和官方给的类似)
在这里插入图片描述

2.2.2 命令行

先点击Component config——>ESP PSRAM——>
在这里插入图片描述
在这里插入图片描述

然后是这个画面,需要按下空格后,会出现下一个画面(也是一个很折磨人的bug)
在这里插入图片描述

2.3 对照着代码改

将官方给出的四个代码片段(在README里面)Initialization,JPEG HTTP Capture,JPEG HTTP Stream,BMP HTTP Capture分别改写成.c和.h文件添加到工程里面,四个片段的TAG都要修改,最简单的就是直接替换成.h文件名字。比如TAG——>“camera”。

改完TAG,就是要对Initialization里面的14个摄像头引脚进行修改
在这里插入图片描述

XIAO ESP32S3 SENSE的引脚定义和乐鑫的不一样,没错,逆天的不一样
在这里插入图片描述

所以需要改成这样

#define PWDN_GPIO_NUM    -1 
#define RESET_GPIO_NUM   -1 

#define XCLK_GPIO_NUM    10
#define SIOD_GPIO_NUM    40
#define SIOC_GPIO_NUM    39
#define VSYNC_GPIO_NUM   38
#define HREF_GPIO_NUM    47
#define PCLK_GPIO_NUM    13

#define Y9_GPIO_NUM      48
#define Y8_GPIO_NUM      11
#define Y7_GPIO_NUM      12
#define Y6_GPIO_NUM      14
#define Y5_GPIO_NUM      16
#define Y4_GPIO_NUM      18
#define Y3_GPIO_NUM      17
#define Y2_GPIO_NUM      15

static camera_config_t camera_config = {
    .pin_pwdn       = PWDN_GPIO_NUM,
    .pin_reset      = RESET_GPIO_NUM,
    .pin_xclk       = XCLK_GPIO_NUM,
    .pin_sccb_sda   = SIOD_GPIO_NUM,
    .pin_sccb_scl   = SIOC_GPIO_NUM,
    .pin_d7         = Y9_GPIO_NUM,
    .pin_d6         = Y8_GPIO_NUM,
    .pin_d5         = Y7_GPIO_NUM,
    .pin_d4         = Y6_GPIO_NUM,
    .pin_d3         = Y5_GPIO_NUM,
    .pin_d2         = Y4_GPIO_NUM,
    .pin_d1         = Y3_GPIO_NUM,
    .pin_d0         = Y2_GPIO_NUM,
    .pin_vsync      = VSYNC_GPIO_NUM,
    .pin_href       = HREF_GPIO_NUM,
    .pin_pclk       = PCLK_GPIO_NUM,

    .xclk_freq_hz   = 20000000, // The clock frequency of the image sensor
    .fb_location = CAMERA_FB_IN_PSRAM, // Set the frame buffer storage location
    .pixel_format   = PIXFORMAT_JPEG, // The pixel format of the image: PIXFORMAT_ + YUV422|GRAYSCALE|RGB565|JPEG
    .frame_size     = FRAMESIZE_UXGA, // The resolution size of the image: FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA
    .jpeg_quality   = 12, // The quality of the JPEG image, ranging from 0 to 63.
    .fb_count       = 2, // The number of frame buffers to use.
    .grab_mode      = CAMERA_GRAB_WHEN_EMPTY //  The image capture mode.
};

后面的.fb_count 也根据XIAO的板子进行了更改,更改成为了2

2.4 日志报错

在这里插入图片描述

(先删,后续再找ESP_LOGI的原本函数在哪再进行更改)

2.5 main.c测试代码

#include "camera.h"
#include "http_capture.h"
#include "http_stream.h"
#include "bmp_http_capture.h"

void app_main(void)
{
    if(ESP_OK != camera_init()){
        ESP_LOGI("main","error");
        printf("Restarting now.Error\n");
        return;
    }
    while(1)
    {
        ESP_LOGI("main","Taking picture...");
        camera_fb_t *pic = esp_camera_fb_get();

        ESP_LOGI("main", "Picture taken! Its size was: %zu bytes", pic->len);
        esp_camera_fb_return(pic);

        vTaskDelay(5000 / portTICK_PERIOD_MS);//原本 vTaskDelay(5000 / portTICK_RATE_MS);
    }
}

代码对照着camera_example改,里面只有一个main.c,不过我为了自己测试方便,改了些(这不重要)

2.6 camera_example改的代码报错

看底下报错提醒,将原本 vTaskDelay(5000 / portTICK_RATE_MS);改成 vTaskDelay(5000 / portTICK_PERIOD_MS);

上面2.5的代码是正确的

2.7 报错

在这里插入图片描述

这个就是你的PSRAM没Enable成功,返回2.2重新使能

2.8 PSRAM芯片未找到报错(PSRAM chip not found or not supported)

在这里插入图片描述

这个报错是最逆天的,就是,日志打印出来是告诉你芯片未找到,然后你会下意识觉得是你的引脚定义出错,或者是觉得和上面一样,XIAO的引脚定义和乐鑫的不一样,所以打开了一个底层库开始kuku乱改
在这里插入图片描述

打开了sdkconfig.old,根据这个原理图把这两个引脚改成了7与3,嘻嘻,不能用

在这里插入图片描述

查看完芯片的RAM,确实是8M,

最后发现是要将SPI RAM的模式设置为八线 IO的模式

设置方法就是紧接着2.2.2去设置如下:

在这里插入图片描述

在这里插入图片描述
改成下面这样

在这里插入图片描述

2.9 摄像头模块设置成功的日志

在这里插入图片描述

后言

XIAO ESP32S3(Sense)这块板子,集成度确实高,整体硬件研制确实足够优雅,但是!他们家最重要的datasheet放在了文档的中间,并且左侧标题并没有给出datasheet位置,以至于对照着arduino的代码去推断他们家的引脚定义,一直到我把

在这里插入图片描述

这个跑出来后,才发现他们家原来给了datasheet,在这个犄角旮旯的位置

在这里插入图片描述

发现后,才找到原来左侧有“资源”两个字,但是数据手册的标题是“For Seeed Studio XIAO ESP32S3 Sense”,甚至下面的课程资料都比他像数据手册,乐。然后在看到这个之前,一直是对着这种图一点点扣代码扣引脚:

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

给出的原理图也挺不好评价的,放个图:

在这里插入图片描述

不是那种硬件的原理图(也可能是我硬件废物吧)

  • 14
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值