2015년 11월 25일 수요일

파이썬의 smbus 패키지를 이용하여 i2c 통신하기

 며칠간 라즈베리파이와 아두이노간 i2c 통신을 위해서 python3-smbus 라이브러리를 사용하였는데 여기에 몇 가지를 기록한다. 설치하는 법은 다음과 같다.

sudo apt-get update (먼저 반드시 수행해야 한다.)
sudo apt-get install python3-smbus

라즈베리파이 B+와 ver. 2 에는 i2c 포트가 두 개가 있는데 각각 i2c-0, i2c-1 이다. 만약 1번을 사용한다면 다음과 같이 초기화 할 수 있다.

import smbus
dev = smbus.SMBus(1)

smbus 레퍼런스에 보면 cmd (command) 파라메터가 있는데 이것은 단순히 보내는 데이터의 맨 앞에 먼저 보내지는 데이터이다. 보통 슬레이브는 이것을 보고 어떤 명령인지(또는 어떤 데이터가 따르는지)를 판별한다.

 그리고 함수들 중에 i2c 가 붙은 것들이 있는데 이것이 더 효율적이라고 한다.

read_i2c_block_data(addr, cmd [, length] )
write_i2c_block_data(addr, cmd, lst)

write_2ic_block_data()함수는 다음과 같이 데이터를 전송한다.

cmd
lst[0]
lst[1]
...
lst[-1]

read_2ic_block_data()함수는 cmd 한 바이트를 먼저 전송한 후 데이터를 읽어온다.

smbus에는 write_block_data()라는 함수도 있는데 write_i2c_block_data()와의 차이점은 전송되는 데이터가 하나 다르다는 것이다. 두 번째 바이트에 데이터의 길이를 전송한다.


cmd
size
lst[0]
lst[1]
...
lst[-1]

만약 i2c 통신을 사용하는 것이라면 read_i2c_block_data(), write_i2c_block_data() 함수를 사용하는 것이 좋다.


댓글 없음:

댓글 쓰기