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

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

0 前言

  • 别用傻逼逆天板子(原因见最后后言,不影响阅读)
  • 这个项目的效果是,esp32s3的摄像头拍摄画面,然后通过wifi和http实时传输到web端,可以通过ip在网页端查看

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 配置wifi

在这里插入图片描述

这张图片是我整个工程的文件

可以看到官方里面给出了wifi的例程,然后如果想要达成通过wifi和http来传输图像,就需要wifi开启ap和sta两种模式(还没尝试过如果只开sta可不可以)

通俗来说,ap就是电脑连接esp32的wifi,sta就是esp32连接到路由器的wifi

2.1 wifi代码

在这里插入图片描述
上图是官方给出的ap和sta同时开启的例程,可以根据上图里面的main文件夹里面的softap_sta.c来写wifi的代码,如下

camera_wifi.c

/*
 * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Unlicense OR CC0-1.0
 */
/*  WiFi softAP & station Example

   This example code is in the Public Domain (or CC0 licensed, at your option.)

   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "esp_mac.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "esp_netif_net_stack.h"
#include "esp_netif.h"
#include "nvs_flash.h"
#include "lwip/inet.h"
#include "lwip/netdb.h"
#include "lwip/sockets.h"
#if IP_NAPT
#include "lwip/lwip_napt.h"
#endif
#include "lwip/err.h"
#include "lwip/sys.h"

/* The examples use WiFi configuration that you can set via project configuration menu.

   If you'd rather not, just change the below entries to strings with
   the config you want - ie #define EXAMPLE_ESP_WIFI_STA_SSID "mywifissid"
*/

/* STA Configuration */
#define EXAMPLE_ESP_WIFI_STA_SSID           CONFIG_ESP_WIFI_REMOTE_AP_SSID
#define EXAMPLE_ESP_WIFI_STA_PASSWD         CONFIG_ESP_WIFI_REMOTE_AP_PASSWORD
#define EXAMPLE_ESP_MAXIMUM_RETRY           CONFIG_ESP_MAXIMUM_STA_RETRY

#define CONFIG_ESP_WIFI_AUTH_OPEN 1

#if CONFIG_ESP_WIFI_AUTH_OPEN
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD   WIFI_AUTH_OPEN
#elif CONFIG_ESP_WIFI_AUTH_WEP
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD   WIFI_AUTH_WEP
#elif CONFIG_ESP_WIFI_AUTH_WPA_PSK
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD   WIFI_AUTH_WPA_PSK
#elif CONFIG_ESP_WIFI_AUTH_WPA2_PSK
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD   WIFI_AUTH_WPA2_PSK
#elif CONFIG_ESP_WIFI_AUTH_WPA_WPA2_PSK
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD   WIFI_AUTH_WPA_WPA2_PSK
#elif CONFIG_ESP_WIFI_AUTH_WPA3_PSK
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD   WIFI_AUTH_WPA3_PSK
#elif CONFIG_ESP_WIFI_AUTH_WPA2_WPA3_PSK
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD   WIFI_AUTH_WPA2_WPA3_PSK
#elif CONFIG_ESP_WIFI_AUTH_WAPI_PSK
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD   WIFI_AUTH_WAPI_PSK
#endif

/* AP Configuration */
#define EXAMPLE_ESP_WIFI_AP_SSID            CONFIG_ESP_WIFI_AP_SSID
#define EXAMPLE_ESP_WIFI_AP_PASSWD          CONFIG_ESP_WIFI_AP_PASSWORD
#define EXAMPLE_ESP_WIFI_CHANNEL            CONFIG_ESP_WIFI_AP_CHANNEL
#define EXAMPLE_MAX_STA_CONN                CONFIG_ESP_MAX_STA_CONN_AP


/* The event group allows multiple bits for each event, but we only care about two events:
 * - we are connected to the AP with an IP
 * - we failed to connect after the maximum amount of retries */
#define WIFI_CONNECTED_BIT BIT0
#define WIFI_FAIL_BIT      BIT1

static const char *TAG_AP = "WiFi SoftAP";
static const char *TAG_STA = "WiFi Sta";

static int s_retry_num = 0;

/* FreeRTOS event group to signal when we are connected/disconnected */
static EventGroupHandle_t s_wifi_event_group;

static void wifi_event_handler(void *arg, esp_event_base_t event_base,
                               int32_t event_id, void *event_data)
{
   
    if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_AP_STACONNECTED) {
   
        wifi_event_ap_staconnected_t *event = (wifi_event_ap_staconnected_t *) event_data;
        ESP_LOGI(TAG_AP, "Station "MACSTR" joined, AID=%d",
                 MAC2STR(event->mac), event->aid);
    } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_AP_STADISCONNECTED) {
   
        wifi_event_ap_stadisconnected_t *event = (wifi_event_ap_stadisconnected_t *) event_data;
        ESP_LOGI(TAG_AP, "Station "MACSTR" left, AID=%d",
                 MAC2STR(event->mac), event->aid);
    } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {
   
        esp_wifi_connect();
        ESP_LOGI(TAG_STA, "Station started");
    } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {
   
        ip_event_got_ip_t *event = (ip_event_got_ip_t *) event_data;
        ESP_LOGI(TAG_STA, "Got IP:" IPSTR, IP2STR(&event->ip_info.ip));
        s_retry_num = 0;
        xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
    }
}

/* Initialize soft AP */
esp_netif_t *wifi_init_softap(void)
{
   
    esp_netif_t *esp_netif_ap = esp_netif_create_default_wifi_ap
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值