The wind direction sensor is a professional meteorological instrument used to measure horizontal wind direction. It integrates a hall sensor inside. The shell and weather vane are made of aluminum alloy material and use special mold precision die casting process, featuring small dimension tolerance and high surface accuracy. The sensor internal circuit is protected, which makes the sensor have the properties of high strength, weather resistance, anti-corrosion, and waterproof. The cable connector adopts corrosion-resistant military plug that ensures the long service life of the product.

A low-inertia wind vane is used to sense the wind direction. When the wind direction changes, the tail wing rotates to drive the axle magnet to rotate through the shaft, thereby obtaining accurate wind direction information. It can detect the 16 azimuths natural wind directions. This high-cost performance sensor can be widely used in meteorology, ocean, environment, airports, ports, laboratories, industry, agriculture and transportation.





1. Wire Color Description

Color Function
Red Positive
Black Negative
Yellow RS485+/A/T+
Green RS485-/B/T-

2. Installation Instruction

The white dot on the sensor must face true north in installation.

3. Modbus Protocol

Parameter Register Add Function Type Function No. Parameter Range & Description Default Value
Wind Direction Value 0x0000 INT16 RO 0x03/reading 0-15 None
Modbus Slave Address 0x1000 INT16 reading-and-writing 0x03/reading0x10/writing 0-255 2
Wind Direction Value
Parameter Range 0-15 Default Value: none
Parameter Storage None

Modbus address, can be set to 0-255. Use 0 address to set any address, after setting, you need to re-power on and restart the module to make this address take effect

  1. Read register 0x0000, that is the measuring value of the wind direction

Host query frame (hexadecimal): 02 03 00 00 00 01 84 39 (8byt)

Slave Add Function Code Register Start Add Length of Register High Bit of Check Code Low Bit of Check Code
1byt 1byt 2byt 2byt 1byt 1byt
0×02 0x03 0x00 0x00 0x00 0x01 0x84 0x39

Slave response frame (hexadecimal): 02 03 02 00 03 BC 45 (7byt)

Slave Add Function Code Number of Valid Bytes Data Aera High Bit of Check Code Low Bit of Check Code
1byt 1byt 1byt 2byt 1byt 1byt
0×02 0x03 0x02 0x00 0x03 0xBC 0x45

16 azimuth value=00 03=3, corresponding to the table below to get the azimuth as northeast by east.

Value 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Direction North Northeast by north Northeast Northeast by east East Southeast by east Southeast Southeast by south South Southwest by south Southwest Southwest by west West Northwest by west Northwest Northwest by north
  1. Modify register 0x1000, which is the Modbus slave address (ADDRESS)
Slave Add Function Code Register Start Add Length of Register Number of Valid Bytes Slave Address Written-in High Bit of Check Code Low Bit of Check Code
1byt 1byt 2byt 2byt 1byt 2byt 1byt 1byt
0x00 0x10 0x10 0x00 0x00 0x01 0x02 0x00 0x03 FA 00

Slave response frame (hexadecimal): 00 10 10 00 00 01 04 D8 (7byt), that is, the modification is successful. After setting, you need to re-power on and restart the transmitter to make this address take effect.

Using in Raspberry Pi

1. Connection

Here USB to RS485 Module is used.

2. Install libraries and download routines

Type the following commands in the terminal one by one

cd /tmp
wget   //Download wiringpi library
sudo dpkg -i wiringpi-latest.deb  //Install wiringpi library
cd .....                                                     //Enter the content you want to save file in
git clone     //Download program in github
cd RS485_Wind_Direction_Transmitter/

3. API Function List

  @brief  initialize serial port
  @param  device Address of serial port,In Linux, it is the directory where the device is located.
  @return  Return 1 for initialization failure, and return 0 for initialization success
unsigned char Init(char *device);

  @brief  Modify address
  @param  Address1 For the current address, you can set any address with 0 address
  @param  Address2 The modified address.
  @return  A return value of 1 indicates success, and a return value of 0 indicates failure
unsigned char ModifyAddress(unsigned char Address1, unsigned char Address2);

  @brief  Read wind direction
  @param  Address The address where you want to read the data
  @return  The return value ≥0 indicates successful reading, the return value is the wind direction corresponding to the following table, and the return value is -1 indicates failed reading
                                                           Return the value to the direction correspondence table
  |   value   |   0   |     1     |     2     |     3     |  4   |     5     |     6     |     7     |   8   |     9     |     10    |     11    |  12  |    13     |     14    |     15    |
  | Direction | North | Northeast | Northeast | Northeast | East | Southeast | Southeast | Southeast | South | Southwest | Southwest | Southwest | West | Northwest | Northwest | Northwest | 
  |           |       | by north  |           |  by east  |      |  by east  |           | by south  |       | by south  |           |  by west  |      |  by west  |           | by north  |

int readWindDirection(unsigned char Address);

4. Check the device

Type this in the terminal:

  sudo ls -l /dev

Find out the device you just connected in.

5. Open the previously downloaded min.c file, change the device port in the program to the actual one and save it

6. Use the terminal to open the folder where the program is located, compile and run

gcc -Wall -lwiringPi -o Wind_Direction *.c
sudo ./Wind_Direction

You can see the accurate wind direction information


Q How old are you!
A Yes, it is me again!
Q&A Some general Arduino Problems/FAQ/Tips
Q How old are you!
A Yes, it is me again!
Q I have a question!
A Please click the topic link on DFRobot Forum.
A For any questions, advice or cool ideas to share, please visit the DFRobot Forum.

More Documents

DFshopping_car1.png Get RS485 Wind Direction Transmitter from DFRobot Store or DFRobot Distributor.

Turn to the Top