WiFly XBee modem czyli jak Arduino do WiFi podłączyć

Często zadawanym pytaniem jest jak podłączyć Arduino do sieci WiFi. Jest kilka interesujących rozwiązań, teraz opiszę modem WiFly w formacie modemu XBee. Pasuje on do każdego urządzenia współpracującego z XBee, oferuje on też możliwości podobne do modemów XBee jak wejście analogowe czy wejścia/wyjścia cyfrowe. Znaczy to tyle, że sam modem, bez udziału mikrokontrolera potrafi zmierzyć napięcie czy wysterować jakiś przekaźnik (ale z tranzystorem do wysterowania przekaźnika oczywiście).  Teraz w kilku słowach jak uruchomić taki modem.

Testowany zestaw:

WiFly Xbee modem, XBee Explorer USB dongle i antena


System Linux Ubuntu 12.04 LTS. Do komunikacji z modemem przez UART użyty program cutecom. Access point Linksys z autentykacją WPA2 Personal (TKIP + AES).

Modem wsadzony w dongle i podłączony do laptopa pojawił się w systemie jako /dev/ttyUSB0. Uruchamiamy cutecom z paramaterami transmisji 9600,8,N,1 podłączamy się do urządzenia na /dev/ttyUSB0.  Na konsolę dostajemy komunikaty:

Auto-Assoc roving1 chan=0 mode=NONE FAILED

Jest to znak, że komunikacja z modułem jest OK.

Na początek trzeba wybrać opcję kończenia linii No line end – po naciśnięciu enter wysyłany jest tylko wpisany tekst bez znaków końca linii (ani CR lub LF). Jest to niezbędne by wejść w tryb komend. Wchodzimy w tryb komend wysyłając trzy znaki $$$ bez znaku końca linii, modem odpowiada nam:

CMD

To znak że jesteśmy w trybie konfiguracji. Zmiana trybu wpisywania na CR,LF line end.  Wydajemy kolejno polecenia:

set wlan ssid NASZE_SSID
AOK
 <2.32>
 set wlan phrase HASLO_DO_WPA_BEZ_SPACJI
AOK
 <2.32>
 set wlan auth 4
AOK
 <2.32>

Kolejno: ustawiamy SSID, ustawiamy hasło do WPA, wybieramy tryb autentykacji. Uwaga, wygląda na to, że jeżeli hasło zawiera spację, nie da się podłączyć do WiFi… Są dostępne różne tryby autentykacji, jeżeli korzystasz z innego niż opisany tutaj WPA Personal, zajrzyj do User manuala modułu, tam znajdziesz w opisie komendy set wlan auth jakiej wartości należy użyć.

Następnie:
 join NASZE_SSID
 Auto-Assoc NASZE_SSID chan=4 mode=WPA2 SCAN OK
 Joining NASZE_SSID now..
 <2.32>
 Associated!
 DHCP: Start
 DHCP in 1250ms, lease=86400s
 IF=UP
 DHCP=ON
 IP=192.168.23.104:2000
 NM=255.255.255.0
 GW=192.168.23.1
 Listen on 2000

Powyższa komunikacja jest dowodem na to, że podłączyliśmy się do sieci WiFi. Jeżeli się nie udaje to wskazówką czy w ogóle sieć jest widziana może być fakt, że wybierając kanał 0 dla WiFi mówimy modemowi, aby skanował całe pasmo, by ustalić na którym nadaje sieć z naszym SSID. Jeżeli nie znajduje kanału to prawdopodbnie modem nie wykrywa sygnału (problem z anteną lub zasięgiem).

Zapisujemy konfigurację, inaczej po odłączeniu zasilania konfiguracja będzie musiała znowu być zrobiona przez UART:

save
Storing in config
 <2.32>

Teraz z linii poleceń komputera (adres IP oczywiście jest podany w odpowiedzi po podłączeniu się do sieci, z DHCP routera):

 telnet 192.168.23.104 2000

łączy nas z modemem i to co napiszemy w telnecie pojawia się na UART modemu, co wpiszemy na UART idzie na telnet.  Na UART otwarcie połączenia przez telnet skutuje pojawieniem się napisu *OPEN* zamknięcie tegoż, skutkuje napisem *CLOS*. Jednocześnie tylko jedna sesja telnet może być otwarta – otwarcie drugiej sesji zamyka pierwszą.