Remote I/O Module for Arduino

For a project that I am beginning, it will require a lot of digital inputs and outputs spread out across a large area. But spread out in groups. The inital candidate that I am aware of would be the PCF8575, but from what I have read I2C is not meant to go more than a foot or so. Is there a PCF8575-like chip equipped with a longer range multi-drop bus out there? It does not need to do any processing beyond read the inputs and outputs and send/receive communication from the Arduino board.

You can use a differential buffer MAX485, either side of your long run to extend the range of I2C.

See the projects here:- https://www.oshpark.com/profiles/PaulStoffregen

Or I have used the AM26LS31A as a differential driver chip and the AM26LS32A at the receiving end. Each chip has 4 drivers / receivers.

Grumpy_Mike:
You can use a differential buffer MAX485, either side of your long run to extend the range of I2C.

See the projects here:- https://www.oshpark.com/profiles/PaulStoffregen

Or I have used the AM26LS31A as a differential driver chip and the AM26LS32A at the receiving end. Each chip has 4 drivers / receivers.

Are you suggesting to just change the signal type, from 0-5V to RS-485 voltage levels? The SDA/SCL signals are bidirectional. How would the RS485 drivers be wired to make this work?

The link I posted has changed and I can't find the original one.

Are you suggesting to just change the signal type, from 0-5V to RS-485 voltage levels?

No.

There were two suggestions here

  1. Use a differential I2C driver and receiver. So that would be a pair of PCA9165. Attached block diagram shows how I used this in a project a few years back. By using a TCA5948 I2C multiplexer chip you can get a multidrop system if you replicate things to the right of this chip to create many I2C target points using different output pairs from the TCA5948. Note that each remote I2C station will need a cable to it from the controlling processor, so in that respect it is not quite multidrop as that implies chaining the cables.

Or

  1. Forget I2C and just make individual connections using AM26LS31A & AM26LS32A

Hi,
What is your project?
What sort of digital inputs and outputs.
What is a "large" area?

Can you post a basic diagram as to the layout of your project?

Thanks.. Tom.. :slight_smile:

TomGeorge:
What is your project?

Monitoring and status system.

TomGeorge:
What sort of digital inputs and outputs.

5V. They would be compatible with PCF8575 I/O unfortunately the distance rules out I2C.

TomGeorge:
What is a "large" area?

From entire house to warehouse.

TomGeorge:
Can you post a basic diagram as to the layout of your project?

Haven't got that far yet. So far there is only the block diagram of Arduino to multidrop I/O modules to I/O points. I am working to find parts and assess the feasibility and requirements to make it happen. The preference is to not have a processor at each remote point as that would increase both cost, size, and complexity significantly.

adwsystems:
Haven't got that far yet. So far there is only the block diagram of Arduino to multidrop I/O modules to I/O points. I am working to find parts and assess the feasibility and requirements to make it happen. The preference is to not have a processor at each remote point as that would increase both cost, size, and complexity significantly.

Block diagram is what we need, just the basics of scale and numbers of I/O involved so we can suggest a suitable connection network.
A picture is worth a thousand words.
Tom.... :slight_smile:

Grumpy_Mike:
There were two suggestions here

  1. Use a differential I2C driver and receiver. So that would be a pair of PCA9165. Attached block diagram shows how I used this in a project a few years back. By using a TCA5948 I2C multiplexer chip you can get a multidrop system if you replicate things to the right of this chip to create many I2C target points using different output pairs from the TCA5948. Note that each remote I2C station will need a cable to it from the controlling processor, so in that respect it is not quite multidrop as that implies chaining the cables.

Selected star-network. That may make the head unit more difficult to make expandable, or I would need a "network hub" of sorts.

Grumpy_Mike:
2. Forget I2C and just make individual connections using AM26LS31A & AM26LS32A

I considered RS485, but unless there is a RS-485 version of PCF8575, then I would need a transceiver board, processor, and I/O, though I could use the on-board I/O instead. I was hoping to find a "long-range" PCF8575 to stay with a single chip solution.

TomGeorge:
Block diagram is what we need, just the basics of scale and numbers of I/O involved so we can suggest a suitable connection network.
A picture is worth a thousand words.
Tom.... :slight_smile:

Thank you for your replies, but I really think you are over thinking the scope of the project. It is not that complex. I have used the PCF8575 within a single enclosure for other projects. If it was not for the cable distances involved then I would use the PCF8575 and move on. But I'm sure at these distances it just won't work.

Block diagram:
Arduino -> Remote I/O -> I/O (2 blocks of 8, either inputs or outputs)
|
-> Remote I/O -> I/O (2 blocks of 8, either inputs or outputs)
|
-> Remote I/O -> I/O (2 blocks of 8, either inputs or outputs)
|
-> Remote I/O -> I/O (2 blocks of 8, either inputs or outputs)
|
-> Remote I/O -> I/O (2 blocks of 8, either inputs or outputs)
|

...

I considered RS485, but unless there is a RS-485 version of PCF8575, then I would need a transceiver board, processor, and I/O, though I could use the on-board I/O instead. I was hoping to find a "long-range" PCF8575 to stay with a single chip solution.

A microprocessor is a single chip solution. It would be more flexible, so easier to adapt to your needs even if you don't "need the processing" and all it's doing is reading and writing I/O lines.

aarg:
A microprocessor is a single chip solution.

Is there an adruino with a built-in long distance serial comm port? I did not see one, only 5V output pins.

adwsystems:
Is there an adruino with a built-in long distance serial comm port? I did not see one, only 5V output pins.

Well, I don't think that is available on any "slave" chips either, so you're stuck with that problem. Also you will need the protection circuits in the kind of enviroment you describe. I did recently buy an STM32 board with built in RS485. Like this one but I have the H7 not the F0:

Will this be a custom PCB or will you be using modules?

aarg:
Well, I don't think that is available on any "slave" chips either, so you're stuck with that problem. Also you will need the protection circuits in the kind of enviroment you describe. I did recently buy an STM32 board with built in RS485. Will this be a custom PCB or will you be using modules?

The remote I/O will be a custom module. For some reason most of the available 'modules' do have a good way to mount them. Not even screw holes >:(. I realize they are trying to keep board size down to keep cost down, but even if the board/module worked in a prototype, I would not be able to use it in the final mounted project. I don't want to get into buying a ton of chips and parts to become a fab house, as is the case with the processor boards. I have made my own mountable and stackable PCF8575 board module which works great. So I'm not afraid to make my own, but I cannot make the processor board and parts for less than I can buy them assembled and ready to use.

The PCF is a comm-I/O combo. I was wondering if anyone knew of a chip with a different I/O interface. Souring and finding parts such as this has always been my weak point.

You can buy ready to run RS485 I/O hubs too:

aarg:
You can buy ready to run RS485 I/O hubs too:
HF6508 8 channel port remote I/O controller RS485 Ethernet 8 Port Remote Relay Controller IOT Device support modbus TCP RTU|Building Automation| - AliExpress

That thing is huge! (Appears) Powerful, but huge!

I would imagine that the size of that unit is par for the course.

Once you factor in some sort of power supply, digital input protection circuitry, digital output driver circuitry and some form of intelligence to handle the comms, then that looks quite a tidy little unit.

There’s a smaller module that I found on Ali Express that may suit your needs.

I considered RS485, but unless there is a RS-485 version of PCF8575, then I would need a transceiver board, processor,

No.
You don’t seem to be understanding what I posted at all!

I don’t know why you are fixated on the PCF8575 anyway, it is a rubbish chip.

You don’t seem to be understanding the other options I suggested. So I guess I will just leave it to you, to do what you can understand.

Grumpy_Mike:
No.
You don’t seem to be understanding what I posted at all!

I don’t know why you are fixated on the PCF8575 anyway, it is a rubbish chip.

You don’t seem to be understanding the other options I suggested. So I guess I will just leave it to you, to do what you can understand.

I do not find it rubbish. I has serial multidrop comms and selected inputs and outputs all in one chip. You would need to explain further why you think it is or what it's short comings are that I have not yet run into. I am using the PCF8575 as a baseline as I have a pre-prototype (used for verifying the sensors, etc. on the bench). I know I cannot move to a prototype with the PCF8575 due to the I2C length limits.

You are correct. I do not understand all of the solutions you have posted. Two posts with a total of three solutions.

Grumpy_Mike:
You can use a differential buffer MAX485, either side of your long run to extend the range of I2C.

That one I totally do not follow. Or at least I cannot see how to make it work. Sounded like you wanted to take the I2C signals run them through a MAX485 to have SCL and SDA in differential voltage (opposed to 0/5V single). Furthermore, SDA and SCL are bidirection (how else could the slave send data back to the master) which perplexed me further on how to make it work. You said that wasn't correct and said nothing more.

Grumpy_Mike:

  1. Use a differential I2C driver and receiver. So that would be a pair of PCA9165. Attached block diagram shows how I used this in a project a few years back. By using a TCA5948 I2C multiplexer chip you can get a multidrop system if you replicate things to the right of this chip to create many I2C target points using different output pairs from the TCA5948. Note that each remote I2C station will need a cable to it from the controlling processor, so in that respect it is not quite multidrop as that implies chaining the cables.

  2. Forget I2C and just make individual connections using AM26LS31A & AM26LS32A

These two seem to be two ways of skinning the same cat. Both appear to result in a star topology, instead of multidrop or daisy chain.

Hi,
I'd have a Lora unit/node at each site and poll them form your central control point.
No wires, no extra hardware, just a Lora module with each site and central control.

Tom... :slight_smile:

These two seem to be two ways of skinning the same cat. Both appear to result in a star topology, instead of multidrop or daisy chain.

Yes they do because you specified you wanted no processors at the sample end.
If you would allow processors at the remote end then you can have a daisy chain.

Any design is a compromise between what you want and what you can have. If you have conflicting requirements you must drop one of them.
So I have given you two solutions with no processors at the remote end that require a star configuration. Others have given you solutions that allow daisy chain wiring but require processors at the remote ends.

Do you see the compromise you have to make? Or are you just going to hang on until some one comes up with something different. The alternative could be to invent something your self, but are you up to doing that?