1. Introduction
This dual-channel RS-485 expansion HAT designed for Raspberry Pi adopts an isolated transceiver to achieve isolation for RS-485, which increases the reliability and anti-interference of data transmission in each channel. And it features embedded protection circuits such as lightning & surge protector, TVS diode, and power supply isolation to protect the Raspberry Pi mainboard effectively.
Besides, the order includes a screw accessory kit that allows users to tightly fix this board onto a Raspberry Pi controller.
2. Features
- Dual-channel RS-485
- Data TX/RX indicator
- Lightning & surge protection
- Power supply isolation
3. Specification
- Operating Voltage: 3.3V
- RS-485 Transceiver: TP75176E
- Serial Chip: CH432T
- RS-485 Communication Interface × 2
- 120Ω Terminal Resistor × 2
- PWR Indicator: red
- TX Signal Indicator: blue
- RX Signal Indicator: green
- RS-485 Wiring Method: 3Pin 5.08 pluggable terminal block
- Supported Raspberry Pi Model: 3B+, 4B
- Fixed Through-hole Diameter: 2.5mm
- Dimension: 65mmx56mm/2.56×2.20"
4. Dimensions
5. Board Overview
Num | Label | Description |
---|---|---|
1 | Raspberry Pi 40 Pin Header | DIP Raspberry Pi 40 Pin Header |
2 | RS-485 Interface | RS-485 interface, GND, A1, B1, A2, B2 are connected to the corresponding RS485 port respectively |
3 | TX/RX Indicator | The RX/TX indicator of the corresponding port will flash during RS-485 communication, TX for blue and RX for green |
4 | 120Ω Terminal Resistor | There may be a garbled signal during long-distance RS-485 communication, at this time the 120Ω resistor should be connected. In normal cases, just put it to NC. |
6. Introduction to Communication Protocols
6.1 RS485
RS-485 is one of the typical serial communication standards.
And the RS-485 interface features good noise rejection, long transmission distance, multidrop capability, simple wiring, and other advantages, so it is widely used in industrial applications.
RS-485 communication protocol only defines transmission voltage, impedance and other electrical characteristics, but does not define the software protocol. It transmits data signals using differential transmission method, which makes it able to suppress common-mode interference. And the bus transceiver has high sensitivity and can detect voltages as low as 200mV. In addition, it's very convenient for users when using RS-485 for multi-point interconnection as it can save a lot of signal lines.
RS-485 uses a pair of twisted-pair cables often defined as A and B respectively. Generally, the positive level between the transmitting drivers A and B is +2 - +6V, which is a positive 1
logic state; the negative level is -2 - 6V, which is a negative 0
logic state. And it's transmission distance can reach up to about 1200 meters, and the transmission rate is inversely proportional to the distance. The highest rate can only be obtained at very short distance. To eliminate signal reflection from long-distance communication, RS-485 requires 2 terminal resistors, and their resistance values must be equal to the characteristic impedance(generally 120Ω) of the transmission cable. Meanwhile, the terminal resistor needs to be connected to the two ends of the transmission bus.
6.2 ModBus
The Modbus protocol is a master/slave architecture protocol. Except for the master node, all nodes that use Modbus protocol for communication are slave nodes. Each slave device has a unique RS-485 address, through which the device that executes a ModBus command can be recognized. When the master sends a command, all slave devices will receive it, but only the one with the same RS-485 address as in the command will execute and respond to it (address 0 is an exception, since the command to designate address 0 is a broadcast one, all devices that receive the command will run but not respond to it).
All Modbus commands include the check code used to ensure that the command sent by Master and received by Slave isn't damaged or lost. Basic Modbus commands can instruct an RTU to change a value in one of its registers, control or read an I/O port, and command the device to send back one or more data contained in its registers.
Modbus frame format: here we take the RS485 laser ranging sensor as an example.
Slave Address | Function Code | Register Address High-bit | Register Address Low-bit | Read Length High-bit | Read Length Low-bit | CRC High-bit | CRC Low-bit |
---|---|---|---|---|---|---|---|
0x50 | 0x03 | RegH | RegL | LenH | LenL | CRCH | CRCL |
Sensor address: 0x50 (default);
Read holding register: 0x03;
Address of register for measuring distance: 0x34;
Read length: 1 bit;
Holding register: The unit of the register is not a bit but two bytes, which means that it can store a specific amount of data that can be read and written. The distance data measured by the sensor is stored in this register.
7. Configuration
7.1 Install Library
Check the python version number using the command below before installing the relevant library.
pip -version
- The commands to build the environment for the version below python3 are as follows
sudo pip install pyserial
sudo pip install modbus_tk
- The commands to build the environment for python3 are as follows
sudo pip3 install pyserial
sudo pip3 install modbus_tk
7.2 Enable UART
Open the Raspberry Pi terminal and enter the command below to access the configuration interface.
sudo raspi-config
Select Interfacing Options -> Serial Port, disable shell access and enable hardware serial port
Reboot Raspberry Pi:
sudo reboot
Find the location of the config.txt file
cd /boot
Open the /boot/config.txt file and find the statement below, if there is not, you can add it at the end of the file.
enable_uart=1
Then enter the command below to save and exit the file
:wq
For Raspberry Pi 3B users, the serial port is used for Bluetooth and needs to be commented out:
#dtoverlay=pi3-miniuart-bt
Reboot Raspberry Pi
sudo reboot
Make wire connections for the device according to the port instructions when Raspberry Pi is fully configured.
8. Program Demonstration
Hardware Requirements
- RS485 Laser Ranging Sensor x 1
- Raspberry Pi 4 Model B - 8GB x 1
- 5V Power Supply
Connection Diagram
8.1 Download Routine
Run the two statements below in the Raspberry Pi terminal to download the routine to the Raspberry Pi desktop.
cd Desktop
git clone https://gitee.com/DFRobot/DFRobot_CH432T_raspberrypi
Enter the statement below in Raspberry Pi to find ch432t_demo.py and double click to open it. Modify the program to adapt it for the RS485 laser ranging sensor used here according to the Modbus frame format above.
cd /home/pi/Desktop/DFRobot_CH432T_raspberrypi/examples/
8.2 Instructions for Change
1.
2.
3.
8.3 Change Program
The modified codes:
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_
Save and exit after completing changing, and enter the command below to enter the config interface.
sudo raspi-config
Select Interface Options -> Serial Port -> SPI to enable the SPI interface
Then reboot Raspberry Pi
sudo reboot
Enter the statement below in Raspberry Pi to find ch432t_demo.py.
cd /home/pi/Desktop/DFRobot_CH432T_raspberrypi/examples/
Enter the statement below to run the program and get data.
python ch432t_demo.py
The result is as shown in the figure below:
The distance read by the RS485 laser ranging sensor can be printed out, which means the RS485 communication is successful.
FAQ
For any questions, advice or cool ideas to share, please visit the DFRobot Forum.