라즈베리파이 circulus api 가이드
TRANSCRIPT
Circulus API 목록
THINKER TO MAKER
Circulus는 더 많은 사람이 메이커가 되기 원합니다.
그래서, 더 쉽게 메이커로 입문할 수 있도록 Circulus 자체 API 를 제공합니다. 복잡한 코딩을 몰라도 Circulus API를 활용하여 원하는 것을 더 쉽게 구현할 수 있습니다.
Circulus API
THINKER TO MAKER
Circulus API
Circulus API 목록
현재 사용 가능한 API 목록은 아래와 같습니다.
LED 초음파 센서 7-세그먼트 온습도 센서 조도 센서 PWM 제어 TTS 카메라 음성인식 위치파악 시스템 모니터링 OCR(Optical Character Reader/Recognition-광학문자인식)
Circulus OS
20160417이후 버전을 사용해주세요.
rom.circul.us circul.us
※ 기존에 강의를 수강하신 분들은 새로 OS를 다운로드하여 사용해주세요.
Circulus API 소스코드
파일을 clone하여 사용하세요.
GPIO(General Purpose Input/Output) 사용하기
- GPIO란? 신호를 보내거나 받을 수 있는 핀 - 센서나 외부 장치들과 정보를 주고 받음, BCM번호로 각 핀에게 명령을 내림 - 라즈베리파이의 GPIO는 입-출력 외에 또 다른 역할을 하는 핀들이 있음
GROUND : 0V GPIO_XX : ~3.3V 3.3V : 3.3V 5V : 5V
BCM 번호 (각 핀의 일반 적인 이름)
추가 기능을 가진 핀
LED
THINKER TO MAKER
LED
LED
LED를 켜보자!
Ground VCC GPIO
- +
※ GPIO는 입력 또는 출력으로 정할 수 있고, 라즈베리파이는 3.3V까지 출력으로 사용 가능 VCC 또는 GPIO출력 모드를 이용하여 LED를 켤 수 있음
LED ON(led.js)
//circulus 모듈 추가
const us = require(‘circulus’); //GPIO 초기화(GPIO 23을 LED 제어로 사용함)
us.initLED(23); //LED 설정 (true = ON, false = OFF)
us.setLED(true);
LED를 켜보자!
GROUND
GPIO23
LED ON(led2.js)
//circulus 모듈 추가
const us = require(‘circulus’); //두 번째 값(led1,2는 각각 LED를 구분해주는 값)
us.initLED(23, ‘led1’); us.setLED(true, ‘led1’); us.initLED(18, ‘led2’);
us.setLED(true, ‘led2’);
여러 개의 LED를 켜보자!
GROUND
GPIO23
Ultrasonic Sensor
THINKER TO MAKER
초음파 센서(HC-SR04)
초음파 센서 원리
초음파를 통해 일정한 거리 이내에 사물이 있는지 파악 사물과의 거리가 얼마나 떨어졌는지 측정
VCC : 5V GND : Ground Trig : 초음파 전송 Echo : 초음파 수신
초음파 센서 거리 측정하기(distance.js)
// circulus 모듈 추가
const us = require(‘circulus'); // 초음파 센서 초기화 // initDistance (TRIG, ECHO);
us.initDistance(23, 24); // 1초에 한 번씩 거리 측정
setInterval(function(){ console.log(us.getDistance() + ‘cm’); }, 1000);
5V
GROUND
GPIO14
GPIO15
1초에 한 번씩 장애물과의 거리를 측정해보자!
7-Segment
THINKER TO MAKER
7-세그먼트 (4 Digit LED)
7-세그먼트란?
VCC 5v
GROUND Ground
SCLK 동기화 신호
MOSI 라즈베리파이 출력 -> 7-세그먼트 입력
MISO 7-세그먼트 출력 -> 라즈베리파이 입력
CE Chip enable
7-세그먼트 연결하기
VCC GPIO25
GROUND GROUND
SCLK GPIO11(SPI_CLK)
MOSI GPIO10(SPI_MOSI)
MISO -
CE GPIO8(SPI_CE0_N)
7-세그먼트 출력하기(7-segment.js)
const us = require('circulus'); // SPI 연결 7 Segment 초기화 us.initText(); // 4자리 숫자, 텍스트 출력. 단 문자의 경우 표현 제약이 따름 us.setText('hipi'); /* 1초에 한 번씩 다른 숫자 출력 정수.toString() = 정수를 문자열로 변경함 ex) 1 ‘1’ var i = 0; setInterval(function(){ us.setText(i.toString() + i.toString() + i.toString() + i.toString()); i++; if(i === 10) i = 0; }, 1000);
*/
글자와 숫자를 출력해보자!
Temperature-humidity Sensor
THINKER TO MAKER
온습도 센서(DHT-11)
온습도 센서
GND
DATA
VCC
온도와 습도를 동시에 측정할 수 있는 센서
모델명 용도 온도 측정 범위 습도 측정 범위
DHT11 실내용 0 ~ 50도 20 ~ 80%
온습도 센서(temperature.js)
//circulus 모듈 추가
const us = require(‘circulus); // GPIO 값 초기화 // 가운데 data핀의 BCM 핀 번호 사용
us.initTemp(21); //1초에 한번씩 온도, 습도 값 출력
setInterval(function(){ console.log(us.getTemp()); },1000); /* 실행 예시 { temperature: '23.0', humidity: '34.0' } */
1초에 한 번씩 온도와 습도를 측정해보자!
5V
GROUND
GPIO21
Illumination Sensor
THINKER TO MAKER
조도 센서(BH1750)
조도 센서
빛의 정도에 따라 밝기를 측정하는 센서(i2c 방식)
VCC 5V
GROUND Ground
SCL 동기화
SDA 데이터 수신
ADDR i2c 통신에 이용되는 주소 값으로 연결하지 않아도 됨 (default 설정 값-0x23으로 인식)
조도 센서(light.js)
const us = require('circulus'); // I2C 연결 조도 센서로 밝기 감지setInterval(function(){ us.getLight(function(val){ console.log(val); }); },1000);
1초에 한 번씩 조도를 측정해보자!
5V GROUND
GPIO2 GPIO3
PWM (Pulse Width Modulation)
THINKER TO MAKER
PWM 제어
(모터 및 LED 밝기 제어)
PWM이란?
펄스 값을 조절하여 밝기나 강도를 조절하는 방식 EX) LED 밝기, 서보 모터 움직임
※ 1에 머물러 있는 시간이 길어질수록 밝아진다.
0
1
0
1
0
1
H/W PWM 방식(pwm_hard.js)
var us = require('circulus'); us.initHPWM(18); var num = 30; var isRight = true; setInterval (function(){ console.log(num); us.writeHPWM (num) ; // 1번 핀에 PWM 신호를 보낸다 if (isRight){ num += 1; } else { num -= 1; } if (num === 120){ isRight = false; } if (num === 30) { isRight = true ; } }, 100);
PWM 단계에 의해 모터가 움직입니다.
5V Ground
GPIO18
S/W PWM 방식(pwm_soft.js)
var us = require('circulus'); us.initSPWM(19); var num = 6; var isRight = true; setInterval (function(){ console.log(num); us.writeSPWM (num) ; // 1번 핀에 PWM 신호를 보낸다 if (isRight){ num += 1; } else { num -= 1; } // 정밀도가 HW 방식에 비해 세밀하게 불가능 함 // 실제 동작하면, SW 방식은 정지 동작에서 떨림 현상이 발견됨 if (num === 24){ isRight = false; } if (num === 6) { isRight = true ; } }, 1000);
PWM 단계에 의해 모터가 움직입니다.
5V
Ground GPIO19
TTS(Text To Speech)
THINKER TO MAKER
TTS 사용하기
TTS 사용하기(index.js)
const us = require('circulus'); // 한글 TTS(한글 사용시에는 뒤에 true를 붙입니다.) us.tts('안녕하세요 서큘러스 입니다', true); // 영문 TTS setTimeout(function(){ us.tts('Welcome to Circulus'); }, 10000);
문자를 입력하면 음성으로 출력합니다.
※ Audio 단자에 이어폰 혹은 스피커를 연결하여 결과를 확인할 수 있습니다.
Camera
THINKER TO MAKER
카메라
카메라 사용하기(camera.js)
const us = require('circulus'); console.log('Taking Picture'); us.camera(function(data){ //촬영한 사진 관련 data 출력 //해당 data를 활용하여 모바일로 사진 전송 가능 console.log(data); })
카메라 단자에 카메라를 연결합니다.
※ 카메라로 찍힌 사진은 /tmp 폴더 하위에 pic.jpg로 저장됩니다.
Sound
THINKER TO MAKER
소리 인식
소리 인식하기(sound.js)
const us = require('circulus'); var exec = require('child_process').exec; console.log('Sound Detector'); // 마지막 파라메터는 옵션임 // threshold - 소리 감지 레벨, 미 지정시 7 // timeWindow - 어느정도 소리가 안 들리면 끝낼지, 기본은 1초 us.listen(function(isDetect, listen){ if(isDetect){ console.log('Detected!') } else { console.log('Recorded!'); exec('aplay record.wav', function(){ // 또 다시 반복 listen(); }) } }, { threshold : 10 });
연결된 마이크로 소리를 감지하면 녹음하여 재생합니다.
※ 테스트를 위해 usb단자로 연결하는 마이크를 사용하였습니다.
Location
THINKER TO MAKER
위치파악
위치파악(location.js)
const us = require('circulus'); // WiFi 를 이용하여 현재 위경도 및 주소를 파악 us.getGeolocation(function(data){ console.log(data); }); /* 결과값 예시 { lat: 37.5378584, lng: 127.0968571, addr: '대한민국 서울특별시 광진구 구의3동 631-4' } */
WiFi를 이용하여 현재의 대략적인 위치를 파악할 수 있습니다.
System Monitoring
THINKER TO MAKER
시스템 모니터링
시스템 모니터링하기(monitor.js)
const us = require('circulus'); us.monitor(function(data){ console.log(data); }) /* 시스템 정보 및 사용량 확인 { model: 'ARMv7 Processor rev 4 (v7l)', speed: 1200, cores: 4, temperature: 52, freemem: 755535872, totalmem: 904245248, freedisk: 1839996928, totaldisk: 3788242944, platform: 'linux', release: '4.1.19-v7+', loadavg: 9, uptime: 58 } */
PC처럼 라즈베리파이의 시스템 상태를 확인할 수 있습니다
OCR (Optical Character Reader/Recognition)
THINKER TO MAKER
광학문자인식
OCR 사용하기(ocr.js)
const us = require('circulus'); console.log('Get Text'); // English us.getText('/home/pi/text_image.jpg',function(data){ console.log(data); }); // Korean us.getText('/home/pi/text_image.jpg',function(data){ console.log(data); },true);
빛을 이용해 문자를 판독하는 기술로 문자를 추출합니다.
※ 테스트를 위해 /home/pi 폴더 하위에 저장된 ‘test_image.jpg’ 를 판독하는데 사용하였습니다. 정밀도에 의해 일부 이상한 글자가 보일 수 있습니다.
Thank you 감사합니다.
W www.circul.us G group.circul.us
S social.circul.us C cafe.circul.us
CONTACT.US [email protected]
EXPAND YOUR DIMENSION SINCE 2013