Python 与 RS-485 传感器设备进行串口通信, 读取数值

这篇具有很好参考价值的文章主要介绍了Python 与 RS-485 传感器设备进行串口通信, 读取数值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基础准备

  • 使用的485设备
    • https://item.taobao.com/item.htm?spm=a1z09.2.0.0.29902e8dKQTU6d&id=584607646349&_u=p208d7bb2e05dc​​​
  • 485设备资料
    • 📎导轨式温湿度传感器.pdf
  • 使用的Python库
    • pyserial(非内置库)
    • 将RS - 485传感器设备先转成RS-232, 然后将RS -232转成USB串口, 插入到串口, 即可使用电脑COM进行串口通信与485设备进行通信
  • 发送数据
    • python读取485串口数据,Python,python,物联网,iot

  • 接受数据
    • ​​​​​​​

      python读取485串口数据,Python,python,物联网,iot文章来源地址https://www.toymoban.com/news/detail-764333.html

发送命令并接收命令 - 示例

import serial

# 打开串口, COM6, 4800波特率, 8数据位, 0停止位
ser = serial.Serial('COM6', 4800, parity=serial.PARITY_NONE, bytesize=serial.EIGHTBITS, stopbits=serial.STOPBITS_ONE)

# 检查串口是否已经打开
if ser.is_open:
    print('串口已成功打开.')

# 要发送的数据(基本固定)
data_to_send = [0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0B]

# 将数据转换为字节串并发送
ser.write(bytes(data_to_send))

# 读取数据包, 分字节和功能读取, 数据位为2字节
address = ser.read(1)  # 读取地址字节
function_code = ser.read(1)  # 读取功能码字节
data_length = ser.read(1)  # 读取数据字节数字节
humidity = ser.read(2)  # 读取湿度数据(2字节)
temperature = ser.read(2)  # 读取温度数据(2字节)
crc = ser.read(2)  # 读取CRC校验(2字节)

# 将字节串转换为整数
temperature_data = int.from_bytes(temperature, byteorder='big')
humidity_value = int.from_bytes(humidity, byteorder='big')

# 温度计算
# 将温度数据转换为有符号的十进制数
if temperature_data & 0x8000:  # 如果温度数据的最高位为1
    # 温度数据的最高位为1,表示温度为负数, 则需要先取反再加1
    temperature_decimal = -(0x10000 - temperature_data)
else:
    # 温度数据的最高位为0,表示温度为正数, 直接赋值
    temperature_decimal = temperature_data

    # 计算实际温度值
temperature = temperature_decimal / 10.0  # 温度(摄氏度)

# 湿度计算
humidity_value = humidity_value / 10.0  # 湿度(%)

# 打印接收到的数据
print('地址:', address)
print('功能码:', function_code)
print('数据字节数:', data_length)
print("温度: {} °C".format(temperature))
print('湿度: {} %'.format(humidity_value))
print('CRC校验:', crc)

# 关闭串口
ser.close()

 输出结果

C:\Users\wanga\PycharmProjects\NewLandDemo\venv\Scripts\python.exe C:\Users\wanga\PycharmProjects\NewLandDemo\读取串口数据\读取485温湿度.py 
串口已成功打开.
地址: b'\x01'
功能码: b'\x03'
数据字节数: b'\x04'
温度: 28.1 °C
湿度: 61.3 %
CRC校验: b'+\xce'

进程已结束,退出代码0

技术要点

  • int.from_bytes(temperature, byteorder='big')字节转整数
    • byteorder='big'表示左边是高位, 右边是低位
  • temperature_data & 0x8000判断最高位是否为1
    • 0x8000是十六进制常数, 表示二进制为1000000000000000只有最高位为1
    • 传感器返回的数据, 最高位为标识符, 如果为1则表示数据为负数, 如果为0则表示数据为正数
    • &进行按位与操作, 要每位都为1才是1, 所以除了第一位以外, 其他位无论是1还是0结果都是0
    • 如果最后计算的结果有一位为1, Python都会输出1
	0x0118: 0000 0001 0001 1000
&	0x8000: 1000 0000 0000 0000
-----------------------
Result:		0000 0000 0000 0000
Python输出:0

	0xF118: 1111 0001 0001 1000
&	0x8000: 1000 0000 0000 0000
-----------------------
Result: 	1000 0000 0000 0000
Python输出:1
  • temperature_decimal = -(0x10000 - temperature_data)如果数据为负数, 则需要进行数据处理
    • 如果temperature_dataFF9F, 转换成十进制为65439
    • 0x10000是十六进制数, 转成十进制为65536
    • 10000(65439) - FF9F(65536) = 97此时已经是正确数据, 然后因为高位为1, 为负数, 则进行取反操作
    • 取反后则变成-97, 数据再除10就得到正确数据-9.7℃
    • 以上操作基于负数补码进行的

