You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32-Cam摄像头与SD卡占用全部GPIO,如何腾出引脚接按键?

如何在GPIO引脚紧张的情况下腾出引脚连接按键(ESP32摄像头+SD卡场景)

需求:按下按键时拍摄照片并保存至SD卡,但当前摄像头与SD卡已占用大部分GPIO引脚,仅剩余GPIO16始终处于高电平状态,需要腾出一个引脚连接按键。
引脚分配详情:

  • SD卡:GPIO 2、4、12、13、14、15
  • 摄像头:GPIO 0
  • 串口:GPIO 1、3

可行的解决方案

1. 直接复用GPIO16(最快捷)

既然GPIO16默认高电平,可以将按键设计为下拉触发:

  • 硬件连接:按键一端接GPIO16,另一端接地
  • 修改代码逻辑适配触发方式:
    #define BTN 16
    #define LED_BUILT_IN 33
    
    int picCount = 0;
    
    void setup() {
      Serial.begin(115200);
      // 无需修改引脚模式,默认输入即可
      pinMode(LED_BUILT_IN, OUTPUT);
    
      setupSD();
      setupCamera();
    }
    
    void loop() {
      // 按下按键时GPIO16被拉低,触发拍照
      if (digitalRead(BTN) == LOW) {
        digitalWrite(LED_BUILT_IN, HIGH);
        takePicture();
        digitalWrite(LED_BUILT_IN, LOW);
        // 添加防抖延迟避免误触
        delay(200);
      }
      delay(50);
    }
    

2. 临时复用串口引脚

如果项目不需要持续串口调试,可以禁用串口将GPIO1/3改作按键:

  • 删除或注释Serial.begin(115200);
  • 修改按键定义:#define BTN 1 或 #define BTN 3
  • 后续需要调试时,重新启用串口即可,硬件无需改动

3. 调整摄像头引脚映射

部分ESP32摄像头模块支持引脚重定义,比如OV2640可以替换部分默认引脚:

  • 查看摄像头模块 datasheet,确认是否有可选引脚替代GPIO0
  • 修改setupCamera()中的摄像头配置结构体,替换GPIO0为未占用引脚(需确保模块硬件支持)

4. SD卡切换为SPI模式(减少引脚占用)

SD_MMC默认占用6个引脚,切换为SPI模式仅需4个引脚:

  • 修改SD卡初始化代码为SPI模式:
    void setupSD() {
      // 用GPIO4作为CS引脚,其他SPI引脚复用SD卡原有引脚
      if (!SD.begin(4)) {
        Serial.println("SD卡初始化失败");
        return;
      }
    }
    
  • 注意:SPI模式读写速度略低于MMC模式,但满足拍照存储需求

内容的提问来源于stack exchange,提问作者JakesMD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:39:19