5.6 综合案例-RTU-Part1

1.简介

 本案例通过光照温湿度变送器获取光照、温度和湿度数据。

  • 建大仁科-光照温湿度变送器参数

在这里插入图片描述

  • 设备购买链接

  链接: Hass506.

  链接: 建大仁科-光照温湿度变送器.

  • 硬件接线
     通过RS485接口将Haas506 和传感器连接起来。其中传感器中的4根线作用如下图所示:

在这里插入图片描述

在这里插入图片描述

2.测试代码

  • main.py
import utime as time
import modbus as mb
from app_htb485  import HTB485


def test_htb485():
    ret = mb.init('modbus_485_4800')
    if ret < 0:
        raise ValueError("init modbus failed.")
    htb485Obj = HTB485(mb, 1)

    while True:
        humidity = htb485Obj.getHumidity()
        temperature = htb485Obj.getTemperature()
        brightness = htb485Obj.getBrightness()
        htb = htb485Obj.getHTB()
        
        print("temperature:", temperature/10,"℃")
        print("humidity:", humidity/10,"%RH")
        print("brightness:",brightness,"lx")
        print("htb:",htb)
        time.sleep(1)
        print("----------------------")


 

if __name__=="__main__":

    test_htb485()
  • app_htb485.py
import ustruct
class HTB485(object):
 
 def __init__(self, mbObj, devAddr):
    self.mbObj = mbObj
    self.devAddr = devAddr
 
 def getHumidity(self):
    if self.mbObj is None:
        raise ValueError("invalid modbus object.")
    value = bytearray(4)
    #modbus.readHoldingRegisters(slave_addr, start_addr, reg_quantity, data, timeout)
    # (请求的从机地址;待读寄存器的起始地址;待读寄存器的数量,表示操作多少个寄存器;
    # 读寄存器获得的数据,每个寄存器包含高低两个字节,高位在前,低位在后;请求超时时间,单位是毫秒(ms))
    ret = self.mbObj.readHoldingRegisters(self.devAddr, 0, 2, value, 200)
    if ret[0] < 0:
        raise ValueError("readHoldingRegisters failed. errno:", ret[0])
        
    humidity = ustruct.unpack('hh',value)
    return humidity[0]
 
 def getTemperature(self):
    if self.mbObj is None:
        raise ValueError("invalid modbus object.")
    value = bytearray(4)
    ret = self.mbObj.readHoldingRegisters(self.devAddr, 0, 2, value, 200)
    if ret[0] < 0:
        raise ValueError("readHoldingRegisters failed. errno:", ret[0])
    temperature = ustruct.unpack('hh',value)
    return temperature[1]
 
 def getBrightness(self):
    if self.mbObj is None:
        raise ValueError("invalid modbus object.")
    value = bytearray(4)
    ret = self.mbObj.readHoldingRegisters(self.devAddr, 2, 2, value, 200)
    if ret[0] < 0:
        raise ValueError("readHoldingRegisters failed. errno:", ret[0])
    brightness = ustruct.unpack('hh',value)
    return brightness[1]
    
 def getHTB(self):
    if self.mbObj is None:
        raise ValueError("invalid modbus object.")
    value = bytearray(10)
    ret = self.mbObj.readHoldingRegisters(self.devAddr, 0, 5, value, 200)
    if ret[0] < 0:
        raise ValueError("readHoldingRegisters failed. errno:", ret[0])
    htb = ustruct.unpack('hhhhh',value)
    return htb

  • board.json

{
    "version": "1.0.0",
    "io": {
          "LED11": {
            "type": "GPIO",
            "port": 36,
            "dir": "output",
            "pull": "pullup"
        },
        "modbus_485_4800":{
          "type": "MODBUS",
          "mode": 0,
          "port": 2,
          "baudrate": 4800,
          "priority": 0,
          "timeout": 200
        },
        "modbus_485_9600": {
          "type": "MODBUS",
          "mode": 0,
          "port": 2,
          "baudrate": 9600,
          "priority": 0,
          "timeout": 200
          },
      "serial1":{
        "type":"UART",
        "port":0,
        "dataWidth":8,
        "baudRate":9600,
        
        "stopBits":1,
        "flowControl":"disable",
        "parity":"none"
      },
      "serial2":{
        "type":"UART",
        "port":1,
        "dataWidth":8,
        "baudRate":4800,
        "stopBits":1,
        "flowControl":"disable",
        "parity":"none"
      },
      "serial3":{
        "type":"UART",
        "port":2,
        "dataWidth":8,
        "baudRate":9600,
        "stopBits":1,
        "flowControl":"disable",
        "parity":"none"
      }
    },
    "debugLevel": "ERROR"
}

3.测试结果

在这里插入图片描述

4.参考资料

 链接: 建大仁科-光照温湿度变送器手册.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值