废话少讲,让python让物联网简单化!
硬件:电脑1台
USB转485串口工具1个
485继电器1个
12V输出电源1个
一个负载风扇(也可以用灯、马达、电磁锁等负载代替)
编程环境:win11 pycharm步骤一:硬件接线:1接12V电源 4接USB转485串口工具 另一组12V电源负极与风扇负极连接后用胶布粘好,电源正接COM1,风扇正接NO1.
步骤二:串口测试,使用串口工具向继电器发送命令,继电器正常工作
步骤三:使用python编程
知识点:使用了pyserial串口库 使用了bytes.fromhex()方法将字符串转换为字节。
以下是代码参考
#开继电器程序
#by2309278
#开1路
"""
硬件资料示例:打开1号继电器(手动模式)
发送: 01 05 00 00 FF 00 8C 3A
原样返回:01 05 00 00 FF 00 8C 3A
备注:(1)发送帧的第1个字节代表modbus从机地址,第2个字节是功能码,modbus功能码05:写1路开关量输出(2)发送帧的第3--4个字节代表继电器地址,继电器1--继电器8的地址分别为0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007
(3)发送帧的第5--6个字节代表数据,0xFF00代表打开继电器,0x0000代表关闭继电器
"""
import serial
import time
#步骤:设置串口
#ser=serial.Serial("/dev/ttyUSB0",9600,timeout=0.5) #使用USB连接串行口
#ser=serial.Serial("/dev/ttyAMA0",9600,timeout=0.5) #使用树莓派的GPIO口连接串行口
#ser=serial.Serial(1,9600,timeout=0.5)#winsows系统使用com1口连接串行口
#ser=serial.Serial("/dev/ttyS1",9600,timeout=0.5)#Linux系统使用com1口连接串行口
ser=serial.Serial("COM8", 9600, 8, "E", timeout=50,stopbits=1)
"""
(port: str | None = None, baudrate: int = 9600, bytesize: int = 8, parity: str = "N", stopbits: float = 1, timeout: float | None = None, xonxoff: bool = False, rtscts: bool = False, write_timeout: float | None = None, dsrdtr: bool = False, inter_byte_timeout: float | None = None, exclusive: float | None = None) -> None
Initialize comm port object. If a "port" is given, then the port will be opened immediately. Otherwise a Serial port object in closed state is returned.
"""
#print(ser.name)#打印设备名称
'''
#步骤:准备发送开第1路帧
On1=" 01 05 00 00 FF 00 8C 3A"
SendON1_code=bytes.fromhex(On1)
#print(SendON1_code) #结果为b'\x01\x05\x00\x00\xff\x00\x8c:' 解析:python与串口交互格式为字节,返回符号冒号为应发字符的AscII码符号。实际硬件接收为3A
#步骤:发送开第1路码
SendON1=ser.write(SendON1_code)
time.sleep(5)#单位为秒
#继电器工作正常
'''
#步骤:关第1路
OFF1=" 01 05 00 00 00 00 cd ca"
SendOFF1_code=bytes.fromhex(OFF1)
SendOFF1=ser.write(SendOFF1_code)
#继电器关闭第1路
#步骤:关串口
ser.close(0)