环境传感器

1. 简介

这是一款专为树莓派设计的双通道RS485接口扩展板,可以实现RS485数据同时收发的操作。采用隔离收发模块实现485信号隔离,增强单路485数据传输的可靠性和抗干扰性。具有防雷防浪涌、抗瞬态电压冲击和电源隔离的电路设计特性,可以有效保护树莓派主板。扩展板使用配套的铜柱与螺丝可以非常牢固的固定在树莓派上。

2. 产品特点

3. 产品参数

4. 产品尺寸图

5. 引脚说明

标号 名称 功能描述
1 树莓派40 Pin 引脚插座 直插树莓派40 Pin引脚插针
2 RS485接口 485接口,GND、A1、B1、A2、B2分别连接其他485接口的对应端口
3 TX、RX指示灯 进行485通讯时对应端口的接收发送指示灯闪烁,TX为蓝色,RX为绿色
4 120Ω终端电阻 在远距离485通信中可能会存在信号乱码,此时需要连通120Ω电阻,正常情况连接NC即可

6.通信协议简介

6.1 RS485

典型的串行通信标准之一。

RS485 接口具有良好的抗噪声干扰性,较长的传输距离、多站能力和布线简单等优点,因而在工业上被广泛使用。

RS485 通信协议只定义了传输的电压,阻抗等电气特性,但不对软件协议给予定义。数据信号采用差分传输方式,因此具有抑制共模干扰的能力。总线收发器具有高灵敏度,能检测低至200mV的电压。RS-485用于多点互连时非常方便,可以省掉许多信号线。它使用一对双绞线,将其中一线定义为A,另一线定义为B。通常情况下,A、B之间的正电平在+2~+6V,是逻辑1状态,负电平在-2V~6V,是逻辑0状态。其最大传输距离约为1200米,传输速率与传输距离成反比,只有在很短的距离下才能获得最高速率传输。为了消除长距离通信产生的信号反射RS485需要2个终端电阻,其阻值要求等于传输电缆的特性阻抗(一般为120Ω),终端电阻需接在传输总线的两端。

6.2 ModBus

Modbus 协议是一个 master/slave 架构的协议。除 master 节点外,其他使用 Modbus 协议参与通信的节点都是 slave 节点。每一个 slave 设备都有一个唯一的 485 地址,通过该地址来识别执行命令的设备。Master发送命令时所有Slave设备都会收到命令,但只有485地址与命令中地址一致的Slave设备才会执行和回应指令(地址0例外,指定地址0的指令是广播指令,所有收到指令的设备都会运行,但不回应指令)。所有的 Modbus 命令都包含了校验码,用以确定Master发出、Slave接收到的命令没有被损坏或者丢失。ModBus 命令能指令一个终端设备改变它寄存器的某个值、控制或者读取一个 I/O 端口,以及指挥设备回送一个或者多个其寄存器中的数据。

modbus消息帧组成: 以本教程中使用的RS485激光测距传感器为例进行说明

从机地址 功能码 寄存器地址高位 寄存器地址低位 读取长度高位 读取长度低位 CRC校验高位 CRC校验低位
0x50 0x03 RegH RegL LenH LenL CRCH CRCL

传感器地址:0x50(默认);
读保持寄存器:0x03;
测量距离的寄存器地址:0x34;
读取长度:1 位;
保持寄存器:这个寄存器的单位不再是bit而是两个byte,也就是可以存放具体的数据量,并且是可读写的。传感器测量的距离数据就存放在此寄存器中。

7. 前期配置

7.1 安装库

在安装相关库之前,先使用如下命令查看python的版本号

pip -version

sudo pip install pyserial
sudo pip install modbus_tk
sudo pip3 install pyserial
sudo pip3 install modbus_tk

7.2 开启Uart接口

打开树莓派终端,输入以下指令进入配置界面

sudo raspi-config

选择Interfacing Options -> Serial Port,关闭shell访问,打开硬件串口

然后重启树莓派:

sudo reboot

找到config.txt文件的所在位置

cd /boot

打开/boot/config.txt文件,找到如下语句,如果没有,可手动添加在文件最后。

enable_uart=1

然后输入以下指令保存并退出文件

:wq

对于树莓派3B用户,串口用于蓝牙,需要注释掉:

#dtoverlay=pi3-miniuart-bt

然后重启树莓派:

sudo reboot

将树莓派配置完善后,按照端口说明对设备进行连线即可。

8. 例程演示

硬件准备

连接示意图:

8.1 下载例程

在树莓派终端运行以下两条语句下载例程到树莓派桌面:

cd Desktop
git clone https://gitee.com/DFRobot/DFRobot_CH432T_raspberrypi

在树莓派中输入以下语句找到ch432t_demo.py后双击打开,根据上面提到的modbus消息帧组成修改程序适配本次使用的485激光测距传感器:

cd /home/pi/Desktop/DFRobot_CH432T_raspberrypi/examples/

8.2 修改说明

1.

2.

3.

8.3 修改例程

修改后例程为:

from __future__ import print_function
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

import time

import modbus_tk.defines as cst
from modbus_tk import modbus_rtu

from DFRobot_CH432T import *   # Import DFRobot_CH432T replace importing serial library

addr_sensor = 0x50                            
sensor_baudrate = 115200                    

PORT="CH432T_PORT_2"
ser = DFRobot_CH432T(port=PORT, baudrate=115200, bytesize=8, parity='N', stopbits=1)

def main():
  print("This is a demo of how to use a Modbus sensor.")
  print("If you want it to work, make sure you have connected your Modbus device and changed the relevant parameters in the demo to those of your device!\r\n")

  master = modbus_rtu.RtuMaster(ser)
  master.set_timeout(5.0)
  master.set_verbose(True)
  print("ser.name = ", ser.name)

  try:
    while True:
      ser.baudrate = sensor_baudrate   
      data = master.execute(addr_sensor, cst.READ_HOLDING_REGISTERS, 0x34, 1)
      distance = data[0]/10   
      print("distance = ", distance)
      time.sleep(3)

      #ser.baudrate = relay_baudrate  

  except Exception as err:
    print(str(err))


if __name__ == "__main_

修改完成后保存退出,输入以下指令进入配置界面

sudo raspi-config

选择Interface Options -> Serial Port->SPI,启用SPI接口

然后重启树莓派

sudo reboot

在树莓派中输入以下语句找到ch432t_demo.py

cd /home/pi/Desktop/DFRobot_CH432T_raspberrypi/examples/

然后输入以下语句运行程序得到数据

python ch432t_demo.py

运行结果如下图所示:

打印出RS485激光测距传感器读取到的距离,RS485通信成功。

疑难解答

更多问题及有趣的应用,请访问论坛


更多

DFshopping_car1.png DFR0824 RS485扩展板购买链接
RS485激光测距传感器