Python控制Numado继电器时COM端口连接报错求助
排查与解决Numato继电器串口连接报错问题
先看你遇到的serial.serialutil.SerialException: could not open port 'COM4': FileNotFoundError,核心问题是系统找不到你指定的COM4端口,下面一步步排查解决:
1. 先确认COM端口号是否正确
你写的COM4不一定是继电器实际占用的端口,别凭记忆猜,去设备管理器查:
- Windows:右键此电脑 → 管理 → 设备管理器 → 展开「端口(COM和LPT)」,找到Numato继电器对应的端口(通常会显示“USB Serial Port (COMx)”),把代码里的
portName改成实际的COM号,比如COM3。 - 注意:拔插USB设备后端口号可能变化,每次连接后最好重新确认。
2. 检查设备连接与驱动
如果设备管理器里根本看不到对应的COM端口,那是系统没识别到设备:
- 先换个USB口试试,避免供电不足或接口接触不良;
- 安装Numato继电器的驱动:大部分型号用的是CH340/CH341芯片驱动,安装对应驱动后重启电脑,再看设备管理器应该就能看到COM端口了。
3. 权限问题(容易忽略)
即使端口号正确,没有权限也会导致无法打开:
- Windows:右键你的Python IDE(比如VS Code、PyCharm)或命令提示符,选择「以管理员身份运行」,再执行代码;
- Linux/macOS:当前用户需要加入串口权限组,执行命令:
注销再重新登录后,权限就生效了。sudo usermod -a -G dialout $USER
4. 代码里的潜在小问题(提前规避后续报错)
当前报错是端口问题,但你的代码还有两个需要调整的地方:
- 没导入
serial模块:开头必须加import serial,否则运行到serial.Serial会直接报错; - Python3中
serial.write需要字节串:你直接传字符串会报错,要把命令编码成bytes,修改后的代码如下:
另外,有些Numato型号只需要import serial portName = "COM4"; relayNum = 0; relayCmd = "on"; #Open port for communication serPort = serial.Serial(portName, 19200, timeout=1) #Send the command(编码成字节串) serPort.write(("relay "+ relayCmd +" "+ str(relayNum) + "\n").encode('ascii')) print("Command sent...") #Close the port serPort.close()\n换行,不需要\n\r,改成\n兼容性更好。
按上面的步骤排查,应该能解决端口找不到的问题。
内容的提问来源于stack exchange,提问作者Urmi Bose
相关产品推荐
相关产品推荐

