Internet of Things ( 사물인터넷 ) 설계시스템 Last Updated 2015.12.02
참고자료 휴인스 Home : http://www.huins.com Smart IoT 블로그 : http://smartiot.tistory.com Putty 프로그램 : http://smartiot.tistory.com/5 스마트농장안드로이드앱 : http://smartiot.tistory.com/39
Gateway Raspberry Pi 라즈베리파이 & 개발환경 3
Raspberry Pi 라즈베리파이는영국의라즈베리파이재단이학교에서기초컴퓨터과학교육을증진시키기위해만든싱글보드컴퓨터. 라즈베리파이는그래픽성능이뛰어나고가격이저렴한장점 초기 Model A, 현재 Model A+, Model B+, Model B, Raspberry Pi 2 라즈베리파이재단로고 Raspberry Pi 1 Model A Raspberry Pi compute Module Raspberry Pi 1 Model A+ Raspberry Pi 2 Model B Raspberry Pi 2 Model B+ 4
Raspberry Pi 2 https://www.eleparts.co.kr/epxdvfc8 5
Arduino vs Raspberry Pi Micro Controller 성격 Micro Computer No 리눅스 Yes C 개발언어 C, C++, Java, Python, NodeJS, Ruby... No 카메라 Yes Limit 무선환경 Yes 6
Raspberry Pi B+ 구성 40 Pin GPIO Header Broadcom BCM2835 & 512MB RAM DSI Display Connector 4 USB Ports Micro SD Card Slot 10/100 Base T Ethernet Socket 5V Micro USB HDMI Monitor CSI Camera Connector 3.5mm jack Audio/composite video 7
Raspberry Pi B2 연결 외부장치를연결하거나센서및외부 H/W 를제어하는데사용 40 Pin GPIO Header Broadcom BCM2835 & 512MB RAM DSI Display Connector Micro SD Card Slot ( 후면 ) OS 설치및저장소로사용하는 Micro SD 카드 4 USB Ports USB 장치 ( 키보드, 마우스, 무선랜등 ) 를연결 10/100 Base T Ethernet Socket 5V Micro USB HDMI Monitor CSI Camera Connector 라즈베리파이용카메라모듈을연결하는데이용 3.5mm jack Audio/composite video 8
RPI2 Technical Specifications Broadcom BCM2836 Arm7 Quad Core Processor powered Single Board Computer running at 900MHz 1GB RAM 40pin extended GPIO 4 x USB 2 ports 4 pole Stereo output and Composite video port Full size HDMI CSI camera port for connecting the Raspberry Pi camera DSI display port for connecting the Raspberry Pi touch screen display Micro SD port for loading your operating system and storing data Micro USB power source 9
Raspberry Pi OS SNAPPY UBUNTU CORE RASPBMC 10
Why Rasbian Raspbian Raspbian 은 Debian Linux 계열임 가장인기있는 ubuntu linux 도 debian linux 계열 패키지지원및관련라이브러리들이풍부함 라즈베리파이 OS 중가장많이활용되고있음 관련블로그, 학습서, 고객지원이가장많은 OS 임 Raspbian Download http://downloads.raspberrypi.org/raspbian_latest 기타 OS 다운로드 http://www.raspberrypi.org/downloads/ 11
Micro SD Card Micro SD 카드준비 Rasbian 이미지크기가 2GB 정도이나, 설치및테스트를위해최소 8GB 이상의 Micro SD 카드를준비할것을권장 Class 4 가저렴한가격에형성되어있으나, 쓰기및읽기성능을위해 Class 10 혹은 UHS-I 스펙의 Micro SD 카드를이용할것을권장. Raspbian 설치후반드시 Expand Filesystem 을할것 ( 기본설정참고 ) MicroSD 카드를 Notebook 혹은 Desktop 의리더기를통해읽고쓰기위해서는반드시 SD Card Adaptor 가포함되어야함 Class 최소성능일반적인용도 Class 2 2 MB/s SD 영상기록 Class 4 4 MB/s HD 영상기록 Class 6 6 MB/s Full HD 영상기록 Class 10 10 MB/s 연속적인 HD 이미지기록 UHS-1 10 MB/s 실시간방송 UHS-3 30 MB/s Ultra HD 영상기록 12
라즈비안 wheezy 다운로드 라즈베리공식홈페이지에서라즈비안을다운받습니다. http://www.raspberrypi.org/downloads 13
win32diskimager 다운로드 win32diskimager 를다운받습니다. http://sourceforge.net/projects/win32diskimager/ 14
SD 카드에쓰기 Image 백업 win32diskimager 를실행해서 SD 카드에다운받은라즈비안을담습니다. 라즈비안 img 파일을선택해주고현재 SD 카드가연결되어있는드라이브를확인해준후에 write 버튼을눌러 SD 카드에라즈비안운영체제를넣어줍니다. 소요시간은 5 분내외입니다. - file 관리가윈도우와는틀린환경 - 용량이 56MB 로표시됨. 이것은나중에설정으로변경이가능하니신경을안써도됩니다. 백업은반대로저장될폴더이름과이미지파일이름을입력하고 Read 클릭하면저장됨. 15
개발환경구축방법 1. 직접연결 HDMI Monitor 2. 네트워크로연결하여 Wondow 에서작업 PC 유무선공유기 3. Ethernet Cable 한개를사용하여직접연결 Ethernet Cable PC / 노트북 16
개발환경 1 HDMI 모니터연결 Internet 공유기 HDMI 케이블 Ethernet 케이블 Gateway(R-Pi) USB 키보드 / 마우스 Micro USB 5V 전원 WiFi 동글사용시공유기설정을참고하여라즈베리파이 Wlan0 설정필요함. *UART to Serial 케이블연결환경삭제 2015. 12. 04 17
개발환경구축 2 - PC 와공유기연결 USB 키보드 / 마우스 Ethernet Cable 5V Micro USB 부엉이의 IP 주소를알아야함 - 공유기상태정보에서확인 - 윈도우 cmd 창에서 arp a 탐색기나네트워크에서접속 Id: pi Password: raspberry PC 18
개발환경구축 3 Lan Cable 직접연결 USB 키보드 Ethernet Cable 5V Micro USB PC 19
Lan Cable 직접연결 - PC/ 노트북연결 1. 인터넷연결공유설정 2. 제어판 > 네트워크및공유센터 어댑터설정변경 20
Lan Cable 직접연결 - PC/ 노트북연결 1. 무선네트워크연결아이콘을마우스반대편클릭 > 속성 2. LAN 케이블을라즈베리파이와 PC 로직접연결한다. 공유탭에서 다른네트워크사용자가이컴퓨터의인터넷연결을통해연결할수있도록허용 을체크하고확인클릭 PC 재부팅 윈도 PC 가정상적으로인터넷을공유할수있도록재부팅한다. 21
Lan Cable 직접연결 - PC/ 노트북연결 PC 의명령프롬프트실행하고아래명령어입력 >arp -a 여기에선 192.168.137.22 가라즈베리파이 IP 주소 SSH ( 또는 VNC) 접속 PuTTY 또는 VNC Viewer 를실행하고라즈베리파이에접속 22
Lan Cable 직접연결 - PC 연결 자동개인 IP 주소지정 (APIA) 범위의 IP 주소를확인 여기에선 169.254.74.67 의다음번호 169.254.74.68 을라즈베리파이 IP 주소로한다. 23
Lan Cable 직접연결 - PC 연결 SD 카드를 PC 에서읽어 cmdline.txt 수정 cmdline.txt 파일을열어가장마지막라인에 IP 주소를추가한다. rootwait 다음에아래의 IP 정보 ( 169.254.x.1 ~ 254 ) 를수동으로추가합니다. 맨뒤에 ip=169.254.74.68 추가 반드시맨뒤를지우고입력 저장후 SD 카드를라즈베리파이에넣고부팅후확인 24
터미널접속 (Putty) - 터미널접속 알아낸 ip 주소를 Host Name 에적고 SSH 를선택한후 Open 을눌러서접속합니다. Putty 는 SSH, Telnet 등의원격접속을위한 Opensource S/W 이다. 다운로드주소 http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe 1. 접속할라즈베리파이의 IP 를확인하고, 입력해준다. (SSH 접속은 22 포트활용 ) 3. login id ( 기본 : pi ) 와 password ( 기본 : raspberry) 를입력한다. 2. Open 을눌러주면, 라즈베리파이에접속된다. 25
Lan Cable 직접연결 - PC 연결 PuTTY 접속화면 id : pi password : raspberry 26
Xwindow 와터미널 X 윈도우 : 표준 GUI 로유닉스의기본윈도우시스템 리눅스의기본쉘 pi@raspberry~$ _ : Shell 프롬프트 27
무선랜설정 GUI 상태에서 아래의명령어를실행하여라즈베리파이의네트워크를확인한다. $ifconfig $startx 를실행하여 GUI 화면에서 Wi-Fi 설정유틸리티실행 [Scan] 실행 [PSK] 필드에비밀번호를입력하고 [connect] 하면네트워크에연결된다. 출처 :raspberry Pi Cookbook 28
Network 확인 유 / 무선네트워크연결확인 $ ifconfig 기본적으로우선이나무선하나만연결한다. pi@raspberrypi ~ $ ifconfig eth0 Link encap:ethernet HWaddr b8:27:eb:9d:c6:ca inet addr:192.168.1.251 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: 2001:470:67:77e:ba27:ebff:fe9d:c6ca/64 Scope:Global inet6 addr: fe80::ba27:ebff:fe9d:c6ca/64 Scope:Link inet6 addr: 2001:470:67:77e:cf11:8e13:e7cc:bbc/64 Scope:Global UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:22599 errors:0 dropped:98 overruns:0 frame:0 TX packets:736 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1599253 (1.5 MiB) TX bytes:93093 (90.9 KiB) lo wlan0 Link encap:local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:220 errors:0 dropped:0 overruns:0 frame:0 TX packets:220 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:17856 (17.4 KiB) TX bytes:17856 (17.4 KiB) eth0 유선네트워크정보 wlan0 무선네트워크정보 29
Rasbian 기본명령어 1 그래픽인터페이스 (x-window) 실행 $ startx 프로그램패키지목록업데이트 $ sudo apt-get update 설치된프로그램중버전업된프로그램업데이트 $ sudo apt-get upgrade OS 버전확인하기 $ cat /proc/version CPU 버전확인하기 $ cat /proc/cpuinfo 30
Rasbian 기본명령어 2 홈디렉토리 (/home/pi) $cd ~ 현재있는디렉토리? $pwd 상위디렉토리이동 $cd.. 파일목록 $ls 아래는 myfile.txt 생성후 myfile2.txt 이름으로복사 $ echo "hello" > myfile.txt $ ls myfile.txt $ cp myfile.txt myfile2.txt $ ls myfile.txt myfile2.txt 디렉토리생성 $mkdir new_directory 파일삭제 $rm 파일네임 Superuser do sudo 명령 $ps ax $sudo kill -9 PID $lsusb 복사 $cp 이름변경 $mv 파일내용보기 $more 파일네임 $cat 파일네임 31
Rasbian 기본명령어 OS 재부팅재부팅을위해다음두가지명령중하나를선택하여사용가능 $ sudo reboot $ sudo shutdown r now OS 종료종료를위해다음두가지명령중하나를선택하여사용가능 $ sudo halt $ sudo shutdown h now $ cd 폴더네임 $ cd 홈폴더로이동 파일편집 $ nano 파일네임.c -- 파일편집키보드화살표키로이동하고종료시 ctrl-x 후저장합니까? Y 누르고같은파일네임일경우 enter 입력후빠져나옴. 기본적인리눅스명령어몇개만잘다룰줄알면된다. 32
Rasbian 기본설정 Raspberry Pi 기본설정하기 $ sudo raspi-config 33
Rasbian 기본설정 Expand File System Raspbian 이설치된 SD 카드의파일시스템을확장하는기능. 기본배포판의 메모리를 4GB 만활용. 4GB 이상의 SD 카드를이용하는경우반드시설정. Change User Password 라즈베리파이초기암호는 raspberry 이고, CirculOS 의초기암호는 1234 임. 보안을위해사용자암호를변경하고자하는경우사용. Enable Boot to Desktop/Scratch 초기부팅시에윈도우환경 (X Window), Scratch 교육환경, Console 모드 로부팅할지여부선택. 메이커구성을위해서는 Console 로시작해야함. Internationalisation Options Change Locale 지역설정옵션. 한국어변환이가능하지만, 기본설정권장 Change Timezone 시간대를설정하는옵션. Asia 에서 Seoul 을설정. Change Keyboard Layout 키보드구성변경옵션. 변경이필요없음. 34
Rasbian 기본설정 Enable Camera 라즈베리파이에카메라를연결한경우사용을위해활성화하는옵션. 설치시 Enable 로변경해야함 Add to rastrack 전세계라즈베리파이이용자분포확인을위한옵션. 이름, 메일, 지역을입 력하면 Rastrack (www.rastrack.co.uk) 사이트에등록됨 Advanced Option 라즈베리파이의고급사용자설정화면. 뒷부분에서다룸 About raspi-config Change Locale 지역설정옵션. 한국어변환이가능하지만, 기본설정권장 Change Timezone 시간대를설정하는옵션. Asia 에서 Seoul 을설정. Change Keyboard Layout 키보드구성변경옵션. 변경이필요없음. 35
Rasbian 고급설정 9. Advanced Option 선택시보임 36
Rasbian 고급설정 Overscan 디스플레이화면에크기를맞출수있는기능을설정 Hostname 호스트이름을변경하는옵션 ( 기본값 : raspberrypi) Memory Split GPU 와 CPU 가사용할메모리를할당하는옵션. X 윈도우화면을사용하지 않고메이커보드로활용하는경우, GPU 메모리를 16MB 로설정하면된다. SSH Secure Shell 의약자로, 네트워크구성이된경우다른컴푸터에서터미널창 으로원격으로접속할수있음. Device Tree 리눅스상에서하드웨어를기술하기위한데이터구조. 기본적으로사용하지 않음. 37
Rasbian 고급설정 SPI (Serial Peripheral Interface Bus) GPIO 의 SPI 기능을활성화할지여부. SPI 사용을위해서는활성화해야함. I2C (Inter-Integrated Circuit) GPIO 의 I2C 기능을활성화할지여부. I2C 사용을위해서는활성화해야함. Serail Serial 을통해 Shell 에접근할수있을지여부. 기본적으로활용하지않음. Audio Audio 출력을 Audio 단자 (3.5mm) 혹은 HDMI 로할지설정하는옵션. 기본값 은 Auto 이지만, 라즈베리파이오디오실습을위해 3.5 mm 로설정할것 Update 라즈베리파이설정툴을최신버전으로업데이트하는기능 38
웹서버구축 APM (Apache, PHP, MySql) 설치 39
Apache 설치 Apache, MySQL, PHP5, phpmyadmin 순서로설치 1. 프로그램패키지목록업데이트 $ sudo apt-get update 2. 설치된프로그램중버전업된프로그램업데이트 $ sudo apt-get upgrade 3. apache2 설치 $sudo apt-get install apache2 설치후에아래의명령어를실행하면새로운폴더가생긴것을알수있습니다. $ls al /var/ /var/www/ 라는폴더인데이폴더는아파치웹서버가실행될때기본적으로보여주는폴더이다. 예를들어브라우저에 http:// 라즈베리파이의아이피주소 / 로접속했을때보여주는렉토리입니다. 크롬이나익스플로러에서부엉이 IP 주소입력시아래와같이나오면설치가잘된것. 아래의명령어를사용하여라즈베리파이가시작할때자동으로아파치를실행하도록해줍니다. $sudo update-rc.d apache2 defaults 40
MySQL 설치 아래의명령어를사용하여 mysql 을설치합니다. $sudo apt-get install mysql-server mysql-client libmysqlclient-dev 설치할때용량이어느정도필요한지나오고계속할것인지물어봅니다. 이때 y 를입력하고엔터를치시면됩니다. * install 중간에 password 를입력하라고나오는데이때입력하는비밀번호는 mysql 의비밀번호이기때문에혼동하지않도록합니다. mysql 이처음설치되면로컬에서만접속이되도록되어있습니다. 아래의명령어를사용하여환경설정파일을수정하는화면으로이동합니다. $sudo nano /etc/mysql/my.cnf 아래의구문을찾아서아래와같이수정하여줍니다. 변경전 - bind-address = 127.0.0.1 변경후 - #bind-address = 127.0.0.1 41
PHP 설치 아래의명령어를사용하여 php 를설치합니다. $sudo apt-get install php5-common php5 libapache2-mod-php5 설치할때용량이어느정도필요한지나오고계속할것인지물어봅니다. 이때 y 를입력하고엔터를치시면됩니다. 아래의파일을하나만들어서 phpinfo.php 라는이름으로저장. $sudo nano /var/www/html/phpinfo.php 를입력후, php 정보를볼수있도록코딩을합니다. <?pho phpinfo();?> Ctrl-x 누르고 y 누르고 Enter 치고나와서, 브라우저테스트아래의 url 로확인해봅니다. http:// 서버아이피 /phpinfo.php 42
phpmyadmin 설치 아래의명령어를사용하여 phpmyadmin 을설치합니다. $sudo apt-get install phpmyadmin 설치할때용량이어느정도필요한지나오고계속할것인지물어봅니다. 이때 y 를입력하고엔터를치시면됩니다. apache2 를체크후 OK MySQL 에접속할수있는 phpmyadmin 에접속할패스워드를입력 http://ip 주소 / phpmyadmin 43
phpmyadmin 접속 브라우저에서 http://192.168.1.246/ phpmyadmin 접속 설치할때사용자이름 설치할때패스워드 44
phpmyadmin 에서 Database 확인 브라우저에서 http://192.168.1.246/ phpmyadmin 접속 Database 45
/etc/network/interfaces 파일설정 아래의파일을편집하여무선네트워크설정을수정합니다. $sudo nano /etc/network/interfaces auto wlan0 iface wlan0 inet static address 원. 하. 는. 주소 netmask 255.255.255.0 gateway 공. 유. 기. 주소 wpa-ssid SSID 이름 " wpa-psk 비밀번호 " 예 ) ssid : huins_edu 비밀번호 : huind12345 46
삼바접속 삼바 (samba) 는 SMB(Server Message Block) 또는 CIFS (Common Internet File System) 로알려져있으며리눅스와윈도우간에파일및프린터를공유할수있게해주는프로그램이다. 삼바를통해리눅스서버를타운영체제와파일을공유할수있는파일서버로도사용할수있다. 1. 삼바설치우선삼바프로토콜및삼바서버, 클라이언트와관련된의존성패키지를다음의명령어를이용하여설치한다. $sudo apt-get install samba samba-common-bin 2. 삼바유저추가및패스워드설정다음의명령어로 pi 라는삼바유저를추가하자. 그러면패스워드를물어볼것이다. 자신이원하는패스워드를입력해준다. $sudo smbpassword a pi 3. 삼바설정다음의명령어로삼바설정파일을수정해주어야한다. 다른설정을변경할필요없이파일의제일하단에새로운유저 pi 에대한설정을추가한다. $sudo nano /etc/samba/smb.conf [pi] comment = rpi samba server by girin path = /home/pi valid user = pi writable = yes browseable = yes : 작업후 ctrl-x 누르고 y 누르고나오면저장된다. comment : 유저서버설정에대한코멘트로마음대로적는다. path : 공유할폴더를지정한다. 작업폴더인 /home/pi 를지정한다. valid user : 사용가능한유저를지정 writable : 쓰기를가능하게할것인지에대한옵션 browseable : 공유폴더의목록을보여주는옵션 47
삼바접속 Window 에서접속 4. 삼바재실행설정된내용이반영될수있도록삼바를재실행시켜준다. $sudo service samba restart 5. 공유폴더접속윈도우의탐색기혹은네트워크를열어서폴더주소칸에 \\192.168.1.238\ 과같이라즈베리파이의 IP 주소를적어주면아래와같이공유를설정해둔라즈베리파이폴더에접속할수있다. 여기에서새로운디렉토리를만들고, 파일의수정, 삭제, 복사, 이동이가능하게된다. 위치 : pi 아이디 : pi 패스워드 : raspberry 48
GPIO 내부
Raspberry Pi GPIO 50
Raspberry Pi GPIO 51
GPIO 제어와 Wiring Pi 설치 패키지관리서버로부터이용가능한프로그램패키지의목록을최신버전으로업데이트 $sudo apt-get update 컴퓨터에설치된프로그램이업데이트되었으면새로운버전으로설치하게해주는명령어 $sudo apt-get upgrade 1. 소스관리툴 git 를다운로드한다. ( 오픈소스 https://github.com/wiringpi/wiringpi 의소스를체크아웃하기위해서 ) $sudo apt-get install git-core 2. wiringpi 프로젝트를통째로받아온다. $git clone git://git.drogon.net/wiringpi 3. 빌드및설치를진행한다. $cd wiringpi $./build 4. 설치확인. $gpio -v $gpio readall pi@raspberrypi ~ $ gpio -v gpio version: 2.29 Copyright (c) 2012-2015 Gordon Henderson This is free software with ABSOLUTELY NO WARRANTY. For details type: gpio -warranty 설치확인 Raspberry Pi Details: Type: Model 2, Revision: 1.1, Memory: 1024MB, Maker: Sony [OV] Device tree is enabled. This Raspberry Pi supports user-level GPIO access. -> See the man-page for more details 52
GPIO Pin 과 wiringpi Pin 할당 gpio readall 53
GPIO Test $gpio -g mode 11 output $gpio -g write 11 1 $gpio -g write 11 0 $gpio -g mode 5 output $gpio -g write 5 1 $gpio -g write 5 0 $gpio -g mode 22 output $gpio -g write 22 1 $gpio -g write 22 0 54
$sudo nano /etc/rc.local 터미널에서편집기는 nano 편집기를사용한다. $nano 파일네임 - 으로편집파일을연다. $sudo nano /etc/rc.local # Print the IP address _IP=$(hostname -I) true gpio -g mode 11 output gpio -g write 11 1 gpio -g mode 22 output gpio -g write 22 1 이부분추가눈은좌, 우가 5 번, 11 번 바닥 RGB Led 는 22 번 (R,G,B 색은 17 번, 27 번, 22 번 ) if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi exit 0 종료시 CTRL-X 누르고, 저장하느냐? 저장하느냐? 질문에 Y 누르고, 파일이름은같이니까 Enter 누르고나온다. $reboot 하고결과를확인 http://fishpoint.tistory.com/1587 55
센서 & Actuator 실습 56
나노에디터 (nano editor) 사용법 실행 nano 파일이름.c 화살표키를눌러편집할곳으로이동하여편집. 저장 Ctrl+O 끝내기 Ctrl+X 하면, 정말로끝낼것인지를묻는화면에서 Y 를누르고저장하려는파일명을확인한후에엔터를누르고빠져나옴. 자르기와붙이기한줄자르기 : Ctrl+k 붙이기 : Ctrl+u 여러줄자르기 : Ctrl+^ 를누르고화살표로블럭을설정한후에 Ctrl+k 찾기 Ctrl+w 57
온도센서테스트 $sudo modprobe w1-gpio $sudo modprobe w1-therm $cd /sys/bus/w1/devices $ls $cd 28-xxxx (change this to match what serial number pops up) $cat w1_slave 58
온도센서소스코드 Python import os import glob import time os.system('modprobe w1-gpio') os.system('modprobe w1-therm') base_dir = '/sys/bus/w1/devices/' device_folder = glob.glob(base_dir + '28*')[0] device_file = device_folder + '/w1_slave' def read_temp_raw(): f = open(device_file, 'r') lines = f.readlines() f.close() return lines def read_temp(): lines = read_temp_raw() while lines[0].strip()[-3:]!= 'YES': time.sleep(0.2) lines = read_temp_raw() equals_pos = lines[1].find('t=') if equals_pos!= -1: temp_string = lines[1][equals_pos+2:] temp_c = float(temp_string) / 1000.0 temp_f = temp_c * 9.0 / 5.0 + 32.0 return temp_c, temp_f while True: print(read_temp()) time.sleep(1) 실행 $sudo python thermometer.py pi@raspberrypi ~$ sudo python thermometer.py (32.5, 90.5) (32.5, 90.5) (32.687, 90.8366) (32.937, 91.28659999999999)
온도센서소스코드 C nano ds1820.c 편집소스코드보기 pi@raspberrypi ~$ gcc -o ds1820 ds1820.c -lwiringpi pi@raspberrypi ~$ sudo./ds1820 pi@raspberrypi ~/sensortest $ sudo./ds1820 Device: 28-0415a1505eff Device: 28-0415a1505eff - Temp: 32.500 C 90.500 F Device: 28-0415a1505eff - Temp: 32.500 C 90.500 F Device: 28-0415a1505eff - Temp: 32.562 C 90.612 F
조도 ( 빛 ) 센서 Analog 출력연결 특징 1. 감도조절 ( 파란색가변저항조정 ) 밝기와주변빛의세기를감지 2. 출력 : 아날로그전압출력, 디지털스위치출력 (0, 1) 3. 온도측정범위 : -40~80 4. 습도측정오차 : ±2%RH 5. 온도측정오차 : ±0.5 6. 저전력소모 7. 부가회로가불필요 전기적특성 - 작동전압 : 3.3V ~ 5V DC - 출력 : 아날로그전압출력, 디지털스위치출력 (0, 1) - lm393 칩 - 측정조건 VDD = 5V, T = 25 - Pin Connection Pin 1 아날로그출력 Pin 2 디지털출력 Pin 3 - GND) Pin 4 - 전원 VCC 3.5~5.5V DC 노검적 AO DO G Vcc 노검적 NC(No Connection) 61
사운드 ( 음향 ) 센서 - 마이크 사양 크기 특징 32mm*17mm*15mm ( length*width*height) Chip LM393, 전기콘덴서마이크 작동전압 DC 3-6v 출력 아날로그 / 디지털 LED Power LED, Sensor Indicator LED 62
인체감지센서 사용전류 50μA 사용전압 3V ~ 5V 동작온도범위 0 ~+70 센서미감지시출력 (HIGH) 4V 센서감지시출력 (LOW) 0.4V 감지각도 110 Degree 감지거리 7M Size 28mm 36mm 무게 25g Calibration- 센서보정 Sensitivity Adjust 가변저항을왼쪽끝까지돌리면민감도가가장약하고, 오른쪽으로돌리면민감도가증가 Time Delay Adjust 가변저항은오른쪽으로돌리면하이가출력되는시간이길어지고, 왼쪽으로돌리면약 4 초후에로우로떨어지게된다. 63
초음파센서 (HC-SR04) vcc trig echo gnd Working Voltage Working Current Working Frequency Max Range Min Range MeasuringAngle Trigger Input Signal Echo Output Signal Dimension DC 5 V 15mA 40Hz 4m 2cm 15 degree 적어도 10uS 이상의 TTL pulse Input TTL lever signal and t he range in proportion 45*20*15mm 초음파센서 64
불꽃 (Flame) 센서 불꽃의파장 ( 주파수 ) 760nm ~ 1100nm 대역을감지하는센서 동작전압감지범위감지대역 ( 파장 ) 응답시간 : 인터페이스 : 크기 : 3.3V to 5V 20cm (4.8V) ~ 100cm (1V) 760nm ~ 1100nm 15usec 아날로그 / 디지탈 22x30mm 가시광선의범위 65
가스센서 MQ135 는내부에포함된히터와센서로맘모니아, 생활가스, 오염가스등을검출해낼수있는모듈 노검적 Vcc AO DO GND 적노검 NC(No Connection) 66
근접센서 적외선송 / 수광일체형전방감지센서모듈로물체감지시 HIGH/LOW TTL 신호를출력 Calibration- 센서보정 근접센서의사양 항목 특징 센서원리 적외선감지 검출거리 20 ~ 30mm 검출각도 중앙에서상하 35 비교기 LM393 입력전원 DC 3V ~ 5V 출력형태 디지털출력 ( 0, 1) 67
액츄에이터 스마트식물농장의액츄에이터는워터펌프, 팬, DC Motor, RGB Led 와같이 4 가지를사용한다. 토양이말라있을때물을뿌려주고, 실내농장의온도에따라환기팬을작동하고, 야간이나구름이낀날은청색과적색의식물 Led 를켜준다. 또한차양을올린다거나문을열기위해 DC 모터를사용하는것으로가정한다. 워터펌프 FAN DC Motor 식물 LED LED Bar( 전등 ) 부저 서보모터 68
워터펌프 DWP2760 워터펌프외관 워터펌프기구도면 전기적사양 정격전압구동전압전류최대입력 DC 12V DC 9V ~ DC15V 무부하시 280mA 이하 >14.5 PSI Water Flow 400(±20%)mL/Min at 90 소음 용도 수명 65dB 커피머신용, 90 뜨거운물사용가능 정격전류에서 50 초동작, 20 초멈춤이 1Cycle - 6,000 번 69
Fan KD1205PFS1 FAN 외관 FAN 기구도면 FAN 전기적사양 Size ( mm ) 50*50*10mm 정격전압 (VDC) 12 전류 (A) 0.1 기동전압 (V) 10.8~13.8 속도 (RPM) 5500 풍량 ( m3 /min) 0.29 풍압 (Pa) 36 소음 (db) 28 권장사용온도 ( ) 10~60 무게 (g) 20 Fan 70
DC Motor DC Motor 외관 DC Motor 기구도면 DC Motor 전기적사양 품명 마이크로 DC 모터 Rated Voltage(V) 12 No load speed(rpm) 9,100 No load current(ma) 60 Rated speed(rpm) 7800 Rated torque(gf. 츠 ) 20 Rated current(ma) 350 Size 23.8Φ ⅹ 30.5mm Noise level( 유 ) 55 DC Motor 71
RGB Led 1600 백만가지색표현 RGB LED 외관 RGB LED 전기적사양 품명 Rated Voltage(V) 표시색소비전류품번 RGB LED 12V 1600만 Red=2V/20mA GREEN=3.4V/20mA Blue=3.4V/20mA IWS-506-RGB-K3 72
LED Bar RGB LED 외관 ENG. N.O 120203002 Shape 8MM Round 5.0*5.4*1.6mm Surfa ce Mount LEDs Emitting Color White Lens Color Yellow Viewing Angle 117 Chip Material InGaN 회로도 73
서보모터 (Servo motor) 실습 서보모터외관 서보모터연결선 서보종류 아날로그서보 동작전압 4.8V ~ 6V 토크 (Kg.cm) 2.5Kg / cm 스피드 0.2ch/60도 크기 무게 (g) 50g 이하 기어재질 프라스틱 특징 표준서보 회전각 180도 (-90도 ~ +90도 ) 74
Smart_IoT 설계시스템 스마트농장시나리오실습 75
액츄에이터전체구동 전체포트번호설정 #define PUMP 21 // BCM_GPIO 5 #define FAN 22 // BCM_GPIO 6 #define DCMOTOR 23 // BCM_GPIO 13 #define RGBLEDPOWER 24 //BCM_GPIO 19 #define RED 27 //GPIO 16 #define GREEN 28 //GPIO 20 #define BLUE 29 //GPIO 21 핀모드설정 void Bpluspinmodeset(void) { pinmode (PUMP, OUTPUT); pinmode (FAN, OUTPUT); pinmode (DCMOTOR, OUTPUT); pinmode(rgbledpower, OUTPUT); pinmode(red, OUTPUT); pinmode(green, OUTPUT); pinmode(blue,output); } 구동코드 digitalwrite (PUMP, 1) ; // On digitalwrite (FAN, 1) ; // On digitalwrite(dcmotor, 1); //On digitalwrite(rgbledpower, 1);//On delay (5000) ; / / ms digitalwrite (PUMP, 0) ; // Off digitalwrite (FAN, 0) ; // Off digitalwrite(dcmotor, 0); //Off digitalwrite(rgbledpower, 0); //Off 76
액츄에이터전체구동소스컴파일 실행 -- 편집 소스코드편집 : $nano actu_all_on.c 편집후 ctrl-x 입력 y 치고엔터로나옴컴파일 : $gcc o actu_all_on actu_all_on.c -l wiringpi -pthread 실행 : $sudo./ actu_all_on 실행종료 : Ctrl-c ( 컨트롤 (Ctrl) 키를누르고 c 키를누른다. ) 77
스마트농장스토리프로그램순서도 프로그램 : farmstory.c 참고 78
스마트농장스토리프로그램실행 소스코드편집 : $nano farmstory.c 편집후 ctrl-x 입력 y 치고엔터로나옴컴파일 : $gcc o farmstory farmstory.c l wiringpi 실행 : $sudo./farmstory.c 실행종료 : Ctrl-c ( 컨트롤 (Ctrl) 키를누르고 c 키를누른다. ) 79
웹과모바일앱의구축절차비교 비교항목모바일웹앱 호환단말범위 제조사별브라우저, 해상도, 크기에따라별도지원 제조사별브라우저, 해상도, 크기에따라별도지원 호환브라우저 기획 디자인 개발 테스트 배포 웹표준, 신기술에따라적용범위상이 PC 보다좁은화면공간에서효과적인네비게이션설계가중요 PC 보다느린네트워크속도에따라고품질이미지사용제약고려 웹표준엄격한준수, 다수의브라우저호환개발에따라개발기간및스크립트제약을고려한설계, 기간산정필요 초기에정의한단말및브라우저별엄격한테스트진행 사용자의단말기 ( 모바일단말, PC 단말 ) 판단에따라모바일웹과 PC 웹으로의자동이동 안드로이드, IOS, 윈도우모바일에따라범위지정상이 OS 별인터페이스 UI 특징, 동작방식인지 OS 별인터페이스 UI 특징, 동작방식인지 적용 OS 개수별개발진행, OS 지원이 5 개일경우 5 개의앱을제작해야함 적용하기로한단말기별테스트및동일단말내의 OS 버전에따른호환성테스트진행 제작된 OS 별바이너리를개발하여앱스토어의등록절차에따라진행 앱스토어마다검수절차및항목이다르기때문에사전에항목에대한자체검수후등록을해야함 80
웹 ( 브라우져 ) 에서데이터베이스모니터링 스마트농장스토리 pi@raspberrypi ~ $ mysql -u root -p Enter password: root --- 보이지않는다. 데이터베이스확인 mysql> show databases; 사용할데이터베이스를 demofarmdb 라는이름으로생성한다. mysql> create database demofarmdb; Query OK, 1 row affected (0.00 sec) 데이터베이스사용 mysql> use demofarmdb; Database changed 테이블생성 - 시간, 온도, 습도, 조도데이터를저장하는테이블 mysql> create table temphumilight( time char(19) primary key, temperature int, humidity int, lightsensor int); Query OK, 0 rows affected (0.03 sec) 테이블확인 mysql> show tables; 81
데이터수동으로입력 mysql> insert into thl values(now(), 1, 2, 3); Query OK, 1 row affected (0.01 sec) mysql> select * from thl; +---------------------+-------------+----------+-------------+ time temperature humidity lightsensor +---------------------+-------------+----------+-------------+ 2015-07-02 17:51:05 1 2 3 +---------------------+-------------+----------+-------------+ 1 row in set (0.01 sec) 데이터지우기 mysql> delete from thl where time < now(); Query OK, 1 row affected (0.02 sec) mysql> select * from thl; Empty set (0.00 sec) 82
웹 ( 브라우져 ) 에서데이터베이스모니터링 모든데이터베이스와테이블을사용자가접근할수있도록변경하고, 설정을반영하라는명령어를실행 mysql> grant all privileges on *.* to root@localhost identified by 'root'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) 파일폴더이동 $cd demofarmdb demodb.cpp 파일을편집 $nano demodb.cpp ->ctrl-x 누르고 y 하고빠져나온다. 컴파일 $ g++ -o demodb demodb.cpp -lwiringpi -lmysqlclient 실행 $ sudo./demodb 데이터출력이안되면 51 라인수정 #define DBHOST "localhost 컴파일하고실행 83
2~3 초에한번씩저장한데이터를확인한다. pi@raspberrypi ~/demofarmdb $ mysql -u root -p Enter password: mysql> use demofarmdb; Database changed mysql> select * from thl; 브라우저에서 http://192.168.1.239/phpmyadmin/ 에접속 id : root password : root 접속하여데이터를확인 - 아래는이미작성되어있다. 웹에서실시간으로변하는데이터베이스를확인하기위한 php 파일을작성해야한다. 아래명령을사용하여 /var/www/ 폴더로이동하여 viewfarm.php 파일을작성한다. pi@raspberrypi ~ $ cd /var/www pi@raspberrypi /var/www $ 이동하여파일을확인 pi@raspberrypi /var/www $sudo nano viewfarm.php 84
실시간으로변하는데이터베이스화면을보기위하여라즈베리파이에서작업폴더로이동후 demnofarmdb 폴더로이동하여 demodb 를실행한다. pi@raspberrypi ~ $ cd demofarmdb pi@raspberrypi ~/demofarmdb $ pi@raspberrypi ~/demofarmdb $sudo./demodb 실행 브라우져에서 http:// 라즈베리파이 IP 주소 /viewfarm.php 에접속하여센서데이터를확인 85
스마트폰브라우저에서확인 스마트폰브라우져에서 http://192.168.1.239/viewfarm.php 에접속하여센서데이터를확인 86
웹 ( 브라우져 ) 에서스마트농장액츄에이터제어 라즈베리파이를브라우저를통해원격제어하는방법중에가장간단한방법을실습해보자. 서버는파이썬을기반으로한 SimpleHTTPServer 구현하고, 클라이언트는부라우저의메시지전송방식중에하나인 POST 방식을이용하여웹서버를경유하여스마트농장액츄에이터를제어하게된다. 우선작업폴더를생성하고이동하여작업한다. $mkdir farmactubrowser $cd farmactubrowser pi@raspberrypi ~/farmactubrowser $ ls controlserver.py index.html pi@raspberrypi ~/farmactubrowser $ 파이썬서버프로그램을실행하자. 명령은 $ sudo python controlserver.py 87
PC 에서브라우저주소줄에아래와같이입력한다. http://192.168.1.239:8002 88
스마트폰의크롬브라우저를띄워주소창에 PC 에서입력하였던주소와같은주소를입력한다. http://192.168.1.239:8002 89
카메라구동테스트 카메라모듈사양 센서 PCB 크기무게해상도지원비디오모드 OmniVision OV5647(8.5 x 8.5 x 5mm) 25 x 20 x 9 mm 3 g 5 Megapixels 1080p30, 720p60 and 640x480p60/90 영상 / 스팅지원정지영상캡처 2592 1944 초당 30프레임의 1080p 지원초당 60프레임의 720p 지원초당 90프레임의 640x480p 지원 $sudo apt-get update $sudo apt-get upgrade $sudo raspi-config - 카메라의설정값은 disable 디폴트. Enable 시켜준다. $sudo apt-get install mplayer netcat ffmpeg gpac - 부가적인패키지를설치 명령을실행하고 24M 의공간이필요하다는메시지가나오면 Y 입력하여설치를진행한다. 90
카메라캡쳐 jpg 포맷으로이미지를캡처하려면다음과같이입력한다. $raspistill -o image.jpg $ls 명령어로 image.jpg 파일이생성된것을볼수있다. 이번에는 h264 포맷으로 5 초동안동영상을캡처해보는명령이다. $raspivid -o video.h264 fps 30 t 10000 -o : 출력파일이름 -t : 촬영시간밀리세컨드 (10000 = 10 초 ) -fps : 초당프레임 $ls 명령어로확인하면 video.h264 파일이생성되었다. 10 초로늘리려면다음과같이입력한다. $raspivid -o video.h264 -t 10000 라즈베리파이카메라프로그램은 H264 포맷을사용하고있기에별도의프로그램으로보거나일반적인동영상파일로변환하려면별도로파일을변환시켜줘야한다. 다음의명령어는 ffmpeg 을이용하여 H264 포맷을 mkv 포맷으로변환시키는예제다. $ffmpeg r 30 i video.h264 vcodec copy video.mkv 확인해보면 video.mkv 파일이생성되었다. 다음의명령어로도가능하다. $MP4Box add video.h264 video.mp4 $raspivid less $raspistill less 91
동영상스트리밍 카메라모듈을이용하여 mjpg-stream 을구현한다. 속도가많이느린편이지만현장상황을웹을이용하여모니터링하기에는무리가없다. 웹스트리밍또는기타외부기기에서라즈베리파이카메라모듈을이용한웹스트리밍서비스를하기위해선 mjpg-stream 이가장최적화되어있다. Mjpg-stream 컴파일을위해아래영상관련라이브러리및 cmake 패키지를설치해 주도록한다. $udo apt-get install git cmake libjpeg8-dev imagemagick -y videodev2.h 헤더파일링크 gksmsep[ mjpg-streamer 를컴파일진행시에는 요구하는 videodev.h 헤더파일을변경된 videodev2.h 파일로링크하자. $ sudo ln -s /usr/include/linux/videodev2.h /usr/include/linux/videodev.h mjpg-streamer 다운로드및컴파일하기 $ git clone https://github.com/liamfraser/mjpg-streamer 92
동영상스트리밍 Test $cd ~/mjpg-streamer/mjpg-streamer-experimental pi@raspberrypi ~/mjpg-streamer/mjpg-streamer-experimental $ make clean all 앞의과정들을통해 mjpg-streamer 를실행할수있는환경이갖추어졌으니, 마지막으로파이캠에서 mjpgstreamer 를이용할수있도록자동스크립트를작성하고명령어를입력해웹스트리밍을구현해보자. $ pi@raspberrypi ~ $cd ~ $ pi@raspberrypi ~ $sudo nano mjpg.sh export STREAMER_PATH=$HOME/mjpg-streamer/mjpg-streamer-experimental export LD_LIBRARY_PATH=$STREAMER_PATH $STREAMER_PATH/mjpg_streamer -i "input_raspicam.so -d 200" -o "output_http.so -w $STREAMER_PATH/www" CTRL-X 를누르고 Y 누르고 Enter 저장하고나온다. $ pi@raspberrypi ~ $sh mjpg.sh $ pi@raspberrypi ~ $sh mjpg.sh 확인주소 : http:// 라즈베리파이아이피 :8080 종료 Ctrl -c 93
스마트농장서버실행 Test pi@raspberrypi ~ $ cd iot_farmserver pi@raspberrypi ~/iot_farmserver $ cd output pi@raspberrypi ~/iot_farmserver/output $ ls mjpg.sh server_farm 서버실행 : $sudo./server_farm pi@raspberrypi ~/iot_farmserver/output $ sudo./server_farm validate database... iot_send_query : query - CREATE TABLE IF NOT EXISTS tfarmsensorvalue (id INT AUTO_INCRE....) iot_send_query : query - CREATE TABLE IF NOT EXISTS tfarmsensorcheck (id INT AUTO_INCRE....) data: 1 validate setting data... : 1 starting server... Humidity = 52.90 % Temperature = 25.80 *C Humidity = 52 Temperature = 25 Temperature = 25 Data not good, skip Humidity = 52.80 % Temperature = 25.80 *C Humidity = 52 Temperature = 25 Humidity = 52 SensorInterruptLoop : write to DB - INSERT INTO tfarmsensorvalue values (null,now(), now(), 25.000000, 52.000000, 0) iot_insert_data_from_db : query - INSERT INTO tfarmsensorvalue values (null,now(), now(), 25.000000, 52.000000, 0) 실행종료 : ctrl - x 94
스마트농장 Database 설계 DB Name : iotfarm Table : tfarmsensorvalue 센서값저장테이블 1 분마다센서값을저장한다. 날짜 day / 조도 int / 온도 float / 습도 float Table : tfarmsensorcheck 센서정상 / 불량저장테이블 센서정상불량확인하여저장 10 분마다. 날짜 day / 조도센서 ( 정상, 오류 ) / 온도센서 ( 정상, 오류 ) / 습도센서 ( 정상, 오류 ) Table : tfarmactuoperate 액츄에이터동작상태 ( 동작중 / 정지중 ) 액츄동작시데이터베이스업데이트하고, 동작끝날때업데이트 날짜 day / pump(on,stop) / fan(on, stop) / dcmotor(on, stop) / rgbled(on, stop) Table : tfarmactucheck 액츄에이터가정상 / 불량저장데이블 액츄에이터정상불량기록 현재는모두정상 pump(normal, fail), fan(normal, fail), dcmotor(normal, fail), rgbled(normal, fail) Table : tfarmsetting 설정값저장테이블 Now(), 매일 /2 일 /3 일 (0,1,2) 95
스마트농장 User Interface 설계 96
Android App 개발 이클립스개발환경 File Import 선택 Existing Projects into Workspace Zip 파일혹은프로젝트파일선택 Activity_main.xml 파일 Layout 파일편집 97
Android App 개발 MainActivity.java 파일 스마트폰에서실행 98
스마트농장앱다운로드설치 Smart IoT 블로그 : http://smartiot.tistory.com 스마트팜앱 : http://smartiot.tistory.com/39 99
스마트농장전체실습연결도 Wire Ethernet 카메라 Internet Router Gateway(R-Pi) WiFi 동글사용시공유기설정을참고하여라즈베리파이 Wlan0 설정필요함. - 같은네트워크에접속되어야함 할당받은 ip 주소 : 교육실 : ssid : iptime key : 12345678 100
스마트농장실습과스마트폰앱 Test $sudo./s-farm 으로동영상스트리밍서버와스마트팜서버를동시에실행 스마트농장시스템서버실행 1. 스마트팜서버실행 백그라운드실행 pi@raspberrypi ~/iot_farmserver/output $ sudo./server_farm & 2. 동영상스트리밍서버실행 $sh mjpg.sh export STREAMER_PATH=/home/pi/mjpg-streamer/mjpg-streamer-experimental export LD_LIBRARY_PATH=$STREAMER_PATH $STREAMER_PATH/mjpg_streamer -i "input_raspicam.so -d 200" -o "output_http.so -$ 101
스마트농장앱실행 1 102
스마트농장앱실행 2 103
참고자료 [1] ( 주 ) 휴인스 : http://www.huins.com [2] ( 주 ) 휴인스 IoT Blog : smartiot.tistory.com [3] 라즈베리파이활용백서 : 실전프로젝트 20 - 이재상표윤석지음, 비제이퍼블릭 [4] 라즈베리파이산딸기마을카뮤니티 http://www.rasplay.org/ [5] 리눅스와함께하는라즈베리파이 피터멤브리, 배장열옮김, 제이펍 [6] ITU-T Internet Report The Internet of Things Executive Summary, Nov. 2005. [7] 민경식, Net Term, 인터넷 & 시큐리티이슈, 사물인터넷 (Internet of Things), 2012. [8] 전자부품연구원 (KETI), IoT(Internet of Things) Presentation Design, Nov. 2012. [9] 이준섭, TTA 표준화교육, 스마트통신시장의핵심열쇠 M2M, M2M/IoT Standardization in ITU-T, Oct. 23, 2012. [10] ITU-T, ITU-T SG13, Y.WoT, Framework of Web of Things, Oct. 10, 2011. [11] ITU-T, ITU-T SG13, Y.2060, Overview of the Internet of Things, July 04, 2012. [12] IETF, Draft-lee-iot-problem-statement-05.txt [13] JP Vasseur, IETF 77, Internet Area Meeting, The Internet of Things, March 2010. [14] Internet of Things - Feb 6.2013, Yim Hyung-jun, Database Systems Lab. Dept. of Computer Engineering Chungnam National University [15] 사물인터넷 (IoT) 분야의주요임베디드 SW 기술 - MDS 테크놀로지 장성균 (2014/07/24) [16] 사물인터넷글로벌생태계구축및서비스활성화를위한개방형 IoT 소프트웨어플랫폼기술 - 2013. 10. 25, 김재호 (jhkim@keti.re.kr), 전자부품연구원 [17] Opensource H/W + Node js 로 IoT 따라잡기 Circulus 감사합니다. 105
IoT Predictions IoT and the Cloud. 향후 5 년이내에 IoT 데이터의 90% 이상이서비스제공플랫폼주도. 클라우드컴퓨팅은 IoT Data Blending 을지원복잡도를감소시킴. IoT and security. 향후 2 년이내에네트워크의 90% 가 IoT 기반보완위반점을갖는다. Chief Information Security Officers (CISOs) 는새로운정책을적용해야한다. IoT at the edge. 2018 년까지 IoT 가생성하는데이터의 40% 가저장, 처리, 분석되어네트워크의선두에서적용된다. IoT and network capacity. 3 년이내에네트워크의 50% 가 IoT 기기들로용량초과되며, 10% 제한된네트워크들만이여유가있을것이다. IoT and non-traditional infrastructure. 2017 년까지데이터센터와기업의 90% 가비전통적인새로운사업모델에적용될것이다. BYOD(Briing your own device) device categories. IoT and vertical diversification. 오늘날 50% 이상의 IoT 활동이생산, 물류, 스마트시티, 소비자활동이지만 5 년안에산업 IoT 가주도권을잡을것이다. IoT and the Smart City. Competing to build innovative and sustainable smart cities, local government will represent more than 25% of all government external spending to deploy, manage, and realize the business value of the IoT by 2018. IoT and embedded systems. By 2018, 60% of IT solutions originally developed as proprietary, closed-industry solutions will become open-sourced allowing a rush of vertical-driven IoT markets to form. IoT and wearables. Within five years, 40% of wearables will have evolved into a viable consumer mass market alternative to smartphones. IoT and millennials. By 2018, 16% of the population will be Millennials and will be accelerating IoT adoption due to their reality of living in a connected world. https://datafloq.com/read/internet-of-things-more-than-smart-things/1060 106