本文主要是介绍基于windows系统、RS485型传感器的节能灯控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、准备操作
- 二、软硬件设置
- 1.硬件连接
- 2.程序编辑
- 运行程序即可
前言
提示:这里可以添加本文要记录的大概内容:
本文章是用windows系统基于pycharm软件、RS485型传感器的节能灯开发。以下有具体工具和实现代码,仅作参考。如硬件设备一致,则可使用。
提示:以下是本篇文章正文内容,下面案例可供参考
一、准备操作
一、准备操作
1.硬件:需要准备电脑一台,人体红外RS485型传感器,灯(我使用的是24V直流灯),RS485型继电器模块,传感器供电设备一个(与传感器供电电压一致),USB转RS485线一根
2.软件: 电脑安装python3.X版本,需要安装serial库,或者使用pycharm,Anoconda,Mu等软件都可以。RS485驱动,CRC(循环冗余校验)。
二、测试
1.通过卖家给的传感器测试软件测试传感器是否有问题。
2.通过传感器资料查看传感器问询码。
3.通过串口调试助手测试能否传感器通讯成功
4.如果重新设置传感器参数,需要重新计算校验码。
在线计算CRC链接:https://editor.csdn.net/md?not_checkout=1&articleId=122897495
参数模型详见传感器资料
二、软硬件设置
1.硬件连接
此图片涉及传感器校多,因此只需看相对应的传感器部分就行,此图片仅作参考,因RS485传感器不唯一,所以使用方式不固定。
2.程序编辑
代码如下(示例):
import serial
import timelist_hw = "02 03 00 03 00 01 74 39" # 人体红外传感器问询帧
list_gz = "05 03 00 06 00 01 65 8F" # 光照传感器问询帧ser = serial.Serial("COM6", 9600) # 选择串口,设置波特率
temp_jc_hw = 0
temp_jc_gz = 0def read_data(temp) :global temp_jc_hwglobal temp_jc_gzif ser.is_open:
# print("port open success")# hex(16进制)转换为bytes(2进制),应注意python3.7与python2.7此处转换不同if temp:send_data = bytes.fromhex(list_hw) # 发送数据转换为b'\xff\x01\x00U\x00\x00V'else:send_data = bytes.fromhex(list_gz)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("当前人体红外感应状态:", end="")if int(str_return_data[6:10]): # 16进制转为整形 湿度print("有人")temp_jc_hw = 1else:print("无人")temp_jc_hw = 0else:print("当前光照度为:", end="")print(int(str_return_data[6:10], 16), end="") # 16进制转为整形 光照print("Lux")temp_jc_gz = int(str_return_data[6:10],16)print(temp_jc_gz)
def w_data() :if ser.is_open:if temp_jc_hw == 1:if temp_jc_gz < 500:send_data = bytes.fromhex("06 05 00 00 FF 00 8D 8D") # 发送数据转换为b'\xff\x01\x00U\x00\x00V'ser.write(send_data) # 发送数据time.sleep(0.1)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(int(str_return_data, 16))print("开灯")else:send_data = bytes.fromhex("06 05 00 00 00 FF 8C 3D") # 发送数据转换为b'\xff\x01\x00U\x00\x00V'ser.write(send_data) # 发送数据time.sleep(0.1)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(int(str_return_data, 16))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__" :while True:w_data()main()
运行程序即可
这篇关于基于windows系统、RS485型传感器的节能灯控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!