Simple -How to wire Arduino to temp controller with RS485

Hey guys,

so I am trying to get temp values out of a SOLO 4848 temp controller via Modbus RS-485. Anyways, it should be as simple as possible and I don't need really anything else connected, I just want this working first.

I am using the linksprite RS485 Shield V2.1 from RS485 Shield V2 - DEV-12965 - SparkFun Electronics

Of the few tutorials I have seen online, none are much different than the one provided from the website.
Here it is Tuotorial of Using RS485 Shield V2 on Arduino | LinkSprite Learning Center
Most tutorials are about 2 arduinos communicating or something similar.

I'm currently using an Arduino Duemilanove however I will be switching to a sparkfun redboard soon.

In short, how do I wire up my temp controller to my arduino?
I need to make sure I am getting the right data and am using USB power from my computer for now, so I need to use SoftwareSerial.

I want to understand where the wires can and cannot go and why. So I also have a few basic electric questions to help build my knowledge base. In the tutorial link I posted, under the Wiring Diagram tab, you can see the 2 arduinos are only connected with 2 wires from the RS485 ports yet the description still mentions connecting other things as well. Here is the text from the Wiring Diagram

"Left RS485 module H2 485-A -> Right RS485 module H2 485-A

Left RS485 module H2 485-B -> Right RS485 module H2 485-B

Left RS485 P1 -> 3.3V Right RS485 P1-> 3.3V

Left RS485 P2 -> TX_CTRL Right RS485 P2-> TX_CTRL

Left RS485 D2 -> TX Right RS485 D2 -> TX

Left RS485 D3-> RX Right RS485 D3-> RX"

What is the reasoning for the 3.3V connection and TX_CTRL connection etc? RS485 only uses 2 wires, so why is all this necessary? Is this specific to communicating with 2 Arduinos? In my case I only have the 2 wires coming from my temp controller, do I need anything else for Modbus RS485 to work for me?

Here are some other base questions I am curious about,

  1. On my Linksprite shield shown below, what is the difference between the RS485 ports labeled H1 and H2? Does my shield just have 2 ports to communicate with, even if 1 would be enough? Or are they supposed to work together?

  2. What is that Pin/Port thing labeled P1, saying 5V and 3.3V, is it relevant for me?

  3. What about the Pin/Port labeled P2? It says D9_CTRL and TX_CTRL. It seems weird to me that something labeled P1 and P2 aren't inversely labeled for having similar functions. Basically, when one says TX_CTRL, why doesn't the other say RX_CTRL, why is there a TX_CTRL and not an RX_CTRL, is 5V and 3.3V (Volts I know) supposed to be receiving voltage in between those values or?

Even if I don't have a specific question about something, if it seems I should know something related, please tell me! Does it seem like I am missing a big concept of circuits or RS485 connection?

Sorry for spamming beginner questions and info,

Remember I am only trying to communicate with a temperature device, not another Arduino so it should mean my circuit is a lot less complicated, correct?

So far the only thing I have done which I believe to be correct is put the black wire (Negative) into the Shield's H1 RS485 B and the red wire (Positive) into the RS485 A port. Since I need to use SoftwareSerial, how do I tell my arduino which ports to communicate with? Does the RS485 Shield just default to using the pins 0 and 1 (TX AND RX) Serial ports?

I feel like a lot of this stuff is stupid easy questions or common knowledge, but I am very new to circuits and RS485 so I apologize if the questions are entry level or don't make sense.

I have attached a photo of the RS485 shield I am using for quicker reference.

I greatly appreciate any and all help you can give.

Thank you! -Dillon

I am not familiar with that shield so I wont be much help there.

P1 determines the operating voltage. it can be either 3.3 or 5v Those arduinos use 5v but you should check what the temp controller uses also.

TX_CTRL is used to tell the shield if it should be transmitting or receiving.

You will not be using SoftwareSerial.

Modbus is the communication protocol used by that controller so that is what you
will need to use on the arduino.

ModbusMaster Library

Thank you for the reply! I am aware that I will need to use Modbus... I am currently using Modbusino, however dont I still need to communicate Modbus over Serial pins? I meant I need to communicate Modbus with Modbusino on other pins using Software Serial. Also, in the original post, I have attached a picture of the RS485 Shield for reference if you need.

Finally, do you think I need any other connections or anything like using TX_CTRL? Is anything else relevant for a simple Master Slave modbus circuit?

Thanks again!

however dont I still need to communicate Modbus over Serial pins?

Yes, But you must use hardware Serial. if you cannot use the Serial on your redboard you may need to use an arduino that has multiple Serial ports such as a Mega 2560.

do you think I need any other connections or anything like using TX_CTRL?

Yes, I agree that wiring description is confusing.

All of these connections should have been made when the shield is plugged into your arduino and should not have to be done separately.

RS485 P1 -> 3.3V This may need to be 5v check what your Temp controller uses

RS485 P2 -> TX_CTRL Yes, this is necessary

RS485 D2 -> TX

RS485 D3-> RX

However it is not clear to me which pin on the arduino that TX_CTRL is connected to and the sample code does not indicate that either. It will be necessary to know.

I also notice that this shield uses pins D2 and D3 for Serial communication which will not be compatible for use with Modbus since both of those Modbus libraries requires that hardware Serial be used. I am not aware of one that doesn't.
You could remove the shield and wire it with jumpers. I am not a fan of this idea,
you may want to look for another rs485 module such as : SparkFun Transceiver Breakout - RS-485

Hutkikz that you so much for all the help! This makes a lot more sense currently, I will get back to you if I have any other questions!

Thanks - Dillon


Were you able to get your Arduino to talk to your Solo 4848? I am trying to do the same thing and have not been successful. It feels like I am not able to establish communication. I am using a Max485 module (built in resistors). Any help would be appreciated!