바로 이전 글에서 알아보았던 'ATTiny85 (Digispark Board) 보드' 글의 마지막에 추가내용으로 스마트폰이나 PC를 연결하면 키보드 입력하는 것과 같이 ATTiny85의 출력값을 읽어올 수 있다고 했었습니다. 이것을 이용해서 스마트폰과 PC의 잠금해제를 하는 키(Key)를 만들어 보겠습니다. 일종의 하드웨어 Key 같은 것이죠. 요즘도 그런지는 모르겠지만 예전 고가의 소프트웨어들은 불법복제를 방지하기 위해서 USB 형태나 시리얼 포트에 꼽는 형태로 하드웨어 키를 제공하기도 했습니다. 하드웨어 키가 PC에 꼽혀 있지 않으면 프로그램이 실행되지 않았던 것이죠. ATTiny85 를 이용하면 이런 것도 구현이 가능 하겠네요. 아무튼 이 글에서는 비밀번호로 잠겨 있는 PC와 스마트폰을 ATTiny85 보드를 연결하면 잠금해제 되도록 구현해 보겠습니다. 스마트폰의 경우는 안드로이드 폰을 이용하였고 아이폰은 잘 모르겠습니다. OTG 케이블을 이용해서 폰에 연결을 해야 하거든요.
먼저 이 글을 이해하려면 먼저 아래의 글을 읽어서 ATTiny85 (Digispark Board) 보드에 대한 설치와 일반적인 내용을 알아야 하고 개발환경의 세팅이 되어 있어야 합니다.
위와 같은 소스 입니다. DigiKeyboard 라이브러리를 이용해서 'Hello Digispark!' 라는 문자열을 매 5초 마다 키보드를 누르듯이 출력해 주는 예제 입니다. 이것을 이용하면 잠금 해제 장치를 만들 수 있습니다. 다만 5초 마다 계속 입력이 되므로 Loop 가 아니라 Setup 부분에 넣어주면 됩니다.
테스트 삼아 위의 소스가 잘 작동하는지 업로드를 해 봅니다. 업로드는 위의 사전 참조글에도 설명이 되어 있듯이 아두이노 IDE 의 업로드 버튼을 누른 후에 ATTiny85 보드를 60초 이내에 USB 포트에 연결해야 정상적으로 업로드가 됩니다. 업로드 시 장치가 이미 연결되어 있다면 업로드가 되지 않습니다.
사실 이 글을 아두이노 카테고리에 넣을까 말까 하다가 어차피 ATTiny85 보드라고 하더라도 개발은 아두이노 IDE 를 사용해서 개발을 하니 아두이노 카테고리에 넣었습니다. ATTiny85는 ATmel 에서 개발한 저전력(Low Power) AVR 8비트 MCU(Micro Controller Unit) 칩 입니다. 발음은 '에이티 타이니 85' 입니다. ㅎ 그냥 읽으라고 하면 '어티니85' , '애티니85' 라고 읽는 분들도 많을 것입니다. 사실 그게 발음상 더 이쁘긴 하죠. 아무튼 ATmel 에서 만든 Tiny 한 MCU 칩이라는 뜻인 것 같습니다. ATTiny85 는 시리즈가 여러가지 입니다. 25, 45, 85 시리즈가 있는데 2 로 시작하면 2KB 의 프로그래밍 가능한 공간이 있는 제품이고 마찬가지로 4KB, 8KB 의 프로그래밍 공간이 제공 됩니다. (부트로더가 2KB를 차지하므로 85의 경우 실제 사용가능한 공간은 6KB 정도) 이 칩을 보드 형태로 만들어서 사용하기 쉽게 만든 제품이 Digistump 의 Digispark 라는 제품 입니다. 자체적으로 USB 단자도 달려 있어서 PC에 연결해서 사용하기 쉽게 되어 있습니다. 물론 제가 리뷰할 제품은 알리익스프레스에서 구입한 복제품 입니다. Digispark 정품은 비싸거든요. (정품: 8달러, 복제품: 1.2 달러에 무료배송)
아두이노 나노, 프로 미니와의 크기 비교 입니다. 대략 아두이노 프로 미니의 2/3 정도의 크기 입니다. 가격은 제일 저렴 합니다. 그러므로 간단한 기능을 구현이나 소형화 프로젝트 시 사용하기에 적당한 보드 같습니다. 게다가 USB 단자를 통해서 PC와 바로 연결이 가능하므로 프로그램 업로드를 위해서 USB UART 보드가 필요한 프로 미니와 비교하면 장점이라고 할 수 있겠습니다.
ATTiny85 보드의 구조 입니다. 스마트폰 충전에 사용되는 Micro USB 단자를 통해서 PC와 연결되며 6개의 입출력 핀이 제공 됩니다. 5V 레귤레이터가 달려 있어서 외부전원을 연결할 경우 7V ~ 16V 까지 연결이 가능 합니다. 하지만 보드의 보호를 위해서 12V 이하로 연결해 주는 것이 좋습니다. 이 제품은 Micro USB 단자가 있는 제품 이지만 Digispark 오리지널 제품은 USB 메모리처럼 USB 단자가 붙어 있습니다.
Digispark 오리지널 제품, http://digistump.com/products/1
ATTiny85(Digispark) 보드의 뒷면 입니다.
■ ATTiny Chip Spec.
Features
• High Performance, Low Power AVR® 8-Bit Microcontroller
• Advanced RISC Architecture
– 120 Powerful Instructions – Most Single Clock Cycle Execution
– 32 x 8 General Purpose Working Registers
– Fully Static Operation
• Non-volatile Program and Data Memories
– 2/4/8K Bytes of In-System Programmable Program Memory Flash
• Endurance: 10,000 Write/Erase Cycles
– 128/256/512 Bytes In-System Programmable EEPROM
• Endurance: 100,000 Write/Erase Cycles
– 128/256/512 Bytes Internal SRAM
– Programming Lock for Self-Programming Flash Program and EEPROM Data Security
• Peripheral Features
– 8-bit Timer/Counter with Prescaler and Two PWM Channels
– 8-bit High Speed Timer/Counter with Separate Prescaler
• 2 High Frequency PWM Outputs with Separate Output Compare Registers
• Programmable Dead Time Generator
– USI – Universal Serial Interface with Start Condition Detector
– 10-bit ADC
• 4 Single Ended Channels
• 2 Differential ADC Channel Pairs with Programmable Gain (1x, 20x)
• Temperature Measurement
– Programmable Watchdog Timer with Separate On-chip Oscillator
– On-chip Analog Comparator
• Special Microcontroller Features
– debugWIRE On-chip Debug System
– In-System Programmable via SPI Port
– External and Internal Interrupt Sources
– Low Power Idle, ADC Noise Reduction, and Power-down Modes
1. Support for the Arduino IDE 1.0 + (OSX/Windows/Linux).
2. Power via USB or External Source or 7-16 v to 5 v (automatic selection).
3. The On - board, 150 ma 5 v Regulator.
4. Built - in USB and serial was debugging).
5. 6 I/O Pins (2 are informs the for USB only if your program actively communicates over USB, otherwise you can use all 6 even if you are programming via USB).
6. 8 k Flash Memory (about 6 k after bootloader).
7. The I2C and SPI (vis USI).
8. PWM on 3 pins (more possible with Software PWM).
9. The ADC on 4 pins.
10. The Power LED and the Test/Status leds.
■ ATTiny85 Module Pin 정의
All pins can be used as Digital I/O (모든 핀들은 디지털 I/O 핀으로 사용 가능함)
Pin 0 → I2C SDA, PWM (LED on Model B)
Pin 1 → PWM (LED on Model A)
Pin 2 → I2C SCK, Analog In
Pin 3 → Analog In (also used for USB+ when USB is in use)
Pin 4 → PWM, Analog (also used for USB- when USB is in use)
Pin 5 → Analog In
이제 PC 에서 보드를 인식시켜서 아두이노 IDE 로 작성한 프로그램을 업로드 해 보겠습니다.
먼저 드라이버를 설치해야 합니다. 아두이노 IDE 는 당연히 먼저 PC에 설치되어 있어야 합니다. Digispark 홈페이지의 설명에 따르면 드라이버는 윈도우OS + 아두이노 IDE 버전이 1.6.6 보다 높은 버전일 경우 설치해야 한다고 나와 있습니다. 현재 저는 윈도우7에 아두이노 IDE 버전은 1.6.8 버전을 사용하고 있으므로 드라이버를 다운로드 받아서 설치 해야 합니다. 어쩐지 그냥 PC에 연결했더니 드라이버 설치를 못 하네요.
드라이버를 다운로드 받고 압축을 풀면 Install Drivers.exe 라는 파일이 있습니다. 이것을 실행해서 드라이버를 설치해 줍니다.
잠시 후 완료 메시지와 함께 드라이버 설치가 완료 됩니다.
아두이노 IDE 를 실행하고 '파일 -> 환경설정' 으로 들어 갑니다. '추가적인 보드 매니저 URLs' 에 위와 같이 'http://digistump.com/package_digistump_index.json' 를 붙여 넣기하고 확인 버튼을 눌러 줍니다.
아두이노 IDE 에서 '툴 -> 보드 -> 보드매니저' 를 실행해 줍니다. 그럼 위와 같은 창이 뜨는데 타입에 Contributed 를 선택 합니다. 두 번째 보이는 'Digistump AVR Boards by Digistump' 를 클릭하면 '설치' 버튼이 나타나는데 이것을 클릭해서 설치 해 줍니다.
'툴 -> 보드' 에 들어가서 'Digispark (Default - 16.5mhz)' 보드를 선택해 줍니다.
이것으로 ATTiny85 보드에 프로그램을 업로드 하기 위한 준비는 모두 끝났습니다.
윈도우가 아닌 다른 OS (Mac, Linux) 사용자는 아래의 URL을 참고해서 설치해 주세요.
파일 -> 예제에 들어가면 다른 Digispark 예제도 많이 있으니 개발에 참고하면 되겠습니다.
이상으로 ATTiny85 칩을 사용한 Digispark 보드의 사용에 대해서 알아 보았습니다. 아두이노를 쓰기엔 가격도 그렇고 왠지 부담스러울 경우나 IoT(Internet of Things) 같은 소형화가 필요한 프로젝트를 진행할 경우 등에 유용하게 사용할 수 있을 것으로 생각되는 ATTiny85 (Digistump Digispark Board) 보드에 대해서 알아 보았습니다.
※ 추가 내용 (2016.06.28) : ATTiny85 보드는 PC에 연결해도 COM 포트(통신 포트)에 잡히지가 않기 때문에 센서 등의 출력값을 시리얼모니터로 볼 수 없습니다. 이럴 때는 'DigiKeyboard' 라이브러리를 사용해서 값을 PC의 메모장 같은데 찍어보면 됩니다. ATTiny85의 출력값을 마치 키보드를 눌러서 입력하듯이 바꿔주는 기능 입니다. 아두이노 IDE 에서 '예제 -> DigisparkKeyboard -> Keyboard' 예제를 참고하시면 충분히 구현이 가능 합니다. 스마트폰(안드로이드)에서도 메모장 등을 실행시키고 OTG 케이블을 이용하여 ATTiny85 보드를 연결하면 출력값을 볼 수 있습니다. 단, 센서가 전류를 많이 필요로 한다면 정상적인 값이 나오지 않을 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include"DigiKeyboard.h"
void setup() {
// don't need to set anything up to use DigiKeyboard
}
void loop() {
// this is generally not necessary but with some older systems it seems to
// prevent missing the first character after a delay:
DigiKeyboard.sendKeyStroke(0);
// Type out this string letter by letter on the computer (assumes US-style
// keyboard)
DigiKeyboard.println("Hello Digispark!");
// It's better to use DigiKeyboard.delay() over the regular Arduino delay()
// if doing keyboard stuff because it keeps talking to the computer to make
// sure the computer knows the keyboard is alive and connected
※ 추가 내용 (2016.12.18) : 나의 경우는 Mac 으로도 아두이노 코딩을 하는데 구형 맥북이라 OS X 10.6 (스노우 레오파드)를 사용하고 있다. 이럴 경우 아두이노 IDE 버전 1.6.1 이상은 설치가 되지 않는다. 그래서 위의 방법으로 Digispark 환경설정을 하기가 어렵다. 이럴 경우 Digispark Arduino 라는 것이 있다. Digispark 관련 모든 환경설정이 되어 있는 1.0.4 버전의 아두이노 IDE 이다. 그냥 다운받아서 실행하면 Digispark 를 별도의 설정 없이 바로 사용할 수 있다. 다운로드는 http://sourceforge.net/projects/digistump/files/DigisparkArduino-MacOSX-1.0.4-May19.zip/download 이다. 실행 후 아래와 같이 설정하고 코딩하면 된다.