Quick Start
- 시작하기
- 엔트리 하드웨어 개발 튜토리얼
Basic
- 개발 환경 세팅
- PR 요청하기
- 자주 하는 질문
- 자주 발생하는 에러
블록만들기
- 시작하기
- 블록 명세 작성
- 블록 사용 등록
- 블록 모양별 개발 방법
- 하드웨어 블록 만들기
- 하드웨어 블록 번역작업
- 하드웨어 블록 추가하기
- 프로젝트 테스트하기
Entry HW
- 시작하기
- 하드웨어 모듈 추가하기
- 블루투스 하드웨어 추가하기
- 하드웨어 연결 테스트하기
- 하드웨어 등록 서비스 신청하기
- 브라우저로 연결하기에 하드웨어 등록
Entry Offline
- 시작하기
- 프로젝트 구조
- 개발하기
- 오브젝트 추가하기
- 다국어 작업하기
- 커스텀 프로젝트 빌드
- 빌드하기
Etc.
- Git 사용 방법
- 문서 기여하기
- 문서 업데이트 내역
하드웨어 모듈 추가하기
모듈의 위치
엔트리 하드웨어에서, 각 파일들의 위치는 아래와 같습니다.
- 모듈 파일 :
app/modules/
- 펌웨어 파일 :
app/firmwares/
- 드라이버 파일 :
app/drivers/
모듈의 구성
모듈은 모듈명.js
, 모듈명.json
, 모듈명.png
의 3가지로 구성됩니다.
아두이노를 예를 들면 아래와 같습니다.
arduino.js : 실제 하드웨어 로직
arduino.json : 하드웨어의 접속방식 및 속성 등의 메타데이터
arduino.png : 하드웨어 프로그램에서 표기될 이미지
모듈 추가하기
하드웨어를 추가하는 기본적인 과정은 다음과 같습니다.
- .js 파일생성
- .json 파일생성
- 이미지 삽입
- 필요에 따라 드라이버 및 펌웨어 추가
알맞게 파일이 생성되면 실제 하드웨어 화면에 추가한 하드웨어가 표시되어 테스트가능 상태가 됩니다.
개발시 현재 엔트리에 등록되어있는 하드웨어 모듈 목록를 참고하시는 것을 추천합니다.
.js
파일생성
기존 자바스크립트 모듈화 기법에서, ES6 문법인 class 를 활용하는 방법으로 개선되었습니다.
타 모듈의 과거 방식으로 개발하여도 무방하지만, 아래의 방법을 추천드립니다.
아래의 방식은 기존에 필수적으로 구현해야했던 함수들이 상단에 구현되어있으므로, 생략시 초기값을 따르게 됩니다.
초기값은 BaseModule 을 참고해주세요.
실제 적용되어있는 모듈의 예시로는 ev3 를 참고해주세요.
const BaseModule = require('./baseModule'); |
.json
파일생성
{ |
몇가지 속성에 대해 추가 설명 드립니다.
comName, vendor, pnpId : COMPort 스캔시 사용되는 속성입니다. 해당 속성과 매치되는 경우 바로 해당 COMPort 를 선택합니다.
control : slave, master 중 하나를 선택해야 합니다. 이 둘은 통신방식이 다릅니다.
- 최초 checkInitialData & requestInitialData (HandShake) 시
- master : 마스터 속성인 경우 기기쪽에서 먼저 데이터가 올때까지 기다립니다.
- slave : duration 속성만큼의 간격으로 기기쪽으로 먼저 데이터를 보냅니다.
- 연결 성사 후 데이터 통신시
- master : 기기에서 데이터를 받으면 그다음 기기로 requestLocalData 송신
- slave : requestLocalData 를 duration 속성만큼 주기적으로 전송
- advertise : 연결 성사 후 마지막으로 handler 에 작성한 데이터(엔트리로 전송할 데이터) 를 변경없이 advertise 속성 만큼의 간격으로 서버에 전송합니다.
- softwareReset : true 인 경우, 최초 연결 후 시리얼포트에 dtr 플래그를 1초간 off 합니다. 그 후 다시 flag on 합니다.
SerialPort 관련
- baudRate ~ bufferSize : 시리얼포트 라이브러리 오픈시 필요한 옵션입니다. 자세한 사항은 Serialport Docs 를 참고해주세요.
- flowControl : hardware, software 로 나뉩니다. hardware 선택시 rtscts 플래그 / software 시 xon, xoff 플래그가 on 입니다.
- delimiter | byteDelimiter : 둘중 한 프로퍼티만 적용됩니다. 기기에서 전달받는 데이터의 파서를 선택합니다.
delimiter 인 경우 결과값을 string 으로, byteDelimiter 의 경우 byteArray(ex. [255, 83, 13, 10]) 로 전달받습니다.
byteDelimiter 는 해당 delimiter 를 포함한 결과값을 받게 됩니다.
- 최초 checkInitialData & requestInitialData (HandShake) 시
이미지 삽입
이미지는 찌그러짐을 방지하기 위해 정사각형의 이미지를 추천드립니다. (100px * 100px)
또한 배경색이 투명색한 .png
파일이어야 합니다.
용량문제 때문에 너무 큰 이미지는 사용을 자제해 주시고, 적당한 크기의 이미지를 최대한 압축 및 최적화 후 넣어 주시면 됩니다.
용량이 너무 크다고 판단되는 경우 임의로 리사이징을 할 수 있습니다.
https://tinypng.com/ 사이트 에서 간단하게 무료로
.png
파일을 최적화 할 수 있습니다.
펌웨어 추가
모듈.json
파일의 firmware 프로퍼티에 작성한 값을 통해 펌웨어를 찾습니다.[펌웨어명].hex
파일을 app/firmwares/
위치에 넣어 주면 이후에 하드웨어 프로그램에서 자동적으로 해당 펌웨어를 업로드 합니다.
현재 펌웨어는 업로드는 아두이노 계열인 Uno
와 Nano
보드만 지원하고 있습니다. Nano
보드에 펌웨어를 올리기 위해선 firmwareBaudRate
속성의 값을 57600
으로 설정해야 정상적으로 업로드가 가능합니다.
드라이버 추가
드라이버는 기본적으로 운영체제 별로 따로 설정하도록 되어 있으며, 해당 운영체제에 맞는 드라이버가 없는경우 드라이버 설치 버튼이 표시되지 않습니다. 드라이버 옵션에 작성한 경로에 맞추어 app/drivers/
폴더에 드라이버를 넣어 주면 됩니다.
커스텀 버튼 추가
하드웨어 프로그램과 하드웨어 기기가 연결되었을 때, 사용자가 클릭 할 수 있는 ‘커스텀 버튼’을 제공할 수 있습니다.
커스텀 버튼을 제공하기 위해선, app/modules/모듈.json
에서 customButton
속성을 정의해야 합니다.
버튼은 여러개 있을 수 있으므로 customButton
속성은 각 버튼에 대한 내용이 정의된 객체를 배열로 가집니다. 버튼에 대한 객체는 각 버튼을 구분하기 위한 key
속성과 버튼에 표시될 텍스트인 translate
로 구성되어 있습니다.
예) app/modules/모듈.json
{ |
다음으로 app/modules/모듈.js
에서 커스텀 버튼을 사용자에게 보여줄지 여부를 boolean으로 return하는 canShowCustomButton()
함수를 구현합니다.
마지막으로, 버튼 클릭시 실제 동작로직이 정의된 customButtonClicked(key)
함수를 구현합니다. customButtonClicked(key)
함수는, app/modules/모듈.json
의 key
속성값을 인자로 받아옵니다. 버튼이 여러개 있다면, key
를 통해 버튼별 로직을 분기하여 구현하시는 것을 추천드립니다.
예) app/modules/모듈.js
// 커스텀 버튼을 사용자에게 보여줄지 여부 |
모든 구현을 마치면, 하드웨어 연결시 아래와 같이 버튼이 출력됩니다.
(이미지는 예시를 위한 것으로 마이크로비트는 현재 커스텀 버튼을 제공하고 있지 않습니다.)