며칠간 라즈베리파이와 아두이노간 i2c 통신을 위해서 python3-smbus 라이브러리를 사용하였는데 여기에 몇 가지를 기록한다. 설치하는 법은 다음과 같다.
sudo apt-get update (먼저 반드시 수행해야 한다.)sudo apt-get install python3-smbus |
라즈베리파이 B+와 ver. 2 에는 i2c 포트가 두 개가 있는데 각각 i2c-0, i2c-1 이다. 만약 1번을 사용한다면 다음과 같이 초기화 할 수 있다.
import smbusdev = 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() 함수를 사용하는 것이 좋다.
댓글 없음:
댓글 쓰기