본문 바로가기

Arduino

Arduino + Wifly (WiFi shield) (1-소개)










Arduino 로 무선 환경을 구성하는 가장 쉬운 방법은
역시 제품으로 나온 Shield를 구입해서 꽂는것입니다.

대부분의 Shield가 예제 스케치를 함께 제공하기 때문에 사용법에 대한 부담도 적습니다.
제 경험에 의하면 아두이노의 이.. 꽂고 구동시키는 행위는 레고의 마인드 스톰을 조작하는것 보다 더 쉬웠습니다.



Wifly shield


Arduino 무선을 위해서 이미 Zigbee, Bluetooth, Wifi 등의 쉴드가 나와 있습니다.
저는 그중에 지구에서는 어디든 컨트롤이 가능한 Wifi 를 구동시켜보고픈 마음에 Wifi실드를 찾아봤는데요
국내에서 구매할 수 있는 WiFi Shield는 사실상 Wifly 라는 이름은 가진 제품이 유일합니다.
아트로봇 에서 Shield치고는 13만원 이라는 거금을 주고 구입.
전자공학 지식이 있으면 wifi 모듈만 사다가 시리얼 컨트롤이 가능하게 구성할텐데 아쉬울 따름입니다.
참고로 쉴드에 포함되어 있는 RN-131C 모듈만 별도로 구매하면 디바이스마트에서 48,400원 이군요.


RN-131C


Wifly 소개

Wifly는 Sparkfun 이라는 해외 유명 전자부품 판매처에서 팔고 있는 제품입니다.
($89.95 라니 현지에서 사더라도 비싸군요 ㅎㅎ)

Wifly 소개 페이지
- Wifly Shield는 아두이노와 연결해서 802.11b/g 무선네트워크를 가능하게 합니다.
- Roving Network 사의 RN-131C 무선 모듈과 SC161S750 SPI-to-UART 칩을 사용합니다.
- 아두이노의 digital pin 10-13 번을 사용해서 SPI 통신을 합니다. (CS, MOSI, MISO, SCLK)
- 전원은 아두이노의 3.3V핀으로 공급받습니다.
- 프로토타입을 만들 수 있는 공간을 제공합니다.
- 원제품은 구입시 핀헤더는 포함되어 있지 않습니다. 6-8pin 재적층 가능한 핀헤더를 장착하면 됩니다.
   아트로봇에서 구입시에는 핀헤더를 같이 제공해줍니다.


 핀헤더를 납땜한후(망칠까바 ㅎㄷㄷㄷ) 아두이노와 결합



Wifly설치하기

Sparkfun에서 제공하는 관련 문서 링크입니다.

위 링크중 Experimental WiFly Arduino Library 를 누르면 Wifly library를 다운받을 수 있는 링크 페이지로 이동합니다. 현재 alpha 2 release 까지 나왔습니다.

git 도 공개되어 있네요. https://github.com/sparkfun/WiFly-Shield

해당 라이브러리는 다운 받은후 Arduino 의 library 디렉토리 아래에 풀어줍니다.

복사한후 Arduino 를 다시 실행시키면 File - Example 메뉴 아래에 Wifly를 테스트 해볼 수 있는 몇가지 샘플이 나타납니다.

 



웹서버, 클라이언트 예제. 자동접속, 공장초기화, 터미널통신 예제가 있습니다.



Wifly 동작시키기

그중에 SpiUartTerminal 가 Wifly의 전반적인 기능을 확인해 볼 수 있는 스케치입니다.
해당 스케치를 열어보면 아시겠지만. 단순히 RN-131C칩과 시리얼을 통해서 명령을 주고 받는 내용밖에 없습니다.

스케치를 업로드 한후 터미널을 열어보면 다음과 같은 문구를 볼 수 있습니다.

SPI UART on WiFly Shield terminal tool                                                                    
--------------------------------------                                      
                                                                            
This is a tool to help you troubleshoot problems with the WiFly shield.
For consistent results unplug & replug power to your Arduino and WiFly shield.
(Ensure the serial monitor is not open when you remove power.)
                                                           
Attempting to connect to SPI UART...                       
Connected to SPI UART.                                     
 * Use $$$ (with no line ending) to enter WiFly command mode. ("CMD")
 * Then send each command followed by a carriage return.
Waiting for input.


명령을 대기중인 상태이며 $$$을 입력하면 자동으로 명령을 입력할 수 있는 상태로 들어갑니다.

여기서부터는 데이터시트를 참고하여 필요한 명령어들을 처야 합니다.
몇가지 기본 명령어만 요약하면 다음과 같습니다.