到了这里,关于Python 与 RS-485 传感器设备进行串口通信, 读取数值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 搬运机器人RFID传感器CNS-RFID-01|1S的RS485(MODBUS|HS协议)通讯连接方法

    搬运机器人RFID传感器CNS-RFID-01|1S支持RS485通信,可支持RS485(MODBUS RTU)协议、RS485-HS协议,广泛应用于物流仓储,立库 AGV|无人叉车|搬送机器人等领域,常用定位、驻车等,本篇重点介绍CNS-RFID-01|1S RFID传感器的RS485通信连接方法。 CNS-RFID-01|1S RFID传感器 1、RS485连接方法 用线缆

    2024年02月04日
    浏览(39)
  • STM32(HAL库)驱动SHT30温湿度传感器通过串口进行打印

    目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置  2.1.2 RCC配置 2.2 软件IIC引脚配置 2.3 串口外设配置  2.4 项目生成  3、KEIL端程序整合 3.1 串口重映射 3.2 SHT30驱动添加 3.3 主函数代 3.4 效果展示 本文通过STM32F103C8T6单片机通过HAL库方式对SHT30传感器进行数据的读取,并

    2024年02月16日
    浏览(28)
  • STM32+Zigbee模块实现串口通信获取传感器数据

    1.两个Zigbee透传模块 2.两块32板(我手上的是VET6和RCT6的两块板子),其它的板子也可以,不过注意一下启动文件对应 3.颗粒物传感器 DL-22无线串口模块 1.工作模式分为点对点和广播模式 点对点模式,要设置一个发送端,一个接收端,根据它说明书进行设置就好,还需要设置相

    2023年04月08日
    浏览(32)
  • 防爆温湿度传感器:保障工业安全环境的关键设备

    在现代工业生产过程中,安全是一项至关重要的考虑因素。特别是在危险和爆炸性环境中,保障人员和设备的安全更是至关重要。为了解决这一问题,防爆温湿度传感器应运而生。本文将详细介绍防爆温湿度传感器的工作原理、应用范围以及其在工业安全环境中的重要性。

    2024年02月12日
    浏览(39)
  • ESP32设备驱动-BMP183温度传感器驱动

    BMP183 是 BMP085 的功能兼容后继产品,BMP085 是面向消费类应用的新一代高精度数字压力传感器。 BMP183 的超低功耗、低电压电子器件针对移动电话、PDA、GPS 导航设备和户外设备的使用进行了优化。 BMP183 在快速转换时的低海拔噪声仅为 0.25 米,可提供卓越的性能。 SPI 接口允许

    2024年02月06日
    浏览(45)
  • ESP32设备驱动-DPS310气压传感器驱动

    Infineon 的 DPS310 传感器是一款高精度气压传感器,非常适合测量高度变化,精度高达 ±0.002 hPa(或 ±0.02 m)高精度模式和 ± 1 hPa 绝对精度。 这意味着您可以在设置海平面压力时以 1 = 米的精度知道您的绝对高度,并以高达 2 厘米的精度测量高度变化。 这使其成为适用于无人机

    2024年02月07日
    浏览(29)
  • 【WSN无线传感器网络恶意节点】使用 MATLAB 进行无线传感器网络部署研究

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 在无线传

    2024年02月11日
    浏览(44)
  • 人工智能在物联网设备中的传感器应用

    作者:禅与计算机程序设计艺术 随着智能化、自动化、数字化等新型产业革命的到来,物联网(IoT)已经成为一种新的经济增长点,引起了业内对其整合应用的关注。由于物联网的广泛部署,使得传感器、终端设备和云计算成为核心组成。物联网时代带来的巨大变化带来了新

    2024年02月11日
    浏览(36)
  • 基于STM32F103——XGZP6847D压力传感器+串口打印

    XGZP6847D 型压力传感器尺寸小、易安装,广泛用于医疗电子、汽车电子、消费电子、运动健身器材、 物联网等领域 Reg0x30(测量命令寄存器) Measurement_control2:0( 工作模式 ) 010b ,组合采集模式(一次温度采集后立即进行一次传感器压力信号采集)。 011b ,休眠工作模式(定期的执

    2023年04月24日
    浏览(68)
  • STM32采集问答式串口传感器数据写入SD卡(spi模式)

    STM32f103RCT6板子 问答式温湿度传感器(TTL信号) 外接SD卡模块(淘宝都差不多) 1. SD卡模块 ,采用SPI1接线 (CLK)SCK —PA5 (DATA0)MISO —PA6 (CMD)MOSI —PA7 (DATA3)CS —PA4 前面小括号里的是SDIO模式的接线,可以忽略。 2. 传感器模块 问答式TTL信号的传感器都可以, 连接到板子的串口2,

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包