[아두이노] [강좌] 47. 와이파이 통신 (1) - 와이파이란 무엇인가
오랜만의 강좌. 기다려주신 분들께 감사하며,
시작!
이번 강좌에서는 와이파이에 대해 다뤄 볼 예정이다.
와이파이. 와이파이란 무엇인가? (또 시작)
머릿속으로 뭔가 떠오르지만 말로 설명하기 쉽지 않다. 또는, 이게 맞는가 확신이 없다. 그래서 구글에 '와이파이'라고 쳐봤졍.
와이파이(Wi-Fi)는 와이파이 얼라이언스(Wi-Fi Alliance)의 상표명으로, IEEE 802.11 기반의 무선랜 연결과 장치 간 연결(와이파이 P2P), PAN/LAN/WAN 구성 등을 지원하는 일련의 기술을 뜻한다. 처음의 와이파이는 사실상 IEEE 802.11과 동의어로 사용되었으나, 현재 와이파이는 802.11 기반의 많은 소프트웨어 기술을 포함하며, 802.11에서 지원되나 와이파이에서 쓰이지 않는 기술도 있으므로 둘을 혼동하지 않는 것이 좋다. 와이파이 통신은 기본적으로 인터넷에 데이터를 전달해 주는 기능을 하는 AP(액세스 포인트)와 노트북이나 스마트폰과 같이 사용자가 서비스를 받는 단말간의 통신이다. 와이파이를 이용하려면 단말에 연결하기 위한 하드웨어 (무선 랜카드)가 있어야 하며, 운영 체제에서 해당 무선랜카드를 인식할 수 있는 장치 드라이버가 설치되어야 한다. ... - 출처 : 위키백과 |
간단히 말하면 '무선랜' 단말과 'AP(Access Point, 액세스 포인트)'를 연결하여 통신할 수 있게 하는 기술이다. 'IEEE 802.11'은 와이파이에서 사용하는 무선 통신 프로토콜이라 생각하면 된다.
보통의 와이파이 모듈은 근처의 'AP'에 접속하여 IP를 할당 받아 인터넷에 접근할 수 있다. 인터넷을 이용하려면 근처에 와이파이를 지원하는 'AP'가 반드시 존재해야 한다는 뜻. 단, 근처에 여러 대의 'AP'가 존재한다면 'AP' 간의 간섭으로 통신이 원활히 이뤄지지 않을 수 있다.
최근에 출시되는 와이파이 모듈 중에는 직접 AP 기능을 지원하는 모듈도 있어서 'AP'가 없이도 양자간 통신이 가능하지만, 그럴 경우 외부 인터넷으로의 통신을 불가능하다. 처음 와이파이가 지원되는 카메라를 사고는 카메라가 AP로 잡힌다는 사실에 꽤나 충격을 받았었는데, 요새는 하도 무선 통신 기술이 발전하다 보니 전혀 놀랄 일이 아니게 되었구만. 허허허.
'AP' 기능까지 다룰 예정은 아니고, 근처의 'AP'에 접속하여 인터넷 통신을 하는 실습을 진행해보자. 혹시 'AP' 기능을 사용하고 싶은 사람은 아래 참고할만한 블로그를 첨부 해둘테니 참고. 마침 실습하려는 모듈이랑 같은 모듈이군요.
실습에 사용될 와이파이 모듈은 다음과 같이 생긴 "WiFly" 모듈이다.
위 모델은 쉴드 형태로, 우노(Uno) 위에 그대로 적층해서 사용할 수 있도록 되어있다. 단, 우노 외의 보드에서는 적층해도 SPI 포트가 연결되지 않기 때문에 바로 사용할 수 없다. 메가(Mega 2560/ADK)에서는 브레드 보드를 이용하거나 케이블을 연결해서 사용해야 한다.
위 쉴드의 핀들 중 실제로 사용되는 핀은 전원부의 핀(RES, VIN, GND)들과 7(nIRQ), 10(SS), 11(MOSI), 12(MISO), 13(SCK) 번 핀들이다. 전원부의 핀과 7번은 메가에서도 그대로 사용할 수 있으며, 나머지 SPI 관련 핀들은 다음 표를 참고하여 케이블이나 브레드 보드 등으로 메가에 맞게 연결한다.
| MOSI | MISO | SCK | SS |
우노(Uno), WiFly Sheild | 11 | 12 | 13 | 10 |
메가(Mega 2560/ADK) | 51 | 50 | 52 | 53 |
그림으로 나타내면 다음과 같다.
아. 지저분하다. 뭔가 굉장히 지저분하다. ㅜㅜ
또는 리셋 버튼 왼쪽의 ICSP 포트를 이용하여 연결해도 좋다. ICSP 포트에 대한 내용 또는 SPI에 관한 내용은 지난 SPI 강좌를 참조.
SS 핀은 메가에서 기본으로 53번에 정의(define)되어 있기 때문에 53번을 연결한 거고, 만일 SS 핀 번호를 바꾸고 싶다면 'WiFly' 라이브러리 내에서 SS 핀을 재정의 해주면 된다.
WiFly 쉴드에 사용된 칩은 'RN-131C' 칩으로, 지난 강좌에서 사용한 블루투스 모듈과 제조사가 같다. 그래서 커맨드 형식이 비슷함. 사실 'RN-131C' 칩은 외부 기기와 UART, 즉 시리얼 통신으로 통신하는데, 지금 사용하는 쉴드는 'RN-131C' 칩과 외부 포트 사이에 'SC16IS750'이라는 칩이 하나 더 달려 있어 시리얼 데이터를 SPI 데이터로 변환하는 역할을 해준다.
그 구조를 그림으로 나타내면 다음과 같다.
(이미지 출처 : https://sparkfun.com)
왜!? 그냥 'RN-131C' 칩이랑 다이렉트로 시리얼 통신하면 되는 걸, 왜 굳이!??
왜냐하면 우노에는 시리얼 포트가 하나 뿐이기 때문에, PC와의 시리얼 통신 기능을 유지하면서 'RN-131C' 칩과 고속의 데이터 통신을 하기 위해서이다, 라고 튜토리얼에 나와 있어요.
이 때문에 이 모듈에서 약간의 문제가 발생하는데, 간단한 데이터를 주고 받는 데에는 문제가 없지만 일정 크기 이상의 데이터를 연속으로 전송할 경우 데이터가 누락되거나 기능이 정지하는 현상이 발생한다. 튜토리얼에는 나와있지 않지만, 직접 사용해보니 그렇다. SPI 통신 속도가 시리얼 통신 속도보다 빠르기 때문에 데이터 오버플로우가 발생하는 것이라 추측된다.
그래서 큰 데이터를 보내려면 커맨드 모드를 통해 'RN-131C' 칩의 데이터 버퍼 크기를 늘려주는 작업이 필요하다. 또는, 쉴드 없이 칩만을 이용하여 아두이노와 시리얼로 연결해주는 방법도 있다.
근데 그냥 작은 데이터(64바이트 이하 정도?)를 주고 받는 데는 이상 없으니까, 아닌 사람은 넘어가자.
자, 연결해줬으니 이제 뭔가 동작을 해봐야지??
다음 강좌에서 커맨드 모드를 이용하여 칩의 설정을 확인하고 수정하는 방법에 대해 알아보자. 그럼 이번 강좌는 여기서 이만. 안녕!