인텔의 에디슨 시작하기

맥에서 인텔 에디슨에 연결하는 방법입니다.

에디슨을 확장보드에 잘 결합합니다.

IMG_0310
보드에 결합한 상태에서 USB 케이블을 둘다 연결합니다.

IMG_0312

터미널에서

ls /dev/cu.usbserial-* 를 입력하여 설정된 시리얼 포트를 확인합니다.

제 경우는 아래와 같습니다. 시리얼 포트를 찾았으니 터미널로 접속합니다.
[~]$ ls /dev/cu.usbserial-*
/dev/cu.usbserial-A103KJQL

// 아래와 같이 입력합니다. 여기에서 XXX로 표시된것은 여러분들의 시리얼을 입력하시면 됩니다.
저의 경우는 /dev/cu.usbserial-A103KJQL 을 입력하겠습니다.

screen /dev/xx.usbserial-XXXXXXXX 115200 –L

위와 같이 입력한 후 빈화면이 나오면 엔터를 한번 쳐주시면 됩니다.(이것때문에 한동안 멘붕...ㅋㅋ)

그러면, Yocto(욕토) 리눅스에 로그인 할 수 있게 됩니다.

 

Poky (Yocto Project Reference Distro) 1.6.1 dimplejuno ttyMFD2

dimplejuno login:

로그인 계정은 root 를 입력합니다. 처음에는 비번은 설정되어 있지 않습니다. 그냥 엔터를 입력합니다.

 

보드 이름 설정하기

보드의 이름 설정하기 입니다. 원하시는 이름으로 설정합니다.

우선 설정된 이름을 확인합니다.

저의 경우에는 아래와 같습니다. --showNames 하면 설정된 이름을 볼 수 있습니다.

root@edison:~# configure_edison --showNames
{"hostname": "edison", "ssid": "EDISON-6C-65", "default_ssid": "edison_ap"}

수정 하시려면 아래와 같이 입력합니다.

configure_edison --name
Give this Edison a unique name.
This will be used for the access point SSID and mDNS address.
Make it at least five characters long (leave empty to skip):
Skipping name change...

root@dimplejuno:~# configure_edison --showNames
{"hostname": "dimplejuno", "ssid": "dimplejuno"}
root@dimplejuno:~#

root 계정의 비번 설정하기, 비번을 설정해줍니다.
configure_edison --password

*와이파이 설정하기 : 에디슨에는 감사하게도 와이파이가 기본으로...땡큐베리 감사.

