node.js 로 라즈베리 i2c 사용해보기

|


 i2c 하나의 선로로 여러개의 데이터버스들을 공유할수있습니다.


여기에서 노드용 i2c 플러그인을 받아서 설치합니다


https://github.com/kelly/node-i2c 


기본적으로 라즈베리파이는 i2c를 사용하지못하도록 되어있습니다. 

이 설정을 풀기위해서...

몇가지 설정해야하는것들이 있는데 위의 링크에 자세히 나와있습니다.


-오픈 하기

var wire = new i2c(address, {device: '/dev/i2c-1'});

i2c 통신 객체를 생성합니다.

첫번째인자는 address 로 주소값입니다. 연결하려는 디바이스 스펙을 참고하시면됩니다.


-주소 검색함수

scan 은 어드레스를 검색합니다. wire 의 멤버함수인데...자기주소외에 다른 주소도 검색합니다. 먼가좀 이상하긴합니다...


-쓰기 함수


writeByte 함수입니다.

첫번째인자 comand

두번째인자 전송할데이터 배열

새번째 결과값 콜백함수 인자로 에러값이 넘어온다. 에러가 없으면 undefined


command라는게 사실 첫번째 전송하는 바이트 같습니다. 

한바이트만 정송하는것이면 커멘트가 생략됩니다.


writeByte(0x02,[0x50,0x51 , callback)  은 


writeByte(0x02 , callback)

writeByte(0x50 , callback)

writeByte(0x51 , callback) 하고 같지않을까하는 추정을 합니다.(나중에 실험해보고 다시 올리겠음. 2015.1.12)


예>

wire.writeByte(byte, function(err) {});

wire.writeBytes(command, [byte0, byte1], function(err) {});



-읽기함수


wire.readByte(function(err, res) { // result is single byte })

wire.readBytes(command, length, function(err, res) {
  // result contains a buffer of bytes
});


첫번째인자 는 커멘트값

두번째인자는 전송받을 바이트수

새번째인자는 콜백입니다.


쓰기함수하고 비슷하게 한바이트만 읽으면 커멘트값이 없습니다.



readByte(0x02,2,callback) 은


writeByte(0x02 , callback)

readByte(function() {

readByte(function() {

});

});

하고 같지 않을까 역시 추정을...


-스트림(?)


wire.on('data', function(data) {
  // result for continuous stream contains data buffer, address, length, timestamp
});

wire.stream(command, length, delay); // continuous stream, delay in ms



타이머로 매번 read하는것하고 비슷하게 동작하는것 습니다. on('data',callback) 으로 값을 받아옵니다.

delay 값이 타이머 딜레이값하고 같습니다.(그만큼 기다렸다가 다시 읽어오기)

한가지 확인한점은 동시에 두개의 주소를 번갈아 가면 하지는 않는것같습니다.

(wire를 1,2로 두개 만들어서 한결과 한값만 받아옴)

대신 setInterval로 하면 가능합니다.














And