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

如何让Python与Arducam通过Arduino同一COM端口通信且无"Access denied"错误?

解决Arduino串口被Python与Arducam同时占用的问题

核心逻辑

串口属于独占式资源,无法让两个程序同时打开同一COM端口。必须让Arduino作为唯一的串口交互主体,由它统一协调Python指令和相机的操作流程。

方案1:修改Arduino固件,统一解析串口指令

  • 在Arduino代码中加入串口指令解析逻辑,Python仅负责发送指令(如拍照、调整参数),由Arduino调用Arducam库执行相机操作,避免Python直接抢占串口资源。
  • Arduino示例代码:
    #include <Arducam.h>
    Arducam camera;
    
    void setup() {
      Serial.begin(9600);
      camera.init(); // 仅在Arduino初始化时完成相机启动
    }
    
    void loop() {
      if (Serial.available() > 0) {
        String cmd = Serial.readStringUntil('\n');
        if (cmd == "CAPTURE") {
          camera.capture();
          Serial.println("CAPTURE_FINISHED");
        } else if (cmd == "SET_720P") {
          camera.setResolution(1280, 720);
          Serial.println("RESOLUTION_UPDATED");
        }
      }
    }
    
  • Python端仅负责指令收发:
    import serial
    ser = serial.Serial('COM3', 9600, timeout=1)
    ser.write(b"CAPTURE\n")
    result = ser.readline().decode('utf-8').strip()
    print(result)
    ser.close()
    

方案2:用软件模拟串口分流

如果Arduino有闲置IO引脚,可借助SoftwareSerial库创建虚拟串口,让Python连接虚拟串口,硬件串口留给Arducam使用。

  • 注意:软件串口波特率不宜过高(建议≤9600),避免数据丢失,适合传输指令类小数据。
  • 示例代码:
    #include <SoftwareSerial.h>
    #include <Arducam.h>
    
    SoftwareSerial pySerial(2, 3); // 定义虚拟串口的RX、TX引脚
    Arducam camera;
    
    void setup() {
      Serial.begin(115200); // 硬件串口给Arducam
      pySerial.begin(9600); // 虚拟串口给Python
      camera.init();
    }
    
    void loop() {
      if (pySerial.available() > 0) {
        String cmd = pySerial.readStringUntil('\n');
        if (cmd == "CAPTURE") {
          camera.capture();
          pySerial.println("DONE");
        }
      }
    }
    

方案3:切换Arducam的控制接口

如果你的Arducam支持I2C或SPI接口,可将相机连接到Arduino的I2C/SPI引脚,让串口完全留给Python使用。Arduino作为中间桥接,接收Python指令后通过I2C/SPI控制相机。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:06:03