와이파이를 설정하려면
configure_edison --wifi 를 입력한 후 스캔하고 원하는 AP를 선택한 후 암호를 입력하면 연결됩니다.
연결된 후에는 로컬 연결 IP(저의 경우, http://192.168.0.26)를 보여줍니다.

Configure Edison: WiFi Connection

Scanning: 1 seconds left

0 : Rescan for networks
1 : Exit WiFi Setup
2 : Manually input a hidden SSID
3 : U+NetB96F
4 : U+zone
5 : home
6 : dimplejunoEGG
7 : decsers

Enter 0 to rescan for networks.
Enter 1 to exit.
Enter 2 to input a hidden network SSID.
Enter a number between 3 to 7 to choose one of the listed network SSIDs: 7
Is decsers correct? [Y or N]: Y
Password must be between 8 and 63 characters.
What is the network password?: ********
Initiating connection to decsers. Please wait...
Attempting to enable network access, please check 'wpa_cli status' after a minute to confirm.
Done. Please connect your laptop or PC to the same network as this device and go to http://192.168.0.13 or http://dimplejuno.local in your browser.

브라우저에 http://192.168.0.13 를 입력합니다. 즉, 에디슨이 와이파이에 연결되고 13번 아이피를 할당 받았습니다.
당근 브라우져로 연결하면 사이트가 나타납니다.

스크린샷 2015-04-17 오후 10.59.47

configure_edison --setup 으로 모든 설정을 한번에 할 수도 있습니다.

블루투스 시작하기

우선 블루투스를 활성화 합니다.
rfkill unblock bluetooth
bluetoothctl

root@edison:~# rfkill unblock bluetooth
root@edison:~# bluetoothctl
[NEW] Controller 98:4F:EE:04:34:EE edison [default]
[bluetooth]#

아래와 같이 에이전트를 등록합니다.
[bluetooth]# agent KeyboardDisplay
Agent registered
[bluetooth]# default-agent
Default agent request successful
[bluetooth]#

[bluetooth]# scan on
Discovery started
[NEW] Controller 98:4F:EE:04:34:EE edison [default]
[NEW] Device CC:29:F5:BE:E6:74 Hojun의 iPhone6
[NEW] Device 71:8F:32:71:C0:9D 71-8F-32-71-C0-9D
[NEW] Device 88:0F:10:29:63:9A MI

[bluetooth]# pair 88:0F:10:29:63:9A
Attempting to pair with 88:0F:10:29:63:9A
[CHG] Device 88:0F:10:29:63:9A Connected: yes
[CHG] Device 88:0F:10:29:63:9A UUIDs:
00001800-0000-1000-8000-00805f9b34fb
00001801-0000-1000-8000-00805f9b34fb
00001802-0000-1000-8000-00805f9b34fb
0000fee0-0000-1000-8000-00805f9b34fb
0000fee1-0000-1000-8000-00805f9b34fb
0000fee7-0000-1000-8000-00805f9b34fb
[CHG] Device 88:0F:10:29:63:9A Paired: yes
Pairing successful

터미널에서 위와 같이 연결합니다.

관련상품 : http://www.icbanq.com/P005632309/R

 [본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다] 

 

블루투스 라즈베리파이 시리얼 콘솔

 

"이 글은 아이씨뱅큐가 진행하는 칩센의 블루투스 4.1 모듈 테스트 키트 무상 체험단의 일환으로 ICbanQ 지원을 받아 작성되었습니다"

무상체험 대상인 BoT-CLE110 Test Kit 구입처http://www.icbanq.com/shop/product_detail.asp?prod_code=P005672731

 

​라즈베리파이 모델B 2대, 라즈베리파이2 모델B 2대, 모두 4대의 라즈베리파이를 가지고 있다. 데모용으로 자주 들고 다니는 라즈베리파이2는 2대는 각각 Ubuntu 14.04 + ROS indigo, 라즈비안과 카메라 영상을 네트워크 스티리밍할 mjpeg streamer가 설치되어 있다. 보통 전원과 네트워크만 연결해 사용하고, 여간해서는 키보드, 모니터 등은 연결하는 일이 거의 없다. 하지만 가끔씩 이 전에 사용했던 네트워크 설정이 데모장소의 네트워크 여건상 수동 설정을 사용했을 경우, 난감한 사태가 벌어진다. 보통 USB to UART 장치를 이용해 시리얼 콘솔 접속으로 설정을 변경하는데, 이 BoT-CLE110 Test Kit을 일종의 쉴드로 만들어 아예 장착해 두면, 바로 PC나 스마트폰에서 무선으로 이 작업이 가능하겠다는 생각이 들었다.

1. BoT-CLE110 Test Kit의 Baudrate 변경


일반적으로 리눅스 시리얼 콘솔로 사용되는 UART Baudrate는 115,200baud를 사용한다. 라즈베리파이 또한 마찬가지이다. 이 작업에 적당한 시리얼통신 에뮬레이터는 아두이노 IDE 프로그램의 시리얼 모니터가 적당하다. 먼저 BoT-CLE110 Test Kit을 마이크로 5핀 USB 케이블을 통해 PC와 연결한다. 이 때 장치관리자의 포트항목에 나타나는 COMxx의 xx에 해당하는 숫자를 기억해두자.


이제 아두이노IDE를 실행시킨 후 '도구 - 포트 - COMxx'을 앞서 기억해 둔 숫자로 맞춘 후   아이콘을 클릭하여, 시리얼모니터를 실행한다.


아래 그림처럼 설정이 되었는 지 확인한다.


AT를 입력하여 +OK가 출력되는 지 확인


AT+UART=115200 를 입력하여 +OK가 출력되는 지 확인


아래 그림에 표시한 것 처럼 보레이트를 115200으로 변경 AT를 입력하여 +OK가 출력되는 지 확인



2. 바즈베리파이의 Serial Cosole 활성화


시리얼 콘솔을 활성화 시키기 위해 raspi-config를 실행한다.

 $ sudo raspi-config

메인메뉴에서 '8. Advanced Options' - 'A08. Serial' - '' - '' 순서로 선택하여 시리얼 콘솔을 활성화 시킨 후,  ''를 선택하여 raspi-config를 종료한다.


 

시리얼 콘솔 포트 확인

 $ sudo ls /dev/ttyA*

   /dev/ttyAMA0

​/dev/ttyAMA0가 라즈베리파이 PGIO포트에 있는 시리얼 콘솔 접속시 사용되는 시리얼 포트의 이름이다.


3. Wiring

라즈베리파이의 I/O 신호레벨이 +3.3V 이므로 특별히 신호레벨을 맞춰 줄 필요는 없다. GND만 맞춰주면 되다. 아래 그림처럼 4가닥만 연결해주면 된다. 점선으로 표시한 SW 방향에 주의한다. 앞서 전송속도를 115200으로 변경할 때와 반대방향으로 맞춘다.

 

 

4. BoT-CLE110 Test Kit를 이용한 라즈베리파이 시리얼 콘솔 접속

 

 


 

"이 글은 아이씨뱅큐가 진행하는 칩센의 블루투스 4.1 모듈 테스트 키트 무상 체험단의 일환으로 ICbanQ 지원을 받아 작성되었습니다"
written by GroundZero
 

  

 
이 저작물은 크리에이티브 커먼즈 저작자표시-비영리 4.0 Unported 라이선스에 따라 이용할 수 있습니다 

[ICbanQ 무상체험단 25기] BoT-CLE110Test Kit 개봉기

구매처 http://www.icbanq.com/shop/product_detail.asp?prod_code=P005672731


안녕하세요^^; 한동안 뜸하다가 무상체험단에 당첨되어서 체험단 리뷰를 진행하게 되었습니다.

(카메라가 슬슬 하늘나라를 가려고 합니다,,, 세로운 카매라가 필요합니다;)

이번에 테스트하게된 BoT-CLE110Test Kit 는 말 그대로 Bot-CLE110 무선통신모듈을 테스트 해보기 위한 보드입니다.
기본적으로 어떤 동작을 할 수 있는지 테스트해볼 수 있는 개발보드의 느낌입니다.

사실, 이 보드를 받기 전에는 크게 기대하지 않았습니다. 아니 뭐,,, 블루투스 모듈하면 보통은 UART 통신용 SSP 블루투스 모듈이니까요^^; 그냥 통신모듈 이겠거니, 마침 무선통신 모듈 하나 필요했거니,,, 해서 신청했습니다.
그런대 막상 받고 관련 문서 좀 뒤적뒤적 하니까,,, 이거 좀 책임이 무거워졌습니다.
솔직히 여기있는 기능을 이번 달 안에 다 만족스럽게 사용할 수 있을지가 의문이에요 ㅠㅠ.
이거 사실상 그냥 제 넉두리가 되버렸는데, '이 보드 정말 좋네요~ 꺄~' 하는것보다 보드를 받게된 솔직한 감상을 적어보고자,,, 본격적인 글은 이제부터 가겠습니다.


사실 키트를 받으면서 제일 놀란게, USB 케이블이,,, 꽤나 좋은걸 주셨네요. 마침 스마트폰 케이블이 부족했는데,,, 아니 체험하는데 쓸껍니다. 네.



아두이노와 같이 사용할 수 있게끔 핀해더가 포함되 있습니다. 본인이 보유하고 있는 Arduino Mega 2560 R3 와 호환이 될지는 잘 모르겠습니다. 라이브러리가 UNO 에서 사용하는 Atmega328p 에 맞추어져 있다면 세로 라이브러리를 만들거나 적당히 포팅해서 쓰겠는데,,, 제가 이상한건지 라이브러리를 공개해주셨다는데 못찾겠어요! 

핀해더들에 좀 더 아쉬운점은 역시 추가 적층이 어렵습니다. 보드 자체에 기능이 많긴 하지만 좀 아쉽긴 합니다.
다른 아두이노용 쉴드를 사용할 예정이셨다면 추가적으로 적층용 핀해더를 구매해두시는게 좋을것 같습니다.



코인형 배터리와 리듐폴리머 등을 연결할 수 있게 커넥터가 왔습니다. 코인형 배터리가 (그럴것 같진 않지만)전체 전원을 담당하는것인지, 아니면 비상전원 등으로 사용되는지는 좀더 문서와 데이터시트를 찾아볼 필요가 있을것 같습니다. 



적당히 크기 비교해보시라고 다른 보드들을 몇개 나열해봤습니다. 초록색 보드가 BoT-CLE110Test 보드입니다.

아마 다른 개발자들이나 대학생 분들의 실습/개발용 키트 정도가 맨 오른쪽 보드 크기일 겁니다(혹은 좀더 크거나)
소형 프로토타입 제작을 고려한 보드의 경우 중앙에 있는 보드와 비교해보시면 감이 오실겁니다
자작 MCU 모듈 등과 비교해봤을때 위의 붉은 보드 두개와 비교해보시면 됩니다. 
BoT-CLE110 Test 보드의 경우 Arduino UNO와 크기가 딱 맞도록 제작이 되어있고 Mega 2560 등과 비교해봤을 때 조금 작다는 느낌입니다. 


보드가 지원해주는 센서들의 모습입니다. 온도센서, Cds, 포텐셔미터가 보입니다. 다른분들의 개봉기를 좀 봤는데, 스마트폰으로 앱을 설치해서 값을 확인해볼 수 있는 모양입니다. 



그리고 그 위에 LED가 달려있습니다. 네, RGB LED가 달려있습니다. 조금 의외의 페리퍼럴 이었습니다. RGB LED를 달아주는 보드가 솔직히 좀 생소했습니다. 보통은 LED 어레이 등을 달아줄텐데, 꽤 신경쓴 모습이 보입니다. 
아마 하드웨어 PWM 과 연결되어 있을것으로 예상됩니다. BLE 모듈 자체가 이런 페리퍼럴을 제어해 줄 IO가 마련되어 있습니다. 마찬가지로 GPIO도 있습니다.



솔직히 이 보드에서 제일 놀란점이 이겁니다.

진동모터가 달려있습니다.

ㅇㅂㅇ!!!!?!?!?!?! 진동모터!? 제가 이상한건진 모르겠습니다만, 부저를 달아둔 보드는 많이 접해봤습니다. 진동모터는 솔직히 처음입니다. 보통은 고정시켜두고 사용하는 보드들이 많아서 부저를 많이 달아주는데, 특이하게 진동모터가 달려있습니다. 아무래도 이동용 디바이스에 사용을 고려한게 아닐까 싶습니다. 



그리고 BLE 모듈입니다. 지금은 이벤트중이라 이 Kit 를 사면 모듈도 하나 준다고 합니다. 저한태는 기회가 없을것 같지만!
다른 모듈과 사용할 수 있는지는 모르겠습니다(많이들 쓰는 HC 시리즈 라든지,,,). 되면 정말 좋겠지요. 문서로 사용할 수 있게끔 되어있는지 찾아보아야 할 것 같습니다. 

아직 실사용은 못해봤습니다.
다른분들을 보니 벌써 앱까지 설치해서 태스트해본 분도 계시더군요. 좋습니다. 
저도 열심히 삽질해서 정보공유하겠습니다.^^!
삽질기를 원하시는 분은 저에게 오세요!

문서화도 꽤 잘되어 있다고 생각됩니다.
보통 이런 보드들을 구매할 때, 저는 제일먼저 문서화, 개발자가 응용할 수 있도록 길을 얼마나 터주는지 등을 고려합니다. 저는 그래도 고통을 인내하는 타입이긴 합니다만, 정보가 부족하면 정말,,, 키보드를 하도 꽝꽝 쳐대서 남아나질 않습니다;. 

"여기 보드가 있구요. 행운을 빕니다. Good Luck^^" 

타입의 개발보드도 정말 싫어하는 편입니다. 어느정도 튜토리얼이 있거나, 제 래벨에서 응용 가능하다 싶은 보드를 고려하는 편입니다.


칩센사에서 제공해주는 데이터시트와 메뉴얼을 받을 수 있는 곳입니다. 해당 보드는 BoT-CLE110 관련 PDF 를 받으시면 됩니다. 테스트 키트용 PDF 뿐만 아니라 모듈의 PDF 까지 받아두셔야 합니다. 

모듈의 메뉴얼을 보면 대부분의 조작은 UART 통신을 이용하도록 되어있습니다. 라이브러리를 제작하시려는 분들은 이 메뉴얼을 보고 사용하시는 환경의 Serial(UART)통신 관련 기능을 이용하시면 됩니다. 그 외 Kit 의 데이터시트 등을 볼 수 있었습니다. Kit 에는 UART를 USB를 통해 이용할 수 있는 USB to Serial 변환 칩을 내장하고 있습니다. 그냥 USB 연결해서 AT 명령어를 통해 테스트해보는것이 좋을것 같습니다. 그외 별도로 RX, TX 를 따로 빼내었고, 모듈의 전압레벨은 3.3v 이기 때문에 Kit 가 이를 고려했는지도 확인해볼 필요가 있어보입니다. 

아두이노와는 핀해더를 통해 연결하도록 권장하고 있고, 기타 다른 리눅스 개발보드 등에서는 USB to Serial을 통해 연결하도록 권장하고 있는 듯 합니다. 

이쯤되면 그냥 이 보드 하나만 가지고도 테스트해볼건 다 해볼 수 있을것 같습니다. 그래도 보드를 받은 목적에 맞게 제가 보유하고 있는 보드들에서 사용해볼 생각입니다. 

"본 글은 아이씨뱅큐가 진행하는 칩센의 블루투스 4.1 모듈 테스트 키트 무상 체험단의 일환으로 ICbanQ의 지원을 받아 작성되었습니다" 

 

BoT-CLE110 Test Kit 개봉기

 

※ 본 글은 아이씨뱅큐가 진행하는 칩센의 블루투스 4.1 모듈 테스트 키트 무상 체험단의 일환으로 ICbanQ의 지원을 받아 작성되었습니다. http://www.icbanq.com/shop/

 

 

 

 

개봉기를 시작하겠습니다.

 

 

통보 하루만에 제품이 배송되어 왔군요. ICBanq의 무상체험 지원은 역시 스피드인가 봅니다. ^^

최근 많은 이들의 관심을 받고 있는 BT LE(Low Energy)이기에 상당한 기대감으로 제품을 개봉합니다.

 

 

 

제품을 담고 있는 상자의 크기는 생각보다 작습니다.

 

BPi를 올려 보았을 때 가로, 세로 길이가 크게 차이 나지 않습니다.

 

 

 

 

자, 이제 상자를 열어서 내용물을 확인해 보겠습니다.

 

 

왼쪽 상단 부터 시계 방향으로 micro USB 5pin cable,  설명서, 전원케이블 , 헤드소켓(+헤드핀) , 테스트 보드 입니다.

사소한 것이지만 꼭 필요한 핀들까지 구색을 갖춘 세심함이 느껴집니다. ^^

 

 

 

이제 주인공인 테스트 보드를 살펴보겠습니다.

 

 

 

 

크기는  68.6mm(W) X 53.3mm(H)로 100원 동전과 비교한 모습니다. 아두이노와 직접 연결해서 사용할 목적으로 크기를 맞춘 듯합니다.

 

 

 

보드의 정면 전체 모습입니다.  많은 슬라이드 스위치, 버튼 , vibrator, micro USB port, RGB LED, Light sensor 등이 보입니다.

설명서에 따르면 온도, 빛의 센싱이 가능한데, PIO(Periperal),AIO(Analog), DIO(Digital),PWM등을 외부에서도 control 할 수 있게 해 놓았으니 필요하다면 다른 센서들로 추가 구성도 가능 하겠군요.

 

 

블루투스 모듈은 Csr의 BT 4.1을 지원하는 칩이 적용되어 있습니다.

 

 

AIO port 쪽 모습입니다.

 

 

 

 

AIO0에 온도센서, AIO1에 빛 센서, AIO2에 가변저항이 연결되어 있군요.  

 

USB , PIO , PWM port 쪽 모습입니다.

 

 

P10과 P11은 switch와 LED가 연결되어 있고,  PWM0에는 RGB LED의 R(ed) , PWM1에는 G(reen),  PWM2에는 B(lue)가 연결되어 있습니다.  그리고 마지막으로 PWM3에는 vibrator Moter가 연결되어 있습니다. 

 

이 슬라이드 스위치들은 위로 올리면 kit 내부 회로에 의한 동작이고 , 내리면 외부 회로(아두이노 등등)에 의해 control되도록 하고 있습니다. 단, 전원에 해당하는 것은 내리면 3V coin cell battery 인가, 올리면 차단입니다. 

 

 

 

이어서 측면 모습입니다.

 

 

 

 

뒷면은 아래와 같습니다.

 

 

Coin cell battery 자리가 위쪽에 있습니다 .그리고 칩센의 엠블림이 보이고, 버젼정보등이 인쇄되어 있습니다.

 

 

 

우선 보드 이상 유무를 체크 하기 위해 Coin cell battery를 장착하고 스위치를 조작해 봅니다.

 

 

 

다행히 이상은 없군요.^^   On board 상태로 RGB LED 및 스위치 , 버튼에 의한 LED 정상 동작합니다.

참고로 진동모터는 외부전원(5V adapter or micro USB port)으로만 동작하도록 되어 있네요. 전력소모를 고려한 것 같습니다.

 

 

 

이상은 BoT-CLE110 Test Kit 제품을 개봉하여 크기, 모양, 구조 등을 한번 살펴보고 보드 이상유무 체크를 간단히 해 보았습니다.  

 

 

 

 

다음에 이어질 실질적인 테스트를 위해 Android App을 설치해 놓겠습니다.

 

 

 

동봉된 설명서에 제품 메뉴얼 및 android app 정보가 나와있습니다. Google Play에서 BoT-CLE110으로 찾으면 됩니다.

 

이상으로 개봉기를 마치겠습니다.

 

 

 

 

※ 본 글은 아이씨뱅큐가 진행하는 칩센의 블루투스 4.1 모듈 테스트 키트 무상 체험단의 일환으로 ICbanQ의 지원을 받아 작성되었습니다. http://www.icbanq.com/shop/

 

아두이노 호환 4.3 TFT LCD 모듈 (JUTF43)

 

 

 

기존 장비의 교체 없이 시리얼 인터페이스만으로 최단 기간 내에 사용자의

시스템에 그래픽 GUI 환경을 구축가능!

 

아두이노와 완벽호환되는 4.3 인치 TFT LCD,

국내 생산으로 더욱 믿음가는 제품입니다 :)

자세한 상품내역은 다음에서 확인하세요 :)

 

http://www.icbanq.com/P005699113/B

 

 

 

 

 

라즈베이파이로 텔레그램 봇 만들기[6] - 텔레그램 CLI(lua)에 메모 기능 넣기

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다]

사용한 품목


1) 라즈베리파이B+ 베이직 키트: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005607887

 

들어가면서


 지난 포스팅까지는 텔레그램 CLI를 이용하기 위해 사용하는 lua와 sqlite3의 연동하는 방법과 간단한 코드를 봤다. 이제는 메세지를 받아서 어떤 메시지인지 확인하여 삽입(insert), 삭제(delete), 검색(select)하는 것에 대하 포스팅 하도록 하겠다. 

lua 문자열 처리


 

  특정 언어로 데이터베이스와 연동하기 위해서는 해당 언어의 문자열 처리방식에 대해 알아야 한다. 각 언어마다 문자열 처리 방식이 다르므로 lua의 문자열 방식에 대해 간단하게 알아보고 넘어가도록 하겠다. 아래 URL을 참고해도 좋다. 

http://lua-users.org/wiki/PatternsTutorial

http://namirde.blogspot.kr/2010/04/p11.html

http://lua-users.org/wiki/StringLibraryTutorial

일반적으로 문자열을 더하기 위해서 lua에서는 '..' 나 '+' 을 사용한다. 간단한 예이다.

a= 'world'

"hello"..a or "hello" + a    

 ==> "hello world"가 된다.

 

 데이터베이스의 데이터를 받아왔을 때 문자열인 경우도 있지만 숫자인 경우도 있다. 그러므로 문자열로 처리하기 위해서는 숫자를 문자열로 만들어주는 기능이 필요하다.

str = tostring("123")

 위에서도 언급했듯이 텔레그램 봇은 삽입, 검색, 삭제 기능이 있다. 그러므로 각 명령어를 받아서 쉘처럼 각 기능을 처리해야 한다. 텔레그램 자체는 문자열을 받는 것이므로 이 문자열을 잘라서 어떤 문자인지 판단해야 한다. 그러므로 문자열 자르는 기능, 특정 문자열을 찾는 기능, 문자열의 길이를 확인하는 기능이 필요하다.

string.sub(문자열, 시작 위치, 끝 위치)

  • 문자열에서 시작위치와 끝위치까지 자른다.

string.len(문자열)

  • 문자열의 길이를 구한다.

string.find(문자열, 찾는 문자열)

  • 문자열에서 찾는 문자열 찾아서 위치를 반환한다.

 

lua와 sqlite3을 연동한 텔레그램 메모 만들기


 이제 관련 문자열 만드는 것도 다 처리했으니 아래에 소스를 첨부한다. 그냥 빠르게 짜기 위해서 문자열 길이를 받고 자르고 해서 그렇게 좋은 효율을 가지는 코드는 아니다. 또한 나는 개발자가 아니므로 좋은 코드를 만드는 것보다 빠르게 코드를 만드는 것에 의의를 뒀다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
