2016년 10월 3일 월요일

CommWifi

CommWifi를 사용하면 아두이노 보드와 인터넷 통신을 할 수 있습니다.


인터넷 통신이란 말은 너무 폭넓은 의미이기에 조금 구체화할 필요가 있습니다.
인터넷은 전 세계적으로 모든 컴퓨터가 연결된 개념을 의미합니다.
인터넷은 모든 컴퓨터가 연결됨을 의미한다.

이런 통신이 가능하려면 모든 컴퓨터는 자신을 구별하기 위해 고유한 식별자를 가져야 하는데, 이것을 IP 어드레스라고 부릅니다. 이 IP 주소 체계에 따라 IPv4, IPv6등으로 전문적인 용어가 사용됩니다.
또한, 컴퓨터에서 실행되는 프로그램을 구별해야 하기 때문에 포트(Port)라 부르는 통신 채널 번호가 존재합니다.
다시 정리하면 인터넷 통신을 하기 위해서는 다음 2가지가 있어야 한다는 의미입니다.
  • IP Address
  • Port
인터넷을 하기 위한 식별 정보는 아무나 할 수 없고 반드시 정식 서비스로 등록되어야만 전 세계 컴퓨터와 연결될 수 있습니다. 이것을 도메인(Domain)이라 부르고, 도메인 서비스 업체를 통해 일정한 비용을 지불하고 얻게됩니다.
이 도메인은 사람이 이해하기 쉽도록 www.mydomain.com 등의 형식으로 사용되지만, 내부적으로는 IP Address와 Port를 사용해서 통신하는 것입니다.

인터넷 통신을 이해하기 위한 중요한 개념은 프로토콜(Protocol)입니다. 앞에서 언급한 IP와 Port는 식별 정보이고 실제로 컴퓨터간에 데이터를 어떤 방법으로 주고받을 것인지를 정하는 것이 프로토콜입니다.
현재 인터넷상에서 규격화되어 널리 사용되는 프로토콜은 대략 다음과 같습니다.
  • TCP
  • UDP
  • HTTP
  • FTP
위에서 언급한 프로토콜 외에도 더 많은 종류가 있으며 새로운 프로토콜이 개발되고 있습니다.
따라서, 여러분이 만든 장치(아두이노)를 인터넷에 연결하려면 다음에 대해 생각해야 합니다.
  • 어떻게 고유한 IP와 Port를 얻을 것인가?
  • 무슨 프로토콜을 사용할 것인가?
이와 같이 인터넷 통신은 생각해야 할 문제가 많은 복잡한 작업입니다.

하지만, 다행히 집에서 혼자 테스트하는 정도라면 간단하게 해볼 수 있는 방법이 많이 나와있습니다.
우선, 집집마다 사용하는 유/무선 공유기는 자신에게 연결된 장치들의 IP 주소를 관리해줍니다. DHCP라고 부르는 기능은 유/무선 공유기가 자동으로 IP를 할당하여 관리하는 편리한 기능입니다.
유/무선 공유기는 IP를 관리해준다.

따라서, 여러분은 직접 IP를 정하거나 유/무선 공유기가 DHCP 기능으로 인해 자동 할당된 IP를 알아냄으로써 쉽게 IP를 정할 수 있습니다.
포트 번호는 다른 프로그램과 겹치지 않도록 고유 번호를 사용하면 됩니다.

다음으로 할 일은 프로토콜 선택입니다.
CommWifi는 TCP만 지원하기에 아두이노와 통신하기 위해서는 반드시 TCP 프로토콜이 가능해야 합니다.
TCP 프로토콜은 Server와 Client로 역할이 나뉩니다.
  • TCP Server: TCP Client 연결을 기다리며 접속 요청을 처리합니다.
  • TCP Client: TCP Server에 접속 요청을 하여 연결합니다.
아두이노는 TCP Server가 되어야 하고, 유니티는 TCP Client가 되어야 합니다.
이와 같은 이유로 CommWifi에서 Inspector 설정 정보는 다음과 같습니다.
  • IP Address: TCP Server의 IP 주소
  • Port: TCP Server와 통신할 포트 번호
  • OnOpen: TCP Server와 통신 연결되었을 때
  • OnClose: TCP Server와 통신 연결이 해제되었을 때
  • OnOpenFailed: TCP Server와 통신 연결 시도가 실패했을 때
  • OnErrorClosed: TCP Server와 통신 연결이 강제로 해제되었을 때
