as Jaxbird typed ....Serial UART ring token ... screened wires should be OK at 5v TTL level
So TX pin node 1 connected to RX pin node 2, TX node 2 to connected with RX node 3? Doesn't that create a lot of overhead?
Yes, and then Tx node 3 connects back to node 1 to form a ring. As 22swg said, not much overhead as your messages will be fairly small.
A great advantage of this model is that any node can initiate communication with any node, you don't need a master doing polling, so you can implement a more async model where e.g the individual nodes send out status and events regularly.
It's very simple to implement, your message format should start with a header containing destination address and sender address.
Of the top of my head, it goes like this:
When a message is received: (from the perspective of a node)
A: You are the destination, you absorb and process the message.
B: You are not the destination or the sender, you just push the message onto the Tx queue
C: You are the sender, you absorb the message and know the destination doesn't exist.
You can then optionally implement a Token, as in only the node holding the token message is allowed to transmit, this can be used for flow control and help solve potential concurrency issues. As in you have the Token, you transmit everything on your Tx queue, followed by the special token message.
The token can be created by having a timeout on nothing received for x amount of time. Then wait a random amount of time, still nothing received => create a new token.
Edit: on the create token, you also need to send out a token announce message (e.g. token announce: new token ID created by xx node) to prevent multiple tokens.