class: center, middle # **아두이노(ARDUINO)을 이용한
IoT(사물인터넷) 체험 ** 2014-10-24 박동희 http://dh8.kr/workshop/iotworkshop --- # 소개 0. 워크숍 소개 1. 자기소개 (관심사 취미, 고민거리, 만들고 싶은 것?) 2. 워크숍에서 기대하는것 --- # 프로그램 미리 다운로드! 위치: http://dh8.kr/workshop/iotworkshop/files - Arduino IDE 1.0.5 - Python 2.7 - Pyserial - nRF UART 2.0 (안드로이드 앱: 플레이 스토어에서 검색하여 설치) --- # IoT (Internet of Things) - Machine Social network - 키워드: **센싱**, 네트워크, 서비스 - 'The Social Web of Things' by 에릭슨: http://www.youtube.com/watch?v=i5AuzQXBsG4 --- # IoT Devices
--- # IoT 프로토콜 - TCP/IP와 다른점 - 모든 센서가 IP를 가질 필요는 없다. (End to End가 아님) - 일방향 통신: 센서->서버(예: 물탱크 세는것 체크) 또는 서버-> 센서(예: 수도꼭지 제어) - 프로토콜이 TCP/IP에 비해 간단해야 한다? 왜? - IoT 디바이스는 IP enable device에 연결(예/ 스마트폰) 되어 동작.
--- # (예상되는) IoT 아키텍처
- **End devices** 말단 기기. 센싱 또는 제어 - **Propagator nodes** End Devices와 인터넷상에 있는 Integrator functions을 연결하는 게이트웨이. - **Integrator functions** 빅데이터 분석, 정보시간화, 사람과 IoT의 인터페이스 제공 --- # IoT 디바이스의 다양한 통신 방법
--- # 이번 워크숍에서 다루는것. - IoT End Device 만들기. - 하드웨어 프로토타이핑 (아두이노) - 센싱과 제어 - 통신은 Bluetooth 4.0 (End Devices와 스마트폰 간 통신) - nRF8001(BLE IC)을 통해서 스마트폰에서 End Device(아두이노) 제어 또는 센서값 읽기 --- # 체험 순서 1. 재료 관찰, 멀티미터 사용 2. LED 켜기 (5V 전원 이용: 활동1) 3. LED 제어 (디지털 출력: 활동2) 4. 버튼 읽기 (디지털 입력: 활동3) 5. 빛센서 읽기 (아날로그 입력: 활동4) 6. 통신 (UART) 7. Bluetooth 4.0 8. BLE로 LED 켜기 / 빛 센서 읽기 (활동:5) 9. IoT 통신 모듈 소개. Bluetooth, Wifi 모듈 --- # 재료 소개 키트에서 재료를 꺼내 봅시다.
--- # 빵판 관찰
--- # 멀티미터 관찰
해보기 - 빵판 내부 연결을 찾아보자. --- # 아두이노 IDE/드라이버 설치 [아두이노 Windows에 설치 Step By Step](install.html) --- # 아두이노 관찰
--- # 활동 1: 아두이노의 전원을 이용하여 LED를 켜보자.
해보기 - 아두이노 전원의 전압을 측정해보자. (힌트 5V와 GND 핀헤더) - 아두이노 핀헤더의 5V(+), GND(-)를 각각 LED 다리에 연결하자. **잘** 동작할까요? --- # 활동2: 아두이노에서 LED켜기 (디지털 출력) ```lang=c++ int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(1000); } ``` 아두이노 프로그래밍 구조. setup(), loop() 해보기: Digital 12번 핀에 LED를 연결하고 1초에 한번 씩 깜빡이도록 만들어 봅시다.
--- # (흔한) 디바이스 제어 구조 센서 읽기 -> 처리하고 -> 출력!
--- # 디지털과 아날로그
--- # 활동3: 버튼 입력(D7) 받아 LED 켜기
``` void setup() { pinMode(buttonPin, INPUT); } void loop() { value = digitalRead(buttonPin); } ``` --- # 활동4: 빛센서
해보기 - LDR(Light Dependent Resistor)의 저항 크기를 측정하자! --- # 활동4: 아날로그 입력 회로 구성
--- # 활동4: 아날로그 입력 analogRead ```lang=c++ int value = analogRead(A0); // return 0~1023 if (value > 512) digitalWrite(ledPin, HIGH); else digitalWrite(ledPin, LOW): ``` 해보기 - 빛센서를 읽어서 빛센서 값을 시리얼 터미널에 출력 해보자. ```lang=c++ void setup() { Serial.begin(9600); } void loop() { value = analogRead(A0); Serial.println(value); } ``` --- # 통신 IC간 통신. 시리얼 통신
--- # 통신: UART UART(Universal Asynchronous Receiver/Transmitter) 이름으로 알 수 있듯이 리시버와 트랜시버가 따로 존재하고 데이터의 클럭 정보가 없는 비동기식 통신 방식을 말한다.  시작(start bit)과 끝(stop bit) 신호가 있고 그 사이를 일정 시간으로 잘라서 데이터의 비트를 구분한다. UART는 통신의 속도가 설정가능하고 데이터의 형식(갯수) 설정이 가능하다. UART의 종류로 RS–232, RS–422, RS–485 등이 있다. --- # UART로 LED 제어 ```lang=c++ int ledPin = 13; int value; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available()) { value = Serial.read(); if (value == '1') { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } } ``` 해보기: - 시리얼 터미널에서 '1'을 입력하여 LED를 켜보자. --- # Python에서 UART로 LED 제어 ```lang=python >>> import serial >>> s = serial.Serial('/dev/ttyUSB0') >>> s.write('1') 1 >>> s.write('0') 1 >>> ``` button.py http://pastebin.com/BsCEHYAa ```lang=python from Tkinter import * import sys import serial port = '/dev/ttyUSB0' # TODO: change port name speed = 9600 def send(char): ser = serial.Serial(port,speed) ser.setDTR() ser.flushInput() ser.write(char) ser.close() def toggle_switch(): if switch_button["text"] == "Turn On": send('1') switch_button["text"] = "Trun Off" else: send('0') switch_button["text"] = "Turn On" root = Tk() root.title('Switch') switch_button = Button(root, text="Turn On",command=toggle_switch) switch_button.pack() root.mainloop() ``` --- # Bluetooth 4.0 BT Low Energy Device types - dual-mode devices - BT classic and BT low energy - single-mode devices - BT low energy only --- # Bluetooth 4.0 Design Goals - Worldwide operation: 2.45Ghz band - Low cost: small and efficient - Robust: adaptive frequency hopping(recovering packet) - Short range: personal area network - Low power: a few years for a sensor measuring. --- # Bluetooth 4.0 이용한 제품 - 하기스 TweetPee http://www.youtube.com/watch?v=EswHWn95Yqw - Tile http://www.youtube.com/watch?v=pqDm3gZNZPM - PowerUp 3.0 https://www.kickstarter.com/projects/393053146/powerup-30-smartphone-controlled-paper-airplane --- # 아두이노와 nRF8001 연결
통신방식: SPI --- # nRF8001 UART Service 아두이노에 업로드 http://dh8.kr/workshop/iotworkshop/Adafruit_BLE_UART.zip 압축 푼후 Adafruit_BLE_UART 폴더를 Arduino의 libraries 폴더 안에 넣고, Arduino IDE를 다시 시작합니다. Arduino IDE 시작후 메뉴에서 File > Examples > Adafruit_BLE_UART > echoDemo 메뉴를 클릭후 펌웨어를 업로드 한다. --- # nRF UART 2.0 앱 설치 안드로이드 Playstore에서 nRF UART 2.0 검색 후 설치
디바이스에 연결할때, 모듈 주소 확인 ``` UART Rssi = -30 C1:64:9F:00:85:27 ``` --- # Adafruit_BLE_UART > echoDemo 실행 1. (아두이노 IDE) 아두이노 리셋 후, 시리얼 터미널을 켠다. 2. (안드로이드) nRF UART 2.0 앱에서 Connect 버튼을 누룬다. 3. (안드로이드) IoT 워크숍 재료 쉬트에 기재된 nRF8001의 주소를 찾아서 접속한다. 4. (안드로이드) 문자를 입력하여, 화면에 echo가 되어 돌아 오는것을 확인한다. --- # Adafruit_BLE_UART > echoDemo 펌웨어 Remix! 해보기: ##### 앱 -> 하드웨어 제어 (LED 제어) - 펌웨어를 수정하여, nRF UART 2.0 앱에서 문자 '1'을 보낼때, Digital 7에 연결된 LED를 켜고, '0'이 보낼때 LED를 꺼보자. ##### 하드웨어 -> 앱 (빛센서값 읽기) - 펌웨어를 수정하여, Analog 0 핀에 연결된 빛센서의 값(0~1023)을 읽어서 nRF UART 2.0 앱에 출력하자. --- # Bluetooth IC - TI cc2540 - nRF 51 - CSR # Wifi - TI CC3000 - ESP8266 개당 5달러도 안됨! --- # IoT Gateway (Propagator nodes) - OpenWRT (http://www.dragino.com/) - Raspberry Pi - Beagleboard --- # 워크숍 정리 - IoT 소개 - 아두이노로 프로토타이핑 - 디지털 출력 - 디지털 입력 - 아날로그 입력 - Bluetooth 통신 - 하드웨어 프로토타이핑의 문턱이 낮아짐 - 전체 프로세스 경험 쉬어짐 기획 -> 개발(소프트웨어/하드웨어) -> 데모 -> 피드백 --- # Learning spiral
--- # 회고 - 체험 소감 - 더 해보고 싶은것이 있다면? - 공유 (3분) --- # 참고 - nRF UART 2.0: http://dh8.kr/workshop/iotworkshop/nRFUART_GoogleAPI_Android4.3+.zip BLE 안드로이드앱 샘플 코드 - https://github.com/tdicola/BTLETest - http://www.crinity.com/Newsletter/2013/06/IT_contents1.html - Rethinking the Internet of Things (2003) --Francis daCosta - https://learn.adafruit.com/getting-started-with-the-nrf8001-bluefruit-le-breakout/ - https://github.com/NordicSemiconductor/ble-sdk-arduino - http://redbearlab.com/