라즈베리팡팡

실험|I2C통신의 장거리 전송 본문

엔지니어/실험

실험|I2C통신의 장거리 전송

절망로정말적 2020. 1. 18. 14:35

I2C 통신으로 100m 정도 떨어져 있는 장치의 센서부터 데이터를 받아 올 수 있을까?

 

지금까지는 센서와 1m 정도의 케이블로 측정했고, 케이블의 거리를 100m 이상으로

연장하는 방법에 대해서는 지식이 전무했으므로, 방법에 대해서 조사한 내용을 정리해둔다.

 

 

 

1. I2C 통신 케이블의 최대 거리?

"I2C는 애초에 장거리를 위해 설계되지 않았고, 일반적으로 연장해서 사용하지 않는다.

케이블의 길이가 길어지면 자체 저항이 높아지게 되며, 따라서 그만큼 노이즈의 영향을 받기 쉽게 된다."

 

라고 하는데 최대 거리가 명확하게 나와 있는 곳은 없었다.  i2c의 속도, 사용한 케이블, 풀업 저항 등 조건에 따라 달라지겠지만 대체로 I2C는 HDMI와 같은 케이블을 사용하므로 10m정도의 거리라면 올바르게 작동한다고 한다. 그 이상 케이블을 연장하여 사용하기 위해선 i2c버퍼를 이용하거나 다른 통신방법을 사용하는 것이 일반적. 구글링 결과 2~3m, 5m의 케이블에서도 버퍼를 사용하는 경우가 있어서, 혹시 10m 거리에서 버퍼를 사용하지 않고 통신이 가능한지 테스트해 보기로 했다.

 

22AWG 실리콘전선 사용
node-red 대시보드

라즈베리파이와 BME280 센서의 거리를 늘려서 데이터를 확인해 보았다. 처음 2m 정도의 길이에서 별 다른 문제가 없었기에, 남은 케이블을 이용해서 총 8.2m의 거리에서 측정했는데 눈에 띄는 오차나 노이즈는 볼 수 없었다. 버퍼의 도움 없이도 10m 이내의 통신이라면 가능할 것으로 보인다. 

 

2. 10m 이상의 장거리에서의 통신 방법은?

I2C버퍼 - 풀업 전압을 높게, 풀업 저항값은 낮춰서  I2C 버스의 전류를 앞당기는 방법. 이러한 방법은 버스의 임피던스도내려가기 때문에, 노이즈에 대한 내성도 당연히 향상된다. 케이블의 양 끝에 버퍼를 연결한다.  >>> P82 B96, PCA9600 모델번호. 연장 가능 거리는 20m 정도.

이외에 다른 통신방법으로는 500 kbits/1s, 최대 거리 100m까지 가능한 can버스 통신이나 rs485 등이 있다. 

대체로 20m 이상 장거리 통신에 I2C방식은 어울리지 않는 것 같다. 

라즈베리파이의 I2C를 PCA9600를 이용해 16m LAN케이블에 연결. 센서는 BME280.

 

참고 링크