명령어는 총 다섯개의 카테고리로 나눠집니다.
SET : 설정하는 명령어인데 바로 저장되고 효과가 나타납니다.
GET : 설정된 상태를 읽어서 보여줍니다.
STATUS : network interface 와 IP 등의 상태를 보여줍니다.
ACTION : scan, connect, disconnect등을 수행합니다.
FILE IO : Upgrade, 설저의 load save 등을 수행합니다.

좀더 자세한 내용은 위에 링크된 데이터시트를 살펴보시기 바랍니다.

실제로 ap에 접속하기 위해 제가 사용한 명령은 다음과 같습니다.
<2.23> show net //현재 Wifly상태를 보여줍니다.
SSid=AndroidAP
Chan=1
Assoc=OK
Rate=12, 24Mb
Auth=OK
Mode=OPEN
DHCP=OK,renew=269981
Boot=1779470
Time=FAIL
Links=1

<2.23> scan //주변AP검색
<2.23>
SCAN:Found 12
Num            SSID   Ch  RSSI   Sec    MAC Address     Suites
 1           AndroidAP 01 -45    Open 00:26:66:48:36:96   2104    0
 2            dell2 02 -56 WPA_Mix 10:12:e7:ef:69:51 AES/TKIPM-TKIP  3104    0
 3             dell1 06 -60     WEP 10:3e:e8:d3:20:fd   1104    4
 4                 ms 06 -61    Open 01:14:a0:c8:1a:12 AESM-AES  3104    0
 5               iptime 11 -78    Open 00:21:62:2d:f2:34    104    4
 6                   3i 11 -81 WPA2PSK 01:24:66:2e:e4:32 AESM-AES  1104    4

<2.23> join AndroidAP //AndroidAP에 접속합니다. 혹은 join #1이라고 해도 됨.
Auto-Assoc AndroidAP2 chan=1 mode=OPEN SCAN OK
Joining AndroidAP2 now..
<2.23> Associated!
DHCP: Start
DHCP in 127ms, lease=360000s
IF=UP
DHCP=ON
IP=192.168.159.2:2000
NM=255.255.255.0
GW=192.168.159.1
Listen on 2000

 

간단히 AndroidAP에 접속하고 ip를 받아온것을 확인 할 수 있습니다.



WiFly 웹서버예제
WiFly를 간단한 웹서버로 구동시켜보고 접속한 클라이언트에게 아날로그값을을 보여주는 예제.
WiFly에서 제공해주는 Arduino 용 Api들로 만들어진 예제입니다.
(API가 간단해도 너무 심하게 간단합니다.)

wifly 예제에서 WiFly_WebServer 스케치를 불러옵니다.
불러오면 Credentials.h 라는 헤더파일도 함께 열리는 것을 볼 수 있습니다.

#ifndef __CREDENTIALS_H__
#define __CREDENTIALS_H__
// Wifi parameters
char passphrase[] = "passphrase";
char ssid[] = "ssid";
#endif


여기에 접속할 AP의 ssid값과 암호가 설정되어 있을 경우 암호를 passphrase에 수정해서 적어줍니다.
암호가 없을경우 저 글자를 지워줘야 합니다.

해당 스케치를 Arduino 에 올린후 시리얼창을 열어보면
AP에 접속된후에 할당받은 IP 주소가 뜨게 됩니다.

약간 문제점이 있다면 서버에 접속하는 스케치부분은 함수 하나로 간단히 접속할 수 있도록 간편화 되어 있지만. 접속이 실패할 경우 무한히 대기한다는 점입니다. 타임아웃이나 retry값으로 조절을 해야할 것 같네요.
WiFly.join() 이 함수자체도 라이브러리를 살펴보면 그다지 똑똑한 함수는 아닙니다.
나중에 한번 고쳐봐야겠습니다.

  if (!WiFly.join(ssid, passphrase)) {
    while (1) {
      // Hang on failure.
    }
  }




응용
Wifly까지 장착했으니 아두이노에 날개는 달아준 셈인데...
아직 그럴싸한 아이디어가 떠오르지 않습니다.
간단히 Arduino Twitter 라이브러리를 활용해서 실내 온도를 트위터로 포스팅 해주는걸 구성해보았습니다.
(아트로봇 홈페이지를 참고했습니다)

다음 트위터 계정을 보시면 그 결과를 보실 수 있습니다.
http://twitter.com/watcher_bot1 (얘는 사람이 아니에요 ㅎㅎ)

 

 

Wifi로 온도를 포스팅하는
트위터봇!