WiFi를 통한 아두이노 활용(8) : 간단한 서버 구성 #1

2017. 7. 31. 09:47

Arduino/Wireless

아두이노와 무선인터넷을 통한 간단한 서버 구성 첫 번째

기본 서버 예제

이전 글까지 아두이노와 무선 인터넷을 통한 클라이언트 구현에 대해 다루었고 이번 글부터 서버 구현에 대해 다루겠습니다. 우선, 라이브러리에서 제공하는 기본 예제를 통해서 쉽게 접근해 보겠습니다.

이제 까지 해봤던 것과 마찬가지로 WiFi101라이브러리에서 예제를 찾아 열어 줍니다. 예제 명은 SimpleWebServerWiFi입니다.

이 예제는 이름 그대로 서버 기능을 확인할 수 있는 아주 간단한 프로그램입니다. LED 하나를 Digital 9번 핀에 연결한 상태에서 간단한 Web page를 서비스합니다. 아두이노의 IP 주소를 통해 웹페이지에 접속하면 딱 두 문장이 있는데, 하나는 LED를 켜는 명령, 다른 하나는 끄는 명령입니다.

이전에 다른 예제를 다룰 때와 마찬가지로 약간의 수정만으로 바로 실행이 가능한데, 되도록 보드 하나만 가지고 연습할 수 있도록 예제를 구성하기 위해서 LED는 별도로 연결하지 않고 보드에 내장된 것(보통 D13번에 연결된 Built-in LED)을 사용하겠습니다.

우선 실행에 앞서 보드와 포트가 제대로 선택되었는 지 체크합니다.

역시, 계속해서 보드는 Adafruit의 Feather시리즈중 하나인 M0-WiFi 보드입니다.

아래 그림이 예제 화면입니다. 수정할 부분을 표시했습니다.

1번은 접속한 무선랜에 대한 정보이므로 사용할 정보로 업데이트 해주면 됩니다. 2번은 이전 글에서 여러 번 언급한 부분으로, 무선 모듈의 SPI 핀설정입니다. 이 보드는 MKR1000 보드와 거의 동일하여 WiFi101 라이브러리를 그대로 적용해서 사용할 수 있습니다. 단지, SPI로 연결된 WiFi 모듈의 Pin 설정만 다를 뿐이므로, 위와 같이 코드를 추가해 주면 됩니다.

3번은 LED 핀설정 코드입니다. 기본 예제는 D9번에 LED를 연결했지만, 보드만으로 연습이 가능하도록 내장 LED를 사용하도록 수정했습니다. 이 보드도 D13번에 연결되어 있습니다. 숫자 13 대신에 LED_BUILTIN을 입력해도 됩니다.

웹페이지에 대한 코드입니다. 핀 번호만 9에서 13으로 수정해 주면 됩니다.

이 부분은 웹페이지를 통해 보내온 Client의 요청 메시지를 처리하는 부분입니다. 역시 핀번호만 수정하면 됩니다.

수정 후에, 컴파일 및 실행합니다.

실행한 후, Serial Monitor에 출력된 결과입니다. 기본적인 네트웍 접속 정보와 웹서버 접속 주소가 표시되고 있습니다.

아이폰의 사파리 웹브라우저를 통해 해당 주소로 접속하겠습니다. 이때, Feather 보드와 아이폰은 같은 WiFi망에 연결하고 있어야 합니다.

그림과 같이 딱 2줄의 문장으로 구성된 웹페이지가 보여집니다. 그리고, 이 때, 시리얼 모니터를 보면 클라이언트에게서 온 리퀘스트가 그대로 출력되어 확인할 수 있습니다.

노란색 부분이 클라이언트의 접속 및 요청 메시지입니다.

  • GET / HTTP/1.1
  • Host: 192.168.1.65
  • Connection: keep-alive

위 세 줄은 이미 Client 요청 메시지를 작성하는 부분에서 다루었던 부분입니다. (이전 글 참고)

참고로, Conntection 타입이 keep-alive로 되어 있지만, 이 예제는 응답 후 연결을 바로 끊는 close 방식입니다.

웹페이지에서 LED On을 클릭했을 때의 요청 메시지입니다. 표시된 GET 요청 부분만 다르고, 이 부분을 걸러서 실제 LED 동작을 구현합니다. OpenWeatherMap에서 특정 도시의 날씨 정보를 요청하는 부분과 동일한 방식입니다.

웹페이지에서 LED Off를 클릭했을 시의 요청입니다. 역시 GET메소드 부분만 다릅니다.

이로써 서버 구성 첫번째 예제를 실행해 봤습니다. 이 프로그램의 코드에 대한 설명은 나중으로 미루고, 다음 글부터 우선 좀더 쉬운 예제로 서서히 접근해보도록 하겠습니다.


Comments