Copyright (C) 커널연구회 (www.kernel.bz)문서작업: 정재준(rgbi3307 골뱅이 nate.com)문서위치 메인(출처): http://www.kernel.bz/SmartHomeM아래 내용은 누구나 사용할 수 있습니다.단, 저자정보는 지우지 말고 공유하시고 출처를 기입해 주시기 바랍니다.마지막 수정일: 2018-03-01 동작 테스트 방법스마트홈M은 다음과 같은 방법으로 동작을 실행시켜서 테스트할 수 있다. 버턴 동작 휴대폰 연동 동작 시리얼 명령 동작 아래부터 동작을 실행하는 방법에 대해서 자세히 설명 된다. 버턴 동작버턴들은 세로 방향으로 왼쪽줄 6개, 오른쪽 6개가 있다. 버턴을 눌러서 SmartHome_M 메인보드에 연결되어 있는 장치들의 동작을 확인할 수 있다. 동작 상태는 SmartHome_M 안에 있는 장치 위치별 LED를 on/off하여 표시 한다. 버턴위치 버턴 실행 현관 침입탐지를 위한 적외선 센서는 아래 그림과 같이 스테핑 모터 측면에 있다. 이 곳에 물체를 넣으면 침입탐지로 인식하고 부저 경보음이 울리면서 스테핑 모터가 회전한다. 침입탐지 동작(적외선 센서) 휴대폰 연동 동작스마트폰에서 무선 WiFi을 검색하면 다음과 같이 접속할 수 있는 SSID을 표시해 준다. 검색된 SSID중에서 “SmartHomeM01”이 스마트홈M에 접속할 수 있는 SSID이다. SmartHomeM01을 선택한후 “자동으로 연결”을 체크하고 연결 버턴을 누른다. 다음과 같이 접속 암호를 물어보면 kernel.bz 을 입력한다. 위의 연결암호는 입력할 때 화면에 나타나지 않는다. 한번 연결이 되면 다음부터는 암호를 입력하지 않아도 자동으로 연결된다. SmartHomeM01은 무선 WiFi AP 서버로 10.40.0.1로 IP가 설정되어 있다. 사용자는 웹브라우즈를 실행하여 주소란에 10.40.0.1을 입력하면 SmartHomeM01의 웹페이지가 나타나고 그곳에 구성되어 있는 메뉴에서 스마트홈M에 있는 여러가지 장치들을 제어할 수 있게 된다. 스마트홈M 웹페이지 메인메뉴 위와 같이 스마트홈M 웹페이지 메인메뉴에 접속하면, 스마트홈M에 있는 센서(온도, 습도, 조도밝기, 가스농도)값들을 읽어서 페이지 상단에 출력해 준다. 그리고, 나머지 장치들은 사용자가 메뉴를 눌러서 실행할 수 있다. 사각형의 버턴모양으로 구성되어 있는 메뉴는 버턴 색상을 통해서 장치 동작 상태를 표시한다. 사각형 버턴 색상이 검정색이면 해당 장치가 Off되어 실행되지 않고 있다는 의미이다. 사각형 버턴을 눌러서 해당 장치를 실행하면 색상이 컬러 값으로 바뀐다. 아래 그림은 해당 장치들이 모두 실행되고 있는 상태를 나타내는 버턴 색상들이다. 스마트홈M 장치들이 모두 실행되고 있는 버턴 색상 위의 메뉴에서 사각형 버턴을 누를 때 마다 해당 장치가 On/Off로 번갈아 가며 동작 제어 된다. 아래 그림은 스마트홈M에 있는 장치들 중에서 “조명”, “가습기”, “TV” 메뉴 버턴을 눌러서 실행(On)되고 있는 모습이다. 아래 그림은 스마트홈M에 있는 장치들 중에서 “에어컨”, “제습기”, “공기환풍” 메뉴 버턴을 눌러서 실행(On)되고 있는 모습이다. 아래 그림은 스마트홈M에 있는 장치들 중에서 “스위치1” 메뉴 버턴을 눌러서 실행(On)되고 있는 모습이다. 스위치들은 다음과 같이 스마트홈M 뒤편에 추가적으로 장착되어 있는 릴레이 스위치이고 이들은 가정용 전자기기의 전원(220V)을 On/Off할 수 있다. 이 릴레이 스위치를 연결하는 방법은 아래 링크를 참조해 주기 바란다. 장치 연결하는 방법 바로가기제품 구매하기 바로가기 릴레이 스위치 4개 아래 그림은 “스위치A” 버턴을 클릭하여 릴레이 스위치 4개를 모두 On 상태로 보여주는 것이다. 위의 웹페이지 메뉴들은 HTML 웹페이지로 구성되어 있다. 웹페이지 동작 실행은 PHP로 웹프로그래밍하여 구현 했다. 웹프로그래밍 하는 방법은 교재(책)에서 자세히 설명하고 있으므로 참고해 주기 바란다. 교재(책) 바로가기 링크 시리얼 명령 동작SmartHome_M에 있는 USB to Serial 케이블을 다음과 같이 PC의 USB포트에 연결한다. USB to Serial 케이블 연결 위와 같이 USB 케이블을 PC에 연결한후, 윈도우의 장치관리자 정보를 보면 다음과 같은 장치(CP210x USB to UART)가 자동으로 인식되어 있음을 확인할 수 있다. Serial 포트번호는 COM4로 보인다. 이 번호는 사용자 컴퓨터마다 그때그때 다르게 잡히기 때문에 위와 같이 장치관리자에서 확인한후 시리얼 터미널 프로그램에서 시리얼 통신 옵션을 다음과 같이 설정한다. 시리얼 터미널 프로그램에서 위와 같이 설정한후, 터미널(콘솔)에서 키보드를 엔터하면 터미널 프로그램 화면에 다음과 같은 메시지가 출력된다. OK UNKNOWN 위의 메시지가 나오면 스마트홈M과 사용자 컴퓨터가 USB to Serial 통신으로 연결되었다는 것이다. 따라서 터미널(콘솔)에서 키보드로 명령어를 입력하여 스마트홈M안에 프로그램되어 있는 기능들을 실행할 수 있다. 먼저 어떤 명령어들을 사용할 수 있는지 사용 가능한 명령어들을 확인하기 위해서 AT? 라는 명령어를 입력한다. 도움말 출력 명령어 AT? 위의 명령어를 입력하여 실행하면 다음과 같은 도움말이 화면에 출력된다. 아래의 도움말은 시리얼 콘솔에 키보드로 입력가능한 AT 명령어들을 나열한 것이다. 이 명령어들은 모두 AT+로 시작되는 명령어로서 스마트홈M에 연결되어 있는 장치들을 실행할 수 있다. 아래 AT 명령들은 스마트홈M 안에 미리 프로그램되어 있는 기능을 실행하는 것이다. 시리얼 명령 도움말-------- Module Version -----------------------------------------SmartHome_M_V02 (c)www.kernel.bz -------- Date Time Command --------------------------------------AT+TIME? Time OutputAT+DATE? Date OutputAT+DTIM? Date Time OutputAT+TIME=hhmmss Time Input(hh:24Hour, mm:Minute, ss:Second)AT+DATE=YYMMDDWW Date Input(YY:Year, MM:Month, DD:Day, WW:Week) (01:Mon, 02:Tue, 03:Wed, 04:Thu, 05:Fri, 06:Sat, 07:Sun)AT+ALRM=hhmmss Alarm Time Input -------- Switch Control Command ----------------------------------AT+RUNN=i,s Switching(i:switch index, s:1=On, 0=Off) Switch Index(i:0=ALL, 1=Light, 2=AirCon, 3=Boiler, 4=Dryer, 5=Moist, 6=AirFan, 7=DeFire, 8=TV)AT+RELY=i,s Relay Switching(i:switch index, s:1=On, 0=Off) Switch Index(i:0=ALL, 1=SW1, 2=SW2, 3=SW3, 4=SW4) -------- Motor Control Command ----------------------------------AT+MOTR=c,d,s Direction(c:0=CW, 1=CCW) Degree(d:0=10, 1=20, 2=30, 3=40, 4=50, 5=60, 6=70, 7=80, 8=90, 9=100) Speed(s:0=10, 1=20, 2=30, 3=40, 4=50, 5=60, 6=70, 7=80, 8=90, 9=100) -------- Sensor Value Get Command ----------------------------------AT+LSMV?n Getting Accelerometer/Gyroscope(LSM) Data (사용 안함)AT+HTSV?n Getting Humidity/Temperature(HTS) DataAT+PHOT? Get Photo Sensor ValueAT+GASV? Get Gas Sensor ValueAT+ST1V? Get ST1 IR Sensor Value OK AT+RUNN=i,s 명령어 AT+RUNN 명령어는 LED로 정의되어 있는 장치들을 실행(On/Off)하는 것이다. 명령어 다음 = 뒤에 전달하는 i와 s는 아래 테이블에 그 값이 정의되어 있다. 예를들어, 보일러에 해당하는 LED를 On 하고자 하면 다음과 같이 명령어를 입력한다.AT+RUNN=3,1 보일러 LED를 Off 하고자 하면 다음과 같이 명령어를 입력한다.AT+RUNN=3,0 환풍기와 공기청정기 LED을 On 하고자 하면 다음과 같이 명령어를 입력한다.AT+RUNN=6,1 환풍기와 공기청정기 LED을 Off 하고자 하면 다음과 같이 명령어를 입력한다.AT+RUNN=6,0 AT+RELY=i,s 명령어 AT+RELY 명령어는 스마트홈M 외부에 연결되어 있는 릴레이 스위치를 On/Off하는 명령어이다. 릴레이 스위치는 가정집 전원(220V)을 실제로 On/Off할 수 있는 스위치이므로 가정집에 있는 조명기구나 가전제품등의 전원 스위치를 On/Off할 수 있다. 따라서 이 기능을 잘 활용하면 실제 스마트홈을 구현하는데 많은 도움이 될 것이다. AT+RELY 명령어 = 뒤에 전달하는 i와 s는 아래 테이블에 그 값이 정리되어 있다. 예를들어, 릴레이 스위치 2번에 가정용 가전제품(조명, TV, 냉장고, 선풍기, 세탁기 등) 전원 스위치가 연결되어 있다면, 이 전원을 On 하고자 하면 다음과 같이 명령어를 입력한다.AT+RELY=2,1 이 릴레이 스위치를 Off 하고자 하면 다음과 같이 명령어를 입력한다.AT+ RELY=2,0 릴레이 스위치는 스마트홈M의 기본사양이 아닌 별도로 추가해야 하는 사양이므로 좀더 자세한 정보는 아래 링크를 참고해 주기 바란다. 장치 연결하는 방법 바로가기제품 구매하기 바로가기 AT+MOTR=c,d,s 명령어 AT+MOTR은 스테핑 모터 제어 명령어이다. 명령어 뒤에 전달하는 c는 회전방향, d는 회전각도, s는 회전속도를 의미한다. 예를들어, 스테핑 모터를 시계방향(CW)으로 40도 50% 속도로 회전하려면 다음과 같이 명령어를 입력한다.AT+MOTR=0,3,4 스테핑 모터를 반시계방향(CCW)으로 90도 80% 속도로 회전하려면 다음과 같이 명령어를 입력한다.AT+MOTR=1,8,7 센서값 읽기 명령어 AT+HTSV?는 온도/습도 센서값 읽어서 출력하는 명령이다. 이 명령어를 실행하면 다음과 같은 결과가 출력된다. AT+HTSV? temper=20, humty=24 Temper=20은 온도가 20도, humty=24는 습도가 24%라는 의미이다. AT+PHOT?는 조도 센서값 읽어서 화면에 출력하는 명령이다. AT+PHOT? 3496 조도 센서값은 최소 0에서 최대 5000 범위에서 출력된다. 이 값이 작아지면 빛이 어두어 진다는 의미이고 이 값이 커지면 빛이 밝아 진다는 것이다. AT+GASV?는 가스누출 탐지 센서값을 읽어서 출력한다. AT+GASV? 1246 가스 누출이 탐지되면 이 값이 2000 이상으로 올라가고 가스 누출량(농도, ppm)이 많을수록 이 값은 최대 5000까지 증가한다. AT+ST1V?은 적외선 센서(칩임탐지)값을 읽어서 출력한다. AT+ST1V? 4095 적외선 센서에 물체가 탐지 되지 않으면 4000 이상의 값이 출력되다가 물체가 탐지되면 100 이하로 값이 떨어진다. 날짜 시간 조회 및 설정날짜와 시간은 스마트홈M 모듈에 있는 Cortex-M0(STM32F0)의 RTC(Real Time Clock)에서 유지 관리된다. 전원이 Off되어도 스마트홈M 보드에 코인셀 배터리가 3V를 항상 공급해 주므로, 한번 설정된 날짜와 시간은 항상 현재 일시로 유지된다. 그리고 스마트홈M 내부에서 타이머가 항상 작동하고 있으며 실행 상태를 표시하기 위해서 파란색 LED를 1초마다 점등한다. 날짜와 시간을 관리하는 AT 명령어는 다음과 같이 6가지가 스마트홈M에 프로그램되어 있다. 이들의 사용법을 익혀서 프로그램에 응용할 수 있다. 날짜와 시간관리 AT 명령어들 AT+TIME?AT+DATE?AT+DTIM?AT+TIME=AT+DATE=AT+ALRM= AT 명령어 끝에 ?를 붙이면 데이터를 조회(출력)하는 것이고, =를 붙이면 데이터를 설정(입력)하는 것이다. AT+TIME? 명령어를 입력하면 다음과 같이 현재 시간이 출력된다. AT+TIME? 명령어 AT+TIME?20:04:50 OK AT+DATE? 명령어를 입력하면 다음과 같이 현재 날짜가 출력된다. AT+DATE? 명령어 AT+DATE?2018-01-25 OK AT+DTIM? 명령어를 입력하면 다음과 같이 현재 날짜, 시간, 요일을 출력한다. AT+DTIM? 명령어 AT+DTIM?2018-01-25 17:36:55 (THURSDAY) OK AT+TIME=hhmmss 명령어를 입력하면 다음과 같이 시간을 설정한다. hh에는 두자리로 24시간 단위의 시간을 입력하고 mm에는 두자리로 분을 입력하고 ss에는 두자리로 초를 입력한다. 아래의 예제는 20시 11분 01초로 현재 시간을 설정하는 것이다. AT+TIME=hhmmss 명령어 AT+TIME=201101 OK AT+DATE=YYMMDDWW 명령어를 입력하면 다음과 같이 날짜를 설정한다. YY에는 두자리로 년도를 입력하고 MM에는 두자리로 월을 입력하고 DD에는 두자리로 날짜를 입력하고 WW는 두자리로 요일을 입력한다. 요일은 01(월요일), 02(화요일), 03(수요일), 04(목요일), 05(금요일), 06(토요일), 07(일요일)로 입력해야 한다. 아래의 예제는 17년 03월 31일 05(금요일)로 현재 날짜를 설정하는 것이다. AT+DATE=YYMMDDWW 명령어 AT+DATE=17033105 OK AT+ALRM=hhmmss 명령어를 입력하면 알람시간을 설정하는 것이다. hh에는 두자리로 24시간 단위의 시간을 입력하고 mm에는 두자리로 분을 입력하고 ss에는 두자리로 초를 입력한다. 아래의 예제는 20시 30분 01초로 알람 시간을 설정하는 것이다. 이 시간이 되면 내부적으로 알람 인터럽트가 발생하므로 이시간에 해야하는 일들을 수행할 수 있다. AT+ALRM=hhmmss 명령어 AT+ALRM=203001 OK 알람은 스마트홈M 내부에 설정된 신호를 바탕으로 인터럽트 서비스 루틴을 작성해야 하므로, 나중에 전체 모듈들을 조립하여 어플리케이션을 작성할 때 좀더 자세히 설명할 예정이다. 감사합니다.