아두이노 홈 오토메이션 웹서버 구축 관련 조언을 부탁드립니다
2016.05.27 18:54
코멘트 24
-
별날다
05.27 19:34
-
건설노무자
05.27 20:14
답글 감사드립니다.말씀하신 외부 웹서버와 아두이노와는 어떻게 연결이 되어야 하나요? 저는 아두이노를 직접 시리얼(usb)로 피씨와 연결하고 피씨에 웹서버를 설치해서 외부에서 열어볼 수 있는 웹페이지를 로딩하고 웹페이지에서 아두이노 시리얼에 직접 시그날을 전송하는 방법을 생각했는데 말씀을 듣고보니 제가 뭘 좀 잘못 알고 있는것 같습니다. (사실 이쪽으로 무지합니다 제가 ㅠㅠ)위에 스크린샷에 올린 웹페이지는 이미 포워딩으로 외부에서 모바일폰으로 그대로 볼 수 있고 컨트롤도 잘 되거든요 (다운되기 전까지는요) -
별날다
05.27 20:35
아두이노와 외부 웹서버 사이의 통신 방법은 몇 가지가 있습니다. 다음의 두 방법 중 하나를 쓰시면 될 듯 합니다.
1. 웹 서버에 전원 상태정보용 DB 또는 파일이 있고, 아두이노에 무한 동작하는 데몬 프로그램에서 주기적으로 웹 서버에 접속하여 DB 또는 파일의 전원정보를 읽어서, 상태가 바뀐 전원을 제어한다.
2. 아두이노에 소켓서버 데몬 프로그램을 띄운다. 웹서버 웹페이지의 전원 단추를 누르면, 웹 프로그램에서 아두이노 소켓서버에 접속하여 전원조작 명령 패킷을 전송한다. 아두이노 소켓서버는 수신한 전원 명령에 따라 전원을 제어한다.
-
piloteer
05.28 00:20
건설노무자님께서 무슨 아두이노 버전을 사용하셨는지 모르겠습니다만 시중에 많이 돌아다니는 아두이노는 8비트 마이컴이고 램도 부족해서 웹서버로서 성능이 좋은 편은 아니기는 합니다. 간단한 IoT목적으로는 동작합니다만..
라즈베리급 성능이 나는 모델이 있기는 하지만요. 그런 물건은 짱짱하게 임베디드 리눅스에 아파치 httpd를 심어도 탈없이 돌아가지만 아직 가장 대중적인 모델(우노)은 8비트 AVR이고 이제 겨우 Cortex-M기반 모델이 들어오기 시작하는 상황..
-
건설노무자
05.28 07:25
아두이노 우노입니다. 가만히 보니 인터넷에 널려있는 아두이노웹서버 튜토리알들이 대부분 '컨셉의 시연' 수준인 것 같습니다. 제 웹서버도 인터넷으로 접속이 되긴 하지만 안정적으로 되는게 관건이니까요.아무래도 아두이노로는 RF제어 등의 간단한 일만 시키고 웹서버등의 복잡해보이는 일들은 피씨를 이용해야 할 것 같군요. -
아두이노 성능이 Pentium보다 좋을리가요... 혹시 RPi랑 헷갈리신 것 아닌지... ㅎㅎㅎ
-
별날다
05.28 16:51
아두이노 제로의 경우는 32비트 인데요.... ?
아두이노가 버전이 여러가지입니다.
저도 건설노무자님이 웹 서버를 실행시켰다고 하셔서 제로 버전 쯤은 되는 줄 알았지, 우노버전인 줄은 몰랐네요.
-
아두이노 제로를 간과하긴 했네요.
보통 아두이노라고 하면 UNO나 MEGA2560부터 생각하니까요.
이더넷 실드와 이것을 쓰는 웹 서버 구동은 나온지도 상당히 오래된 것이기도 하구요.
아두이노 제로에서 쓰는 48MHz Cortex-M0+가 Pentium 100MHz 이상의 성능일지는 좀 궁금해지긴 합니다만... 한번 비교해볼 수 있으면 재미있겠네요.
-
hakdh
05.27 23:01
마이컴이 뻗는다는 증상은 대개.. CPU가 작동을 멈춰서 일종의 고장이 난 경우는 드믈고 프로그램에서 어딘가에 무한루프에 들어가서 나오지를 않는 경우가 많습니다.
아두이노가 사용하는 AVR마이크로 컨트롤러는 와치독 타이머라는게 있는데요. 일정시간동안 응답이 없으면 강제로 리셋을 해버리는 기능입니다.
일단은 요거를 활용하시면 될듯 하네요.
그런데 아두이노는 클럭이 빨라봤자 16Mhz 밖에 안되는 RISC코어인데요..
웹서버라는게 정말 돌아가나요...?
10년전에 I/O만 껏다켰다 하는정도 밖에 사용 안해봐서 좀 놀랍네요.. -
건설노무자
05.28 07:28
리셋버튼으로 금방 회복되는 걸로 봐서는 아무래도 코드가 문제겠지요? 와치독타이머 확인해보겠습니다. (근데 다른분들 의견대로 웹서버를 따로 돌리는 방향으로 간다면 별 쓸모가 없어지긴 하겠군요^^)
-
건설노무자
05.28 07:55
저도 처음에 웹서버 코드 아두이노에 올리고 모바일폰으로 웹페이지 상의 버튼 눌러 작동하는거 확인하고 와~ 했었습니다 ^^
-
piloteer
05.28 01:26
시놀로지는 안 써봤습니다만, 리눅스 기반인걸로 기억하는데 필요로 하는 usb-serial 드라이버를 잡아준다면 /dev/ttyUSB나 /dev/ttyACM등의 이름으로 시놀로지 상에서 아두이노를 잡을 수 있지 않을까 생각합니다. 일단 usb-serial연결만 성공하면 아두이노 개발환경이 없어도 uart통신이 가능해지니 조작은 가능할 것이라 생각합니다.
문제가 있다면 기본 상태에서 인식이 불가능한 경우 써드파티 드라이버 등을 끌어와야 할 수 있고 (최악의 경우 직접 모듈 빌드 - 로드..라는 쉽지 않은 작업이 들어갈 수 있구요.) 재수없으면 시놀로지의 펌웨어를 업데이트할 때 설정이 날아가거나 할 가능성이 있겠군요.
아두이노+이더넷 실드를 써보지 않아서 겪고 계신 문제의 원인은 정확히 모르겠으나 사양이 원인인 게 확실하다면 저렴하고 사양이 넉넉한 개발보드도 요즘은 많이 있으니 아예 보드를 다른 걸 써보시는 것도 방법이라고 생각합니다. 아두이노도 사양이 높은 보드들이 있고 제 경우 프리스케일 (현 NXP)에서 나오는 다른 개발 보드를 가지고 있는데 이건 이더넷이 내장되어 있습니다.
-
건설노무자
05.28 07:34
Synology에 아두이노 붙여서 사용하는 사례가 없지는 않지만 아무래도 제 실력으로 쉽지 않겠드라구요http://i.document.m05.de/2014/04/04/arduino-uno-on-synology-diskstation-ds213j/나스에 가족관련 소중한 자료들도 많은데 잘 모르면서 섣불리 건드리기가 그래서 일찌감치 접었습니다 -
라즈베리파이 + 아두이노 조합이 흔하게 쓰이죠.
-
건설노무자
05.28 07:42
Rpi가 결국 고물컴에 리눅스 올린거와 큰 차이가 없다는 가정하에,제가 위에 적은대로 피씨-usb-아두이노 조합에다가 피씨에서 웹서버를 구동하는 방식과 결국 같은거 아닌가요?제가 얼마전에 thinkpad t510이랑 x201을 공짜로 얻어서 얘네들을 사용하면 될 것 같은데요... -
piloteer
05.28 12:52
그렇습니다. 단, 라즈베리는 단독으로도 리눅스로 httpd를 가동하면서 동시에 아두이노처럼 개발보드로서 동작하는 게 가능하다는 장점은 있습니다. (그래서 아두이노 연결 없이도 단독으로 어느정도 IoT기능을 수행해낼 수 있습니다. 단, 아두이노에 비해 이런 기능은 조금 제약적이고 이런 용도로 다룰 시 잘못 만지면 아두이노에 비해 고장날 가능성이 더 높습니다만..)
그 외에는 일반 컴퓨터에 아두이노를 직결하는 것에 비해서는 전기료가 저렴하다는 것이나 (단, 단기간에는 이것도 큰 차이가 없고 수 년이상 사용하는 것을 상정할 시에 유의미함..) 나 소음같은 차이밖에 없지요.
-
건설노무자
05.28 19:10
말씀 듣고보니 Rpi도 재미는 있겠지만 저는 얼른 제대로 돌아가는 시스템을 구축하는게 급하니 고물 씽크패드에 웹서버 올리고 아두이노 붙여서 직접 컨트롤하게 만드는게 낫겠습니다.근데 사실 리눅스에서 웹서버를 어떻게 돌리는건지, 웹페이지는 어떻게 만드는건지, 웹으로 시리얼 통해 아두이노에 시그날을 어떻게 보내는건지 등등 앞으로 해결해나가야 할게 산넘어 산이네요. 뭐 그재미로 하는거지만요 ㅎㅎ -
piloteer
05.28 21:40
구글에서 "php arduino control" 로 검색하시면 참고하실만한 글들 (특히 instructable 사이트) 이 나오는 것 같습니다. 이 이상은 재미를 망칠 것 같네요 (..)
-
건설노무자
05.29 19:31
말씀대로 구글로 검색하니 제일 먼저 뜨는 인스트럭터블즈 사이트인데요...http://www.instructables.com/id/Control-an-Arduino-with-PHP/?ALLSTEPS대충 읽어보니 딱 제 수준에 맞는 내용들인것 같군요~(어르신들이 노인대학 다니시는 심정이 이해가 갑니다 ^^) -
건설노무자
06.27 23:28
Synology에 이미 PHP가 깔려있다는 당연한 사실을 뒤늦게 깨달았습니다. 덕분에 작업이 무척 간단해 졌구요.. 며칠저녁 php랑 씨름해서... 사진처럼 성공했습니다! 도움주셔서 정말 감사드립니다
-
piloteer
06.29 02:32
성공 축하드립니다. 아두이노-시놀로지 usbtty 연결 자체가 손이 가지 않을까 생각했었는데 관련 드라이버가 내장되어있었나 봅니다.
지금 생각해보면 요즘 NAS는 성능이 좋고 기능도 다양하니 이런 IoT서버 용도로 쓰기 꽤 좋을 것 같네요..
-
전력 사용량과 작은 덩치를 무시하기 어렵습니다. :-)
-
piloteer
05.28 12:59
그러고보니 생각났는데, 무선 공유기를 개조하는 법도 있습니다. 이건 시놀로지 개조보다 더 매니악하고 실력이 더 많이 요구되는 방법입니다만.. 뭐 굴러다니는 wrt54g같은 게 있다면 재미있는 프로젝트가 될 수 있다고 생각합니다.
https://proprietarded.wordpress.com/2011/05/24/accidental-remote-lcd-project-arduino-lcd-wifi/
http://gr0b.blogspot.com/2012/07/connection-arduino-uno-to-openwrt.html
공유기가 usb가 있고 openwrt등 리눅스 개조 펌웨어를 올릴 수 있다면 usb직결도 가능할 수 있고 아니라도 리눅스 개조 펌웨어가 올라가고 공유기 보드상에서 시리얼을 억세스할 수 있으면 아두이노와 직접 시리얼로 묶어버릴 수 있습니다. (단, 전압 변압이 필요할 수 있음) 이 경우 http 통신은 공유기에서 http서버 데몬을 돌려버리거나 아니면 웹 인터페이스용 데몬에 기생해버리면 됩니다.
-
건설노무자
05.28 18:59
위의 아두이노+이더넷쉴드를 공유기 usb로 전원공급하는게 애초 계획이었는데 그때 잠깐 '공유기가 피씨 역할을 하면 좋을텐데' 하는 생각을 했었거든요. 근데 이걸 진짜로 하는 사람들이 있군요! 불행히도 제 공유기는 openwrt가 안 돌아가서 어거지로 하려면 배를 따고 선을 따로 납땜해야 한다는군요. 세상에는 참 많은 천재적인 사람들이 많습니다 ㅋㅋ 저는 포기~
아두이노에서 웹 서버를 돌리는 것이 무리라고 할 수는 없습니다.
아두이노 AP 성능이 예전 PENTIUM보다 좋거나 최소한 비슷하니까요.
다만, 설치한 웹 서버가 제대로 최적화되어 있지 않은 것 같습니다.
보다 작은 규모의 웹서버를 돌리면 될 듯 하기도 합니다.
그러나, 저는 아두이노에서 어렵사리 웹서버를 돌리기 보다는 외부의 웹서버를 이용하시기를 권합니다.
다시 말해서 사용자는 외부 웹서버에 접속해서 명령을 선택하고, 아두이노에서는 외부 웹서버를 바라보고 있다가, 웹 서버의 데이터가 변경되면 반응하는 식으로 바꾸는 거죠.
외부 웹서버는 무료호스팅이나 클라우스 서비스를 이용하시면 될 겁니다.
이게 직접 아두이노 웹서버에 접속해서 하는 것보다는 단계를 더 거치기 때문에 한 박자 늦기는 하지만, 나중에 다양한 아두이노를 원격 제어하기가 가능하게 되기 때문에 확장성도 좋고, 여러모로 안정합니다.
게다가 전원제어처럼 실시간이기는 해도 몇 초 안 쪽의 여유있는 제어라면 굳이 아두이노에 웹서버를 쓸 까닭이 없죠.
아두이노를 웹서버로 만들면, 집 밖에서 접속하려면 비싼 공인 IP 를 쓰거나 동적 DNS를 쓰는 등의 작업이 필요하죠.
뭐.. 집안에서만 쓰신다면 몰라도... 그러면 굳이 IOT를 하는 장점이 반감되는 ... ^^