firmata 프로토콜분석

|


1. pin mode


커멘트는 0xf4 입니다. 뒤로 핀번호와 핀의 모드가 차례로 옵니다.


input/output/analog/pwm/servo

     0 /         1/        2/       3/     4


13번핀을 입력모드로 세팅하는 예제입니다.

0x4f,13,0



2. digital write


명령어는 앞4비트의 값은 1001(0x9) 입니다. 뒤에 포트번호가 옵니다.(0~15)


총 16개의 포트가 존재합니다.

0~7핀 -> 0번포트

8~15 -> 1

..

120~127 -> 15번 포트


그래서 포트를 얻는 방법은 pin/8 의 몫이 포트가 됩니다. 

0번 포트는 0x90, 1번 포트는 0x91 됩니다.


포트당8개의 io가존재합니다. 두개의 바이트로 7개 1개로 나누어서 표시합니다.


아래 표처럼 5번핀은 포트0번의 io 5번 입니다.


 7

4

 0

 

 

 

 

 

 

 

 

그래서 5번핀에 HIGH를 넣어주려면 다음과 같은 코드가 됩니다.

0x90,0x20,0x00


13번핀은 1번 포트입니다. 1번포트는 최하위비트가 8이됩니다.(8번핀)


15

14 

13 

12

11 

10 

 0

 

 

 

 

 

 

 

 


HIGH넣어 주려면 다음과 같습니다.

0x91,0x20,0x00


2. digital read


포트단위로스캔여부를 지정하는 방식입니다.


 커멘드 바이트는 다음과 같이 구성됩니다.

7~4 

 3~0

 1101,(0xD)

0~15  포트번호


두번째바이트는 스캔여부를 묻는 바이트입니다. 0이면 스캔중지 1이면 스캔시작입니다.

10,13번핀을 읽고 싶다면 모두 1번포트이므로 다음과 같이 해줍니다.

0xf4,13,0

0xf4,10,0 --> 인풋모드 설정

0xD1,1 -->1번포트 스캔시작


3. analog


4. pwm


5. servo


6. 기타


0xf9 프로토콜버전 뒤에오는 두바이트가 마이너, 매이져 숫자

0xff 소프트웨어 리셋 


참고자료

http://firmata.org/wiki/Protocol#I.2FOs_Supported


https://github.com/jgautier/firmata

https://github.com/firmata/arduino

And