1- Managing the send / recieve modes by soft will most likely result in failure for the communication
[Ref.Link to be inserted here]
I am trying to hook up a Tristar TS-MPPT-60 to a Raspberry Pi using an RS-485 chip connected to the Raspberry Pi UART, and eventually add my Arduinos to the network.
I have some MAX485 chips and a SparkFun RS-485 BOB to do my tests.
References:
2- To let the Raspberry Pi control the RTS / CTS you need access to pins 30 and 31
Here is what I got hooked up, but not tested yet:
Original image: http://www.homegenie.it/forum/index.php?topic=208.0
3- To use the UART you need to have it released by the Raspberry Pi internal use (undesired traffic):
The MakeFile is broken. Do not forget to fix this code for the gpio_setfunc function to compile:
In the Makefile change the line:
cp $(BINARIES) $(SCRIPTS) $(BINDIR)
to
cp $(BINARIES) $(BINDIR)
To make this restart safe, we put the command into /etc/rc.local
:
# Enable CTS + RTS on P5 header for onboard serial
/usr/local/bin/gpio_setfunc 31 ALT3
/usr/local/bin/gpio_setfunc 30 ALT3
3-Here is a sample of code that should allow to communicate with slaves.
pymodbus rtu RS-485 communication
Pay attention to the corrections below, the code block in the previous link.
temps = client.read_input_registers(30001, 4, unit=0x0a) # Address, count, slave address
print temps.registers
coil = client.read_coils(10001, 8, unit=0x0a) # Address, count, slave address
print coil.bits
In the sample code, replace the undesired USB port with the TTL one:
port="/dev/ttyUSB0"
to
port="/dev/ttyAMA0"
All of this is untested, but that is a resume of all my findings up to now.
Now my latest issue is that the slave has a big 12 V mark on the Modbus port. Will my Raspberry Pi get fried? I'll keep you posted.
WARNING:
As Chris pointed out in the comments below, that amateur setup is untested and might fry your pi.
You've got MAX485 connected to 5V and its D/R/DE/RE pins connected to Pi's GPIO >directly. This isn't safe as GPIO pins are designed to operate at 3.3V whereas >the R pin will send 5V signals (not sure if the other pins ever send 5V signals >from MAX485). This mistake seems so common and yet I haven't read someone >saying they actually burnt their pi doing that, so maybe it's usually fine, but >technically you should use a 5V to 3.3V level converter. Or replace MAX485 with >MAX3485 and power via 3.3Vcc pin.