I wish to measure the rotational speed and electrical current used of/by industrial components. Those components are driven by strong electric motors. The solution should be cheap and fast to implement and I want to use a raspberry pi to collect the data (with c++ or c#) and visualize it, either with an attached screen or via a web interface. There are likely 30 or so sensors to be installed at most.

The main problem here is the range. The components are transport conveyor belts that may run quite a long distance, possibly up to several hundred meters and are, as stated, in an electromagnetic noisy environment with the heavy duty motors. I have no experience with such communication at all and I was looking at I2C and SPI as possible solutions, since they natively allow several slaves, which fits my requirements. I don't want to use multiple PIs since that'd drive the costs up considerably and still leaves me with the problem of communication (at this stage probably ethernet with a max segment length of 100m) and expensive networking hardware (switches and probably media converters (copper - optical fibre) or repeaters for the range requirements), blowing the whole thing out of proportion.

I had a look at things and found stuff like this, referencing bus buffers/voltage boosters like the P82B96 and the differential bus buffer PCA9615. However non state the maximum length that they allow for and if that fits into my requirements. The PCA9615 doc states it allows for at least 3m in 1MHz mode, longer with less throughput. If this is 'long range', then I don't know if I2C is even applicable for my 500m or so range requirements. I imagine since I only want to send data from 30 or so sensors every few tens of milliseconds and that data only consists of a 16bit number, 100kHz is plenty fast enough.

I could possibly add multiple bus buffers/repeaters (P82B96) in line and keep it relatively cheap, but I don't know what that'd do with the signal run times or what effect that has on the system as a whole. Since the master queries the slaves, collisions should not be an issue since I can just wait a few milliseconds after receiving/not receiving data from each slave.

What I want is a rugged solution to get some numbers from some A/D converters to my raspberry over a long distance and I haven't got the faintest idea how to do that. There is probably some component that takes i2c and sends it over a high voltage, long range bus that I don't know of.

I really appreciate your help, I'm a programmer and not an electrical engineer and would really like some input on this problem.

  • 1
    \$\begingroup\$ Forget I2C, SPI etc. You're looking at RS422 or RS423 (I forget which) - essentially a balanced, terminated, (can be opto-isolated) form of RS232 for the physical layer.. Consider if you can live with lower baud rates like 9600baud. You're looking at maybe an Arduino at each motor, suitably equipped and powered, and your R-Pi as the master. Elliot's right ... look at Modbus. \$\endgroup\$
    – user16324
    Mar 7, 2020 at 13:26

1 Answer 1


No, for the distances you need and the noisy environment you describe plain I2C or SPI will not be suitable.

This problem has been essentially solved. There are communications protocols and standards that are common in industrial environments. Search for MODBUS to see one example.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.