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

Arduino连接Flask API报错:无法打开COM3端口权限问题求助

解决Flask API启动时COM3端口权限错误的方案

启动Flask API时出现如下权限错误:

could not open port 'COM3': PermissionError(13, 'Odmowa dostępu.', None, 5)
(注:错误信息中“Odmowa dostępu”为波兰语,意为“拒绝访问”)

结合你提供的设备管理器信息(Arduino Uno占用COM3)、已关闭Arduino IDE的操作,可尝试以下解决方案:

1. 排查其他占用COM3的程序

  • 除Arduino IDE外,串口调试助手、Putty、VS Code串口插件等工具也可能占用COM3。打开任务管理器,结束所有疑似访问串口的进程。
  • 若不确定哪个进程占用,可通过命令行排查:打开CMD执行 wmic path Win32_SerialPort get DeviceID, Description 确认端口关联设备,再用Process Explorer工具查找占用该端口的进程并结束。

2. 以管理员身份运行脚本

普通用户权限可能不足以访问系统串口资源,右键点击Python脚本或运行脚本的终端,选择「以管理员身份运行」后重试。

3. 检查串口设备权限与驱动

  • 打开设备管理器,找到「Arduino Uno (COM3)」,右键选择「属性」→「安全」选项卡,确认当前用户拥有「读取/写入」权限,若无则添加权限并应用。
  • 尝试卸载现有Arduino驱动,重新安装最新版Arduino IDE自带的驱动,确保设备被正确识别。

4. 优化代码中的串口初始化逻辑

当前代码在模块加载阶段就初始化串口,结合Flask的debug=True模式(会自动重启进程),容易导致旧进程未释放串口、新进程无法打开的问题:

  • 方案一:关闭调试模式,将app.run(debug=True)改为app.run(debug=False)测试。
  • 方案二:将串口初始化移至线程内部,并添加异常处理与资源释放逻辑,示例代码如下:
from flask import Flask, render_template, jsonify
import serial
import threading
import time

app = Flask(__name__)

motion_status = "Brak ruchu"
arduino = None  # 先初始化变量

def read_from_arduino():
    global motion_status, arduino
    try:
        arduino = serial.Serial(port='COM3', baudrate=9600, timeout=.1)
        while True:
            data = arduino.readline().decode('utf-8').strip() 
            if data:
                motion_status = data
            time.sleep(0.1)
    except Exception as e:
        print(f"串口操作错误: {e}")
    finally:
        if arduino and arduino.is_open:
            arduino.close()

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/status')
def status():
    return jsonify(status=motion_status)

if __name__ == '__main__':
    thread = threading.Thread(target=read_from_arduino)
    thread.daemon = True
    thread.start()

    app.run(debug=True)

5. 更换COM端口

若上述方法无效,可尝试修改Arduino的COM端口号:

  • 设备管理器中右键「Arduino Uno (COM3)」→「属性」→「端口设置」→「高级」→「更改COM端口号」,选择一个未被占用的端口(如COM4)。
  • 修改Python代码中serial.Serial的port参数为新端口号,重新运行脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:55:07