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

neopixel 사용기

|

에이다프르트사의 네오픽셀 16이라는것을 2개 구입했습니다.


소스에 보면 NUMPXELS 라는게16으로 되어있습니다. 그래서 수정없이 그냥 주입시켰습니다.



사진처럼 6개만 불이 들어옵니다. 16개 모두 들어오지않습니다. 으응? 머지?



와이어링은 주석에나오대로 그대로 했습니다.




6번 핀에 데이터 input을 연결했습니다.



납땜상태도 이상없습니다.





두번째 것입니다. 결과가 다르게 나옵니다.

같은 소스에 똑같이 와이어링했는데 이번에는 15개 불이 들어오긴하는데 색상이 엉망으로 나옵니다.






And

아두이노유노 에서 3.3V 용 ic2 통신을 위한 레벨변환기 사용기

|

이렇게 생긴 제품입니다.


아두이노 유노는 기본 5V로 되어 있어서 3.3v용 센서모듈에 맞게 전압을 맞춰 주기 위해서 사용하는 제품입니다.

아두이노 유노의 3.3v에 직접 연결해서 써도 센서값은 잘받아지긴합니다만 센서에 무리가 갈수 있다고 합니다.




제품구매처 :


http://artrobot.co.kr/front/php/product.php?product_no=940&main_cate_no=36&display_group=




연결방법참고자료 



참고자료그림은 아마도 씨리얼 통신예제인합니다.


i2c 통신을 위해서는 rx,tx 대신에 sal,scl 로 바꿔주면됩니다.


중요한건 전원연결인데 정리하면 다음과 같습니다.

아두이노측 / 레벨변화기측 / 센서모듈측

GND         -> GND | GND  -> GND

5V           ->  hv    | lv      -> VCC

3.3v        ->  lv   



a4(sda) -> hv2 | lv2   -> sda

a5(scl)  -> hv1 | lv1   -> scl






And
prev | 1 | ··· | 6 | 7 | 8 | 9 | 10 | 11 | 12 | ··· | 36 | next