Windows系统python与RS485型传感器通讯
一、准备操作
1.硬件:需要准备电脑一台,RS485型传感器两个,传感器供电设备一个(与传感器供电电压一致),USB转RS485线一根
2.软件: 电脑安装python3.X版本,需要安装serial库,或者使用pycharm,Anoconda,Mu等软件都可以。RS485驱动,CRC(循环冗余校验)。
二、测试
1.通过卖家给的传感器测试软件测试传感器是否有问题。
2.通过传感器资料查看传感器问询码。
3.通过串口调试助手测试能否传感器通讯成功
4.如果重新设置传感器参数,需要重新计算校验码。
在线计算CRC链接:https://editor.csdn/md?not_checkout=1&articleId=122897495
参数模型详见传感器资料
三、程序编辑
编辑以下程序:
import serial
import time
CO = "04 03 00 02 00 01 25 9F" # 一氧化碳传感器问询帧
smoke = "03 03 00 03 00 01 75 E8" # 烟雾传感器问询帧
temp_GS = 1 # 报警标志 1 正常 0 报警
ser = serial.Serial("COM3", 9600) # 选择串口,设置波特率
def read_data(temp):
global temp_GS
if ser.is_open:
print("port open success")
# hex(16进制)转换为bytes(2进制),应注意python3.7与python2.7此处转换不同
if temp:
send_data = bytes.fromhex(CO) # 发送数据转换为b'\xff\xff\xff\xff\xff'
else:
send_data = bytes.fromhex(smoke)
ser.write(send_data) # 发送数据
time.sleep(0.1) # 延时,否则len_return_data将返回0
len_return_data = ser.inWaiting() # 将获取缓冲数据(接收数据)长度
# print(len_return_data)
if len_return_data:
return_data = ser.read(len_return_data) # 读取缓冲数据
# bytes(2进制)转换为hex(16进制),应注意python3.7与python2.7此处转换不同
str_return_data = str(return_data.hex())
# print(str_return_data)
if temp:
print("当前CO浓度为:", end="")
print(int(str_return_data[6:10], 16) / 10, end="") # 16进制转为整形 CO值
print("ppm")
if int(str_return_data[6:10], 16) > 50000:
print("当前CO浓度过高!")
temp_GS = 0
else:
print("当前烟雾状态:", end="")
if int(str_return_data[6:10]): # 16进制转为整形
print("警告")
print("起烟了!")
temp_GS = 0
else:
print("正常")
else:
print("port open failed")
def main():
read_data(1)
time.sleep(0.5)
read_data(0)
time.sleep(0.5)
if __name__ == "__main__":
# global temp_GS
while temp_GS:
main()
运行程序即可。