USB转I2C适配器B0CFK14PVS与PCF8574 Windows下通信故障求助
问题分析与解决方案
核心问题拆解
你遇到的问题本质是树莓派原生I2C总线操作逻辑,无法直接套用到RS232转I2C模块上:树莓派可以直接控制I2C电平信号,但Windows下的RS232转I2C模块(B0CFK14PVS)需要接收特定格式的串口命令,才能将串口指令转换为I2C总线操作。你的代码直接模拟I2C起始/停止信号的字节(\x02/\x03),模块无法识别,自然无法通信。
此外代码本身还有几处明显错误:
- 循环打印笔误:
print ("i " + str (1))应为print("i " + str(i)) - PCF8574写入逻辑错误:PCF8574是8位端口,需将8个bit拼成1字节发送,而非发送8个字节的列表
- 串口初始化缺少关键参数:未设置奇偶校验、停止位、超时等模块要求的参数
分步解决方案
1. 先确认RS232转I2C模块的通信协议
必须找到该模块的官方指令文档,不同厂商的RS232转I2C模块命令格式差异极大,常见格式示例:
- 写操作命令帧:
[起始符] [操作码(写)] [I2C设备地址左移1位+写位] [数据长度] [数据字节] [结束符] - 例如某模块用
0xAA作为起始符,0x00为写操作码,0x0D为结束符,命令格式为:0xAA 0x00 0x40 0x01 0x00 0x0D(对应地址0x20的PCF8574写入0x00)
如果找不到官方文档,可用串口助手(如SSCOM)手动发送测试命令,验证模块响应逻辑。
2. 修正后的Python代码示例
以下代码基于通用RS232转I2C模块协议编写,需根据你的模块指令格式调整命令帧:
import serial import time # 设备管理器中确认正确的COM口 port = "COM1" baud_rate = 115200 # 按模块要求设置串口参数(通常为8N1) ser = serial.Serial( port=port, baudrate=baud_rate, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 # 添加超时避免阻塞 ) pcf8574_address = 0x20 # 根据A0-A2接线调整 def pcf8574_write(output_byte): """向PCF8574写入1字节数据,需替换为你的模块命令格式""" # 示例命令帧(需根据模块文档修改) command = bytearray([ 0xAA, # 模块命令起始符 0x00, # I2C写操作码 (pcf8574_address << 1) | 0x00, # I2C写地址(左移1位+写位0) 0x01, # 数据长度(PCF8574仅需1字节) output_byte, # 要写入的8位端口值 0x0D # 命令结束符(回车) ]) ser.write(command) # 可选:读取模块响应,调试用 response = ser.read(ser.in_waiting) if response: print(f"模块响应: {response.hex()}") def write_coils(vector): """将8位继电器状态转换为PCF8574的输出字节""" try: # PCF8574通常为灌电流输出,低电平触发继电器,这里反转输入状态 output_byte = 0 for bit in reversed(vector): output_byte = (output_byte << 1) | (1 - bit) print(f"待写入字节: 0x{output_byte:02X}") pcf8574_write(output_byte) except Exception as e: print(f"write_coils错误: {str(e)}") # 主循环,交替切换继电器状态 try: while True: write_coils([1,0,1,0,1,0,1,0]) time.sleep(0.5) write_coils([0,1,0,1,0,1,0,1]) time.sleep(0.5) finally: ser.close() # 程序结束时关闭串口
3. 硬件与调试排查
- 串口驱动与端口检查:确认CH341SER驱动安装正常,设备管理器中COM口无黄色感叹号,且端口号与代码一致
- 硬件接线验证:确认PCF8574的A0-A2接线对应地址0x20,继电器板电源、信号线连接正确
- 串口助手调试:先用串口助手发送手动构造的写命令,验证继电器是否动作,确认协议正确后再写入代码
内容的提问来源于stack exchange,提问作者F Casian
相关产品推荐
相关产品推荐