sqlite3 = require("lsqlite3")
db = sqlite3.open('memo.db')
function on_msg_receive(msg)
    memo_help_msg = "메모 [내용] [키워드]"
    no_msg = "[*] 번호 [*]\n"
    time_msg ="\n[*] 시간 [*]\n"
    content_msg = "\n[*] 내용 [*]\n"
    keyword_msg = "\n[*] 키워드 [*]\n"
    local m_msg = string.lower(msg.text) 
    local start_s, end_s = string.find(m_msg, "검색")
    local start_m, end_m = string.find(m_msg, "메모")
    local start_d, end_d = string.find(m_msg, "삭제")
    if(string.lower(msg.text)=="hello")then
        mark_read(msg.from.print_name, ok_cb, false)
        send_msg(msg.from.print_name, "world", oc_cb,false)
    elseif(msg.text=="올ㅋ")then
        mark_read(msg.from.print_name, ok_cb, false)
        local regdate = ""
        local content = ""
        local keyword = ""
        for row in db:nrows("SELECT * FROM test"do
            regdate = tostring(row.regdate)
          content = tostring(row.content)
          keyword = tostring(row.keyword)
          message = string.format("%s%s%s%s%s%s",time_msg,regdate,content_msg,
content,keyword_msg,keyword)
                  send_msg(msg.from.print_name, message, oc_cb,false)
        end
    elseif(start_s == 1 and end_s == 6) then
        mark_read(msg.from.print_name, ok_ck, false)
        default_query = "SELECT * FROM test "
        start_c, end_c = string.find(m_msg,"내용")
        start_k, end_k = string.find(m_msg,"키워드")
        start_t, end_t = string.find(m_msg,"시간")
        if( start_c == 8 and end_c == 13)then
            content_query = "where content like '%"
            content_to_find = string.sub(m_msg,15,string.len(m_msg))
            end_query = "%'"
            final_query = string.format("%s%s%s%s",default_query,content_query,
content_to_find,end_query)
            for row in db:nrows(final_query) do
             no = tostring(row.id)
               regdate = tostring(row.regdate)
             content = tostring(row.content)
             keyword = tostring(row.keyword)
             message = string.format("%s%s%s%s%s%s%s%s",no_msg,no,time_msg,
regdate,content_msg,content,keyword_msg,keyword)
                        send_msg(msg.from.print_name, message, oc_cb,false)
            end
        elseif( start_k == 8 and end_k == 16)then
            keyword_query = "where keyword like '%"
            keyword_to_find = string.sub(m_msg,18,string.len(m_msg))
            end_query = "%'"
            final_query = string.format("%s%s%s%s",default_query,keyword_query,
keyword_to_find,end_query)
            for row in db:nrows(final_query) do
             no = tostring(row.id)
               regdate = tostring(row.regdate)
             content = tostring(row.content)
             keyword = tostring(row.keyword)
             message = string.format("%s%s%s%s%s%s%s%s",no_msg,no,time_msg,
regdate,content_msg,content,keyword_msg,keyword)
 
             send_msg(msg.from.print_name,message,oc_cb,false)
            end
        elseif( start_t == 8 and end_t == 13)then
            send_msg(msg.from.print_name,v,oc_cb,false)
        end
    elseif(start_m == 1 and end_m == 6)then
        save_message = "\n[*] 저장 완료 [*]"
        start_memo, end_memo = string.find(m_msg,"메모%s+")
        start_memo, end_content = string.find(m_msg,"메.*%s")
        insert_content = string.sub(m_msg,end_memo+1,end_content-1)
        insert_keyword = string.sub(m_msg,end_content+1,string.len(m_msg))
        local tablefill = [[INSERT INTO test VALUES (NULL, datetime('now','
localtime'),']]..insert_content..[[',']].. insert_keyword..[[');]]
        db:exec(tablefill)
        send_msg(msg.from.print_name,"[*] 내용\t:\t"..insert_content.."\n[*] 
키워드\t:\t"..insert_keyword..save_message,oc_cb,false)
    elseif(start_d == 1 and end_d == 6)then
        save_message = "\n[*] 삭제 완료 [*]\n"
        start_memo, end_memo = string.find(m_msg,"삭제%s+")
        delete_id = string.sub(m_msg,end_memo+1,string.len(m_msg))    
        send_msg(msg.from.print_name,delete_id,oc_cb,false)
        local deletefill = [[DELETE FROM test where id =']]..delete_id..[[';]]
        db:exec(deletefill)
        send_msg(msg.from.print_name,save_message,oc_cb,false)
    end
end
function ok_cb(extra, succes,result)
end
cs

 

     명령어는 문자열에서 특정 문자(검색, 삭제, 메모)의 위치가 어디인지 판단하여 시작위치가 1이고 끝나는 위치가 6이면 문자열의 첫 두글자에 내가 찾는 문자가 있다는 것을 의미한다. 재밌게도 lua에서는 한글 한글자를 3바이트로 인식하는 것을 알 수 있었다.  

     예를 보도록 하자. 아래 그림과 같이 a라는 변수에 "테스트"를 넣고 string.find함수로 문자열의 위치를 찾았다. 아래 보는 것과 같이 "테"의 시작 위치가 1이고 끝나는 위치가 3이다. 응? 한글이 2바이트 인 것을 고려하면 시작위치가 1이고 끝나는 위치가 2이여야 하는데 3이다. 뭔가 다른게 잘못되어 그렇다고 볼 수 있는데 "스"와 "트"의 경우를 봐도 3바이트 인 것을 알 수 있다.

 

그래서 2글자로 이루어진 명령어(검색, 메모, 삭제)를 이용하기 때문에 그 string.find를 이용하여 해당 글자의 시작이 1이고 끝이 6인 것을 판단해야 한다. 하지만 '올ㅋ'는 그냥 문자열 비교를 했다. 그 이유는 올ㅋ의 경우 모든 리스트를 출력하는 것이기 때문에 추가적인 인자(정보)가 필요없다. 하지만 다른 명령의 경우는 메모를 하기 위해서는 [내용], [키워드]가 필요하고, 검색을 위해서도 어떤 종류(내용, 키워드)를 볼 지, 그 내용이 어떤 것인지 알아야 한다. 그러므로 검색이나 메모를 하기 위해서 앞 2글자가 검색, 메모, 삭제인 경우 뒤쪽의 인자들을 잘라서 처리해야 한다.

     이를 위해 아래와 같이 66, 67줄에 있는 string.find 명령어를 특정문자와 결합하여 정규표현식처럼 사용할 수 있다. 그러면 명령어의 포맷은 [명령종류][공백][인자1][공백][인자2]에서 명령어의 종류와 인자 1과 인자 2를 잘라서 가져올 수 있다.

        start_memo, end_memo = string.find(m_msg,"메모%s+")
        start_memo, end_content = string.find(m_msg,"메.*%s")

     그래서 아래와 같이 메모[공백]테스트1[공백]테스트2로 입력을 받는다.
그래서 이 명령을 받은 프로그램은 아! 지금 메모를 하고 내용으로는 테스트1,
키워드로는 테스트2를 넣구나라는 것을 알 수 있다. 




     이번은 검색[공백]키워드[공백]테스트2를 받는다.
 이를 받으면 텔레그램 봇은 "아! 키워드에 테스트2라는 단어가 포함된
메모를 검색하라는 거구나!"라고 판단한다.
여기서 나타나는 시간은 메모를 저장했을 때 당시의 시간을 입력한 것이다. 

 

     여기서 나타나는 시간은 메모를 저장했을 때 당시의 시간을 입력한 것이다. 그래야 내가 어떤 시점에 이런 메모를 썼다는 것을 알 수가 있고, 비슷한 메모를 구분 할 수 있는 근거가 된다고 생각한다. sqlite3의 테이블은 id, regtime, content, keyword로 나뉘어져 있다. id는 각 메모를 구분하기 위한 숫자이고, regtime은 메모를 저장할 당시의 시간, content는 내용, keyword는 내용을 구분할 수 있는 핵심 단어나 카테고리로 추후에 검색할 때 유용하게 사용할 수 있는 부분이라고 할 수 있다.

     아래 사진은 텔레그램 웹버전으로 명령을 내린 것이다. [*]으로 봇이 보내준 것인지 내가 내린 명령인지 쉽게 판단할 수 있을 거라 생각한다. 

 

 

 

 

 


마치면서


     이번 포스팅을 마치면서 lua와 sqlit를 연동하는데 어려움을 겪었다. 특히 아래처럼 특정 문자열은 정적으로 들어가고 특정 문자열을 동적으로 들어가는데 이를 합쳐서 db에 요청하는 것이 헷갈렸다.

"[*] 내용\t:\t"..insert_content.."\n[*] 키워드\t:\t"..insert_keyword..save_message

 sqlite3를 코딩하는 것도 lua를 코딩하는 것도 이번 텔레그램 봇을 만들면서 쓰는 것이 처음이라 더욱 생소했다. 하지만 이번 기회를 통해 특정언어를 사용하기 위해 먼저 데이터 형식에 대해 가장 먼저 알아봐야 한다는 사실을 알 수 있었다. 각 언어마다 데이터 형식과 처리방식이 다르기 때문이다. 이번 달에 포스팅은 이걸로 마치고 다음 포스팅에서는 궁극적으로 원했던 "짤방저장소"를 만들어 보도록 하겠다.

관련 상품


라즈베리파이2 보드: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005652343

라즈베리파이2 베이직 키트: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005655515

손톱두이노: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005668577

라즈베리파이 전용 방열판 (소): 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P002110427

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다]

 

라즈베이파이로 텔레그램 봇 만들기[5] - 텔레그램 CLI(lua)와 sqlite3 연동

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다]

사용한 품목


1) 라즈베리파이B+ 베이직 키트: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005607887&LType=R

 

들어가면서


 지난 포스팅까지는 간단한 텔레그램 CLI를 이용하여 간단한 봇을 만들어봤다. 이제는 텔레그램을 이용한 메모장을 만들어보려한다. 나처럼 여러 장소에 메모를 적어서 관리를 잘 못하는 사람에게 도움이 될 거라 생각한다. 그리고 텔레그램 CLI의 사진 보내기 기능을 함께 쓰면 짤방저장소로 사용할 수 있어서 재밌을 것 같다.

luarocks


 

  lua에서 사용하는 module들을 관리하기 위해서 사용하는 패키지가 luarocks다. 리눅스 환경에서 apt-get install과 같은 느낌을 받았다. 그러므로 쉽게 설치하기 위해 luaroacks를 설치하도록 하자. 공식 홈페이지는 아래와 같다.

https://luarocks.org

 아래와 같은 순서대로 luarocks를 설치하도록 하자. 복사 하기 쉽도록 아래와 같이 명령어를 놔뒀다.

1
2
3
4
5
wget http://luarocks.org/releases/luarocks-2.2.2.tar.gz
tar zxpf luarocks-2.2.2.tar.gz
cd luarocks-2.2.2
./configure; sudo make bootstrap
sudo luarocks install luasocket
cs


아래 사진은 직접 위의 명령어를 입력하면서 나오는 결과를 함께 보여준다. 익숙하지 않는 환경을 설치하는 데 도움을 줄 수 있을 거라 믿는다.

 

 

그 다음에는 lua와 sqlite와 연동하는데 필요한 프로그램을 apt-get install로 하나, luarocks로 2개를 설치한다. 솔직히 이 중에서 어떤 것이 정말 필요한 것이고 쓸모 없는 것인지 판단이 안서지만, 모두 설치해서 환경설정에 관한 스트레스를 받지 않도록 하자.

1
2
3
apt-get install libsqlite3-dev
luarocks install luasql-sqlite3
luarocks  install lsqlite3 
cs

 

 

 

 

lsqlite3 사용, 그리고 기본적 문법


 관련 모듈을 설치했으면 이제 직접 lua와 sqlite3을 연동하도록 하자. 먼저 lua와 sqlite3를 연동하는 것을 성공하고 난 뒤에 텔레그램 CLI에 붙이도록 하자. 바로 소스에 넣으려고 했다가 문제가 발생할 수 있으니 하나하나 만들고 붙이는 방법을 택하여 알 수 없는 오류에 처하는 상황을 최대한 줄인다.

아래 코드와 같은 소스를 하나 만든다. 간단하게 설명하도록 하겠다.

sqlite3 = require("lsqlite3")

    • lsqlite3모듈을 불러와서 해당 인스턴스를 sqlite3에 저장한다.

local db = sqlite3.open('test3.db")

    • sqlite3는 test3.db라는 파일을 불러와서 연결 인스턴스를 db라는 변수에 저장한다.

db:exec[[

CREATE TABLE test(id, content);

INSERT INTO test VALUES (1, "Hello World');

INSERT INTO test VALUES (2, "Hello world');

]]

    • test3.db에 id,와 content 열을 만든다.


for row in db:nrows("SELECT * FROM test") do

    print(row.id, row.content)

end

    • [1, hello world], [2, hello world]를 출력한다.

db:close() 

      • 데이터베이스 연결을 끊는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sqlite3 = require("lsqlite3")
local db = sqlite3.open('test3.db')
 
db:exec[[
  CREATE TABLE test(id, content);
  INSERT INTO test VALUES (1'Hello World');
  INSERT INTO test VALUES (2'Hello World');
]]
 
for row in db:nrows("SELECT * FROM test"do
  print(row.id, row.content)
end
 
db:close()
cs

 

 위 코드를 만들고 lua 파일명.lua를 실행하면 아래와 같은 결과가 나온다. 이는 test3.db에 테이블을 만들고 데이터를 입력하고 출력하는 작업을 보여준다. 

 

 

 


마치면서


 이번 포스팅에서 텔레그램 CLI와 sqlite3을 연동하기 위한 방법을 봤다. 텔레그램 CLI는 lua로 이루어져 있으므로 lua와 sqlite3 연동하기 위해 모듈을 쉽게 설치하도록 도와주는 luarocks를 설치했다. 이를 이용하여 설치 완료했고 간단하게 lua와 sqlite3를 연동하는 코드를 봤다. 다음 포스팅에서는 본격적으로 텔레그램에서 메시지를 받아서 sqlite3에 데이터를 넣고(insert) 빼고(delete) 보여주는(select)하는 것에 대해 알아보도록 하겠다.

관련 상품


라즈베리파이2 보드: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005652343

라즈베리파이2 베이직 키트: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005655515

손톱두이노: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005668577

라즈베리파이 전용 방열판 (소): 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P002110427

 

 

 

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다]

 

스타트업의 상상을 현실로…오픈소스 하드웨어의 힘

출처: 머니투데이 테크 M 편집부

URL: http://news.mt.co.kr/mtview.php?no=2015062314530531884

 

지난 2월 초, 오픈소스 하드웨어 커뮤니티에 반가운 두 가지 소식이 들려왔다.

먼저 영국의 라즈베리파이 재단이 기존 모델보다 고성능 CPU와 메모리를 장착한 ‘라즈베리파이2’를 기존 모델과 같은 가격인 35달러에 출시한다는 소식이었다. 라즈베리파이의 성공에 편승해 보다 고성능의 호환보드를 앞다퉈 출시해 온 타 제조사와 다른 행보였다. 라즈베리파이는 낮은 가격에 최소한의 필요 부품만 최적화해 업그레이드했다. 성능은 대폭 향상시키면서도 기존 모델로 형성된 생태계를 그대로 유지할 수 있게 한 것이다.

이와 동시에 마이크로소프트(MS)는 올 여름 출시 예정인 운영체제(OS) ‘윈도10’을 라즈베리파이2에서 실행될 수 있도록 이식해 무료로 제공하겠다고 발표했다. 기존 오픈소스 하드웨어는 리눅스나 안드로이드와 같은 오픈소스 OS를 기반으로 전 세계 개발자들의 자발적인 참여로 성장해왔다. 그런데 오픈소스 진영에 관심이 없었던 MS가 데스크톱이나 서버용 OS인 윈도를 신용카드 크기의 라즈베리파이용으로 제작한다니 놀라운 소식이 아닐 수 없었다.


오픈소스 진영과 손잡는 IT 공룡들
MS가 라즈베리파이2용으로 제작한 윈도10은 현재 프리뷰 버전을 무료로 사용할 수 있다. 또 다른 거대기업인 구글은 라즈베리파이의 본고장인 영국에서 ‘피카데미(Picademy)’라는 교육기관을 설립해 교사를 대상으로 오픈소스 하드웨어 활용 및 프로그래밍 무료 교육을 실시하고 있다. CPU 제조사인 인텔은 ‘아두이노’와 호환되는 ‘갈릴레오 보드’로 오픈소스 하드웨어 시장에 진입한 후 최근에는 우표 크기의 x86 기반 ‘에디슨 보드’를 출시했다.

전 세계 IT시장을 선도하고 있는 이들 공룡기업이 신용카드 크기의 작은 하드웨어 보드에 무료로 OS를 제공하고 다른 국가에서 교육기관을 운영하기로 한 이유는 무엇일까? 오픈소스 진영이 이제 더 이상 흔히 ‘긱(Geek)’이라고 불리는 소수 마니아층만의 소유물이 아니며 산업 트렌드 전반에 영향을 미치고 있음을 시사하는 사례라고 볼 수 있다.

시장을 주도하는 IT 기기는 사물인터넷(IoT)과 웨어러블 기기의 활성화가 가속되면서 데스크톱 PC에서 스마트폰, 태블릿과 같은 모바일기기로 중심이 이동한지 얼마 되지 않은 상황임에도 점점 더 소형화되고 가벼워지고 있다. 이렇게 소형화된 IT기기는 기기의 동작방식을 담고 있는 프로그램이 적은 전력으로 실행돼야 한다. 키보드, 마우스, 모니터와 같은 전통적인 입출력 장치는 이제 필수가 아닌 선택 사항이다. 이러한 시대적인 흐름에 가장 잘 부합하는 것이 오픈소스 하드웨어이고 거대 기업들도 이들과 협력해 공존해야 하는 세상이 온 것이다.

오픈소스 하드웨어는 누구나 제작, 수정, 배포할 수 있도록 설계가 공개돼 있다. 이러한 오픈 라이선스 정책은 개인이나 단체, 분야나 제품에 관한 차별을 두지 않고 적용된다. 하드웨어 상에서 수행되는 소프트웨어나 파생 하드웨어에도 제한을 두지 않으므로 활용될 수 있는 분야에 한계가 없다. 라즈베리파이를 컴퓨터 교육용으로 개발했던 최초 제작자는 라즈베리파이가 화분의 습도를 측정해 자동으로 물 주는데 사용될 것이라고 상상했을까?
오픈소스 하드웨어가 많은 관심을 받으면서 확산될 수 있었던 이유는 저렴한 가격에 구입할 수 있고 제작사나 커뮤니티를 통해 활용법에 대한 정보를 쉽게 얻을 수 있기 때문이다. 전통적인 가전제품은 제조사가 개발한 제품을 구매한 사용자가 정해진 매뉴얼에 따라 사용하는 반면, 오픈소스 하드웨어는 사용자가 이용할 소프트웨어와 주변장치를 선택해 어떤 용도로든 자유롭게 사용할 수 있다.

오픈소스 하드웨어의 성공 여부는 커뮤니티로부터 얼마나 많은 참여와 지원을 받는가에 의해 결정된다. 오픈소스 소프트웨어가 개발자들의 자발적인 참여에 의해 기능이 추가되고 버그가 수정되면서 완성도가 높아지는 것과 마찬가지다.

오픈소스 하드웨어도 제품 설계 단계부터 해당 하드웨어 동작하는 오픈소스 소프트웨어 개발자와 연계해 기능을 확장할 수 있는 외부 기기를 제작하는 메이커(maker)의 참여를 유도하는 것이 필수적이다.

‘해커스페이스(Hackerspaces)’나 ‘팹랩(Fab Lab)’ 같은 오픈소스 하드웨어 커뮤니티에서 활동하는 사람들은 전문 개발자, 발명가, DIY(Do It Yourself) 전문가가 많다. 이들은 직접 기기를 제작해 기능을 추가하거나 기존 기능을 확장시키는 것을 좋아하며, 이를 다른 사람들과 나누면서 성취감을 얻는다. 오픈소스 하드웨어가 커뮤니티 구성원들로부터 관심을 받게 되면 구성원들의 자발적인 참여를 통해 새로운 아이디어가 제시되고 의견 교류도 일어난다.

커뮤니티에서 적극적으로 참여하고 지원하는 오픈소스 하드웨어는 활용분야가 다양해지고 완성도도 높아진다. 이러한 커뮤니티의 참여가 지속되면 전문적인 지식이 없는 일반 사용자도 가전제품처럼 쉽게 사용할 수 있을 정도로 발전하게 된다. 한 예로 라즈베리파이는 오픈소스 멀티미디어 플레이어 커뮤니티인 ‘코디(Kodi, 구 XBMC)’의 지원으로 낮은 하드웨어 사양에서도 풀(Full) HD 영상을 재생할 수 있을 정도로 최적화돼 홈 엔터테인먼트 기기로 사용하기에 불편함이 없다. 영화나 음악 감상을 위한 목적으로 라즈베리파이를 구매하는 일반 사용자도 많아지고 있다.

오픈소스 하드웨어의 발전에는 커뮤니티와 함께 이들 하드웨어와 기능 확장을 위해 필요한 각종 센서나 전자부품, 스타터키트 등을 쉽게 구매할 수 있는 ‘엘레먼트(Element)14’, ‘RS’, ‘스파크펀(SparkFun)’, ‘씨드 스튜디오(Seed Studio)’와 같은 온라인 쇼핑몰의 역할도 크다고 할 수 있다.

 


아두이노 -오픈소스 하드웨어의 선두 주자
시중에 출시된 오픈소스 하드웨어에는 수많은 종류가 있고 파생된 호환보드도 매우 많다. 아두이노(Arduino) 플랫폼은 2005년 이탈리아에서 교육용으로 개발된 이후 현재 대표적인 오프소스 하드웨어로 자리 잡았다.


아두이노는 ‘ATmega’나 ‘Cortex-M3’ CPU 기반의 저사양 오픈소스 하드웨어 플랫폼으로 인터랙티브 기기를 개발하고 다양한 센서나 스위치로부터 입력을 받고, 라이트나 모터, 다른 물리적 출력을 제어하는데 사용될 수 있다. 아두이노 보드는 독립적으로 실행될 수도 있고 컴퓨터에서 실행되는 다른 소프트웨어와 통신할 수도 있다.

CPU와 전압, 입출력 핀의 개수, RAM 용량, USB 포트 수, LAN 지원여부 등 스펙에 따라 ‘우노(Uno)’, ‘듀(Due)’, ‘레오나르도(Leonardo)’, ‘미니(Mini)’, ‘나노(Nano)’, ‘릴리패드(LilyPad)’, ‘윤(Yun)’ 등 수많은 종류의 호환 보드가 제공된다.

어떤 보드는 임베디드용으로 설계돼 확장 가능한 인터페이스를 제공하지 않는 것도 있으며, 3.7v 전원 또는 5v 이상의 전원을 필요로 하는 모델도 있다. 구현하려는 프로젝트에 맞는 보드를 확인하려면 아두이노 사이트에서 제공하는 모델별 스펙을 비교해 적합한 모델을 선택하면 된다.

아두이노는 마이크로컨트롤러의 동작 과정을 단순화함으로써 다른 하드웨어 플랫폼에 비해 저렴하며 윈도, 맥(Mac) OS X, 리눅스 등 여러 OS에서 실행되는 통합 개발환경으로 ‘아두이노 IDE’를 제공한다. C++ 라이브러리 및 AVC C 개발언어까지 지원함으로써 초보자부터 전문가까지 사용할 수 있다.

 

 


라즈베리파이-교육용에서 범용 미니컴퓨터로
라즈베리파이는 신용카드 크기의 저가형 컴퓨터로, 영국의 라즈베리파이 재단에 의해 2012년 초기 모델이 출시됐다. 브로드컴의 ‘BCM2835 SoC’를 기반으로 입출력을 위해 HDMI와 USB 포트를 제공하며 하드디스크 대신에 SD카드에 저장된 OS 이미지를 로드해 실행한다. 전원은 휴대폰 충전에 사용되는 마이크로 USB 5V 입력을 사용하며 네트워킹을 위해 이더넷 포트가 제공된다.

작은 폼팩터에서도 데스크톱 PC를 사용하는 것처럼 컴퓨터 모니터나 TV에 화면 출력이 가능하고 표준 키보드나 마우스를 사용하고 인터넷에 연결될 수 있도록 최적화돼 설계됐다.

OS는 리눅스 ‘데비안’을 라즈베리파이 하드웨어에 최적화한 ‘라즈비안(Raspbian)’이 많이 사용되는데, 최근에는 리눅스 ‘우분투’나 ‘페도라’ 사용층도 늘어나고 있다.

또 사용목적에 맞게 OS 커널과 멀티미디어용 오픈소스 라이브러리를 최적화하는 활동이 여러 커뮤니티에서 활발하게 이뤄지고 있다. 동영상이나 음악 감상 등에 최적화된 ‘OpenELEC’, ‘OSMC’, ‘Volumio’ 등이 대표적이다.

‘스크래치’나 ‘파이선’ 같은 언어를 이용해 프로그래밍 교육용으로 사용할 수도 있다. 또 기존에 리눅스용으로 개발된 수많은 오픈소스 소프트웨어를 이용할 수 있어 웹 브라우징이나 동영상 재생, 스프레드시트 작성, 워드프로세싱이나 게임처럼 범용 목적으로도 사용된다.

라즈베리파이는 외부 하드웨어와 연결하기 위해 26개 핀으로 구성된 ‘다용도 입출력 포트(GPIO)’를 제공한다. GPIO는 3.3V와 5V 전원, 그라운드 같은 전력공급부터 입.출력을 위한 핀을 사용한 I2C, SPI, UART, 직렬 통신 연결 등 다양한 용도로 사용할 수 있다.

 


갈릴레오-인텔의 IoT 공략 포석
데스크톱 및 서버용 CPU 제조업체인 인텔도 IoT와 웨어러블 트렌드에 발맞춰 2013년 10월 아두이노 호환보드인 ‘갈릴레오’를 출시해 오픈소스 하드웨어 시장에 진입한다. 이어 2014년에 일부 하드웨어 스펙을 변경한 2세대 제품인 ‘갈릴레오 Gen2’와 우표 크기의 ‘에디슨’ 제품까지 출시했다.

갈릴레오 보드는 인텔의 32비트 펜티엄 SoC인 쿼크 X1000(Quark X1000) 기반의 마이크로컨트롤러 보드로서 아두이노 Uno R3용 하드웨어 및 소프트웨어와 호환되도록 개발된 오픈소스 하드웨어이다. 기존 아두이노 기반의 보드는 임베디드 환경에서 사용할 수 있도록 작은 크기로 제작되므로 개발환경을 구성하려면 여러 가지 별도의 부품을 연결해야 하는 불편함이 있다.

하지만 갈릴레오는 기본적으로 외부 연결이 필요한 전원, 이더넷 포트, 마이크로 SD 슬롯을 제공하고 있어 아두이노 개발환경을 구성하기에 보다 편리하다. 그 외에도 미니 PCI-E, 6핀 3.3V USB TTL UART헤더, USB 호스트 포트, USB 클라이언트 포트 등 복잡한 제품을 만들 때에도 입출력 포트가 부족하지 않도록 제공하고 있다. 아직까지 아두이노나 라즈베리파이만큼 많은 사용자를 보유하고 있지는 않다.

하지만 아두이노 개발환경을 편리하고 효율적으로 구성할 수 있는 장점을 제공하는 보드로, 향후 개발 및 교육용 플랫폼으로 점차 자리잡아갈 것으로 예상된다.

 


다목적 활용 가능한 오픈소스 하드웨어
공개 라이선스 정책을 기반으로 하는 오픈소스 하드웨어는 세부 설계가 공개돼 있고, 이를 확장해 사용하는 데 제약이 적기 때문에 다양한 목적으로 사용되고 기능을 확장하는데 한계가 없다.

하드웨어 성능이 다소 부족하기는 하지만, 기존 데스크톱 PC에서 사용하던 웹 브라우징, 문서 작성, 게임 등을 실행하고 멀티미디어 재생기로도 활용할 수 있다. 에뮬레이터를 실행해 기존 오락실 게임을 실행하거나 윈도3.1 OS를 실행하기도 한다. 리눅스 OS를 이용해 웹이나 FTP 서버, 메일서버, 파일서버 등의 용도로도 사용할 수 있다. 예를 들어 웹 서버에 워드프레스와 같은 설치형 블로그 서비스를 설치해 개인 웹사이트를 운영하는 것도 가능하다.

하드웨어와 소프트웨어, 프로그래밍의 기본원리를 익히기 위한 교육용으로도 사용될 수 있다. 실제 많은 교육현장에서 오픈소스 하드웨어를 파이썬이나 스크래치와 같은 언어의 프로그래밍 교육을 하고 있다. IoT 입문자에게 필요한 프로그래밍 언어의 하드웨어 입출력을 제어하는 기술을 익히는 데는 오픈소스 하드웨어가 가장 적절한 플랫폼이라고 할 수 있다.

오픈소스 하드웨어는 기존 데스크톱 PC 환경과 다르게 키보드, 마우스, 모니터와 같은 전통적인 입출력 장치 대신에 특정 목적을 수행하는 소형모듈, 센서들과 상호작용한다. 이를 위해 오픈소스 하드웨어들은 외부 장치와 통신하기 위한 스펙과 방법을 제공한다. 예를 들어 라즈베리파이는 26개 핀으로 구성된 GPIO를 제공하는데 각 핀의 고유 번호를 통해 프로그램 상에서 데이터를 입출력할 수 있고, 외부 장치로부터 전원을 받거나 제공할 수도 있다.

 

프로그램 코드에서 각 핀에 연결된 센서로부터 온도, 습도 정보를 읽을 수도 있고 LED 전구를 제어할 수도 있다. 모터의 회전방향과 속도를 조절해 RC카를 만들거나 연결된 스피커로 소리를 재생할 수도 있다. 개발과정에서는 여러 전자부품이나 센서를 이용해 개발과 디버깅 과정을 거치게 되는데, 브레드보드(Breadboard)를 이용하면 별도의 회로판을 구성하거나 납땜 작업이 필요없어 편리하다.

자주 사용하는 센서나 전자부품들을 모아 스타터킷(Smarter Kit)이라는 이름의 패키지 형태로도 판매하고 있어 초보자들이 쉽게 접근할 수 있다. 오픈소스 하드웨어에 연결돼 특정 기능을 수행하도록 모듈 형태로 제공되는 쉴드(shield) 기판은 GPIO 커넥터를 이용해 여러 개의 쉴드를 레고 블럭을 조립하는 것처럼 쌓을 수도 있다.

 


프로토타입을 집에서도 만든다
오픈소스 하드웨어는 개발자나 하드웨어 제작에 관심이 있는 일부 전문 사용자층을 중심으로 소규모로 개발돼 왔다.

그러나 커뮤니티를 통해 기반 인프라 및 활용분야가 넓어지고 사용할 수 있는 오픈소스 소프트웨어 콘텐츠가 다양해짐에 따라 점차 전문가가 아닌 일반 사용자도 사용할 수 있을 정도로 보편화되고 있다. 일반 소비자를 대상으로 하는 가전제품 시장은 전통적으로 규모의 경제 원리가 적용되는 곳인데, 오픈소스 진영의 완성도와 발전 속도는 이제 대형 제조업체를 긴장시킬 정도로 빠르게 진화하고 있다.

전 세계의 오픈소스 하드웨어와 오픈소스 소프트웨어 전문가들의 집단지성이 자발적으로 모여 보다 효율적인 방안들을 도출해내고 실험하고 수정 보완하는 개발 작업이 진행되고 있기 때문이다.

모든 사물이 네트워크에 연결돼 삶을 풍요롭게 하려는 IoT가 현실화되고 있는 상황에서 오픈소스 하드웨어는 아이디어를 현실로 구체화하는데 견인차 역할을 하게 될 것이다. 오픈소스 하드웨어는 회로 설계 및 도면과 같은 세부 정보가 공개돼 있고 무료 라이선스 정책을 사용한다.
이를 활용한 제품이나 소프트웨어를 개발하는데 로열티를 제공하는 등 제약이 적고 높은 완성도의 시제품을 빠른 시간 내에 개발할 수 있어 하드웨어 스타트업 업체가 쉽게 시장에 진입할 수 있는 발판이 되고 있다. 기존에는 고가의 연구개발시설을 통해서만 제작이 가능했던 프로토타입을 집에서도 만들 수 있게 된 것이다.

 


글 김순근 한국마이크로소프트 책임연구원

 

28기 무상체험단 모집: 4.3 TFT LCD 모듈

 

 

 

아이씨뱅큐에서 드디어 28기!

아두이노 (Arduino) 완벽 호환 4.3 TFT LCD 모듈 체험단을 모집합니다 :)

요모조모 쓸모가 많은 녀석이죠?

이제 국내생산으로 더욱 보장된 품질의 모듈을 만나보세요.

이미지를 클릭하시면 신청가능한 페이지로 연결됩니다 ~

 

 

 

재미있게 즐기는 아두이노 시리즈 -술래잡기 게임

시작하기 


재미있게 즐기는 아두이노 시리즈를 기획중입니다.

아두이노는 그 어떤것도 상상하면 만들수 있게 해주는 신통방통한 친구입니다.

가볍게, 재밌게, 즐겁게 아두이노를 가지고 놀 수 있도록 다양한 시도를 하고 있습니다.

 

오늘 만들어볼 즐기는 아두이노는 바로 술래잡기 게임입니다.

먼저 영상을 보고 시작하겠습니다.

 

 



 

그렇습니다. 자신의 차례가 되면 버튼을 눌러 화살표가 나오는 명령대로 수행하면 됩니다.

 

 

재료준비하기


우선, 게임판을 구해야 하는데 다이소나 홍대에 있는 버터를 좋아합니다.

가격도 저렴하고 재미있고, 디자인이 상대적으로 좋은 것들이 많이 있습니다.

게임판을 파는데 가격은 잘 기억이 나지 않지만 비싸지는 않습니다.

 

직접 만들어 쓰셔도 좋겠습니다.^^

 

 

 

서보모터 분해하기


이런 장난감 만드는데 서보모터만한것이 없는것 같습니다.

가격도 저렴하고 쉽게 구할 수 있습니다.

 

한가지, 우리는 서보모터의  원래 기능인 각도로 움직이는 기능보다는 단지 저렴하고 작은 모터를 원했습니다.

그래서 과감하게 분해합니다.

 

 

IMG_0012 IMG_0013 IMG_0014 IMG_0016 IMG_0017

 

녀석 결국 모터입니다. 작은 보드에서 플러스와 마이너스를 납땜으로 분리해냅니다.

 

 

 

게임판에 연결하기 


IMG_0018 IMG_0019 IMG_0020 IMG_0021 IMG_0022

 

서보모터와 화살표를 글루건으로 잘 붙입니다.

회전을 해야 함으로 주변에 닺지 않도록 주의합니다.

그리고 판은 서보 모터가 바닥에 역시 닺지 않도록 블록등으로 받혀줍니다.

 

 

 

연결하기


서보모터는 궁극적으로 5V와 Gnd를 연결해주면 회전합니다.

따라서 두개의 선을 각각 A0, A1 즉, 아날로그 0번과 1번에 연결해 줍니다.

 

그리고 버튼을 준비하여 330오옴 저항을 연결하고 Gnd로 다시 하나의 선을 3번핀으로 연결하고

다른 한쪽은 5V에 연결해줍니다.

버튼을 누르면 5V가 되어 인지할 수 있습니다.

 

덤으로 13번 핀에는 LED를 연결하여 줍니다.

 

 

프로그래밍


게임의 로직은 너무 도 간단합니다.

버튼을 누르면 10초동안 모터를 회전시켜줍니다.

그리고 화살표가 멈추면 게임이 끝납니다.

 

다시 버튼을 누르면 회전합니다.

자신의 차례가 오면 버튼을 눌러 주면 됩니다.

 

따라서 프로그램도 아날로그 핀 0번과 1번을 출력으로 설정하고

필요에 따라 HIGH, 혹은 LOW로 설정하여 사용하시면 됩니다.

 

소스는 깃헙에 있습니다.

소스 , https://github.com/dimplejuno/FunArduino

 

 

관련상품 : DFRobot 비기너 키트 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005605397&catg_code=101141152