CommWifi는 ArdunityApp에 연결되어 아두이노 보드의 하드웨어를 제어할 수 있습니다.

WiFi 통신은 PC나 스마트 기기에서 모두 가능하기에 CommWifi는 Windows/Mac/Android/iOS에서 모두 가능합니다.
다만, 앞에서 언급했듯이 아두이노 보드가 도메인이 없는 관계로 유/무선 공유기를 통해서만 통신 테스트를 해야합니다.
반드시 유/무선 공유기에 연결하여 테스트해야 한다.

이제 인터넷 통신을 위한 아두이노 장치에 대해 알아보겠습니다.
아두이노를 위한 수 많은 인터넷 통신이 가능한 모듈들이 있지만, CommWifi를 사용하려면 반드시 TCP Server가 가능한 부품을 사용해야 합니다.
아두니티 예제에서 테스트된 부품은 다음의 2종류입니다.
아두이노 윤(Yun) 보드

DFRobot사의 Wifi Shield

안타깝지만, 아두이노에서 많이 언급되는 ESP8266은 CommWifi와 통신할 수 없습니다. 향후, ESP8266도 가능하도록 업데이트할 예정입니다.
ESP8266은 아직 지원하지 않습니다.

아두이노 Yun과 DFRobot의 Wifi Shield는 모두 TCP Server로 작동시킬 수 있습니다.
다만, 아두이노 Yun과 DFRobot의 Wifi Shield는 아두이노 스케치가 다르기때문에 이에 맞는 설정이 필요합니다.
아두이노 Yun은 인터넷 통신을 위한 칩과 아두이노 Uno 보드가 합쳐져있습니다. 아두이노 Yun에서는 인터넷 통신을 위해 UART를 사용할 수 없고, Bridge라고 부르는 라이브러리를 사용하여 SPI통신을 해야 합니다.
즉, 아두이노 Yun과 CommWifi가 통신하려면 ArdunityApp에서 Stream Class를 Bridge로 선택해야 합니다.


DFRobot의 Wifi Shield는 아두이노 보드와 인터넷 통신 칩이 UART로 연결되어 있습니다. 따라서, 아두이노 스케치에서 기존과 동일하게 Serial Stream Class로 통신할 수 있습니다.

아두이노 Yun과 DFRobot의 Wifi Shield를 유/무선 공유기에 연결하거나 IP와 Port를 알아내는 방법은 각자의 매뉴얼을 참고하시기 바랍니다.


댓글 3개:

  1. 안녕하세요 아두이노 관련한 일로 블로그의 아두니티를 사용하고 있습니다. 아두이노 윤을 이용해서 wifi 연결을 할려고 하는데요 공유기에 아두이노 윤을 연결하고 원격으로 아두이노 Export 된 아두이노 프로그램을 업로드 하는건 성공했습니다. 그런데 유니티에서 Connect 를 계속 시도하는데 "TimedOut", "Failed to open CommObject!" 라는 에러가 뜨고 연결이 안되네요... 혹시 아두이노말고 유니티에서 따로 설정해야 하는게 있나요? 아이피 주소를 공유기 아이피로 바꿔보기도 했는데 연결 할 수가 없네요

    답글삭제
    답글
    1. TimeOut 메시지가 나왔다는 것은 설정한 IP주소를 찾을 수 없다는 뜻입니다.
      아두니티에서 Unity와 Yun은 TCP/IP로 통신합니다.
      따라서, 아두이노 Yun은 TCP Server로 작동해야 합니다.
      공유기를 사용하면 Yun이 DHCP를 통해 할당받은 IP주소를 확인해야 합니다.
      이 경우 생각보다 복잡하니 우선, Yun에 직접 PC를 WiFi 접속한 후 시도해보시기 바랍니다.
      아두니티 사용에 관한 질문은 포럼을 이용해주시면 좋겠습니다.

      삭제
  2. Connection Refused, Fail to open CommObject라는 메세지가 뜨면서 연결이 안되는데 어떻게 해야 하나요?

    답글삭제