Witajcie moi drodzy
Dzisiaj opiszę moje pierwsze starcie z mało znanym modułem WiFi RN131. Celem projektu było samodzielne odpalenie RN131 bez użycia gotowych rozwiązań takich jak płytka RN-131-EK. Przetestować chciałem zarówno tryb access pointa (RN131 w roli tak jakby routera - RN131 wspiera DHCP jako access point oraz routing między klientami!) oraz klienta istniejącej sieci WiFi z szyfrowaniem WPA-PSK2. Dla modułu mam docelowo parę wymyślonych zastosowań, ale tu opiszę tylko pierwsze kroki z nim. Dołączę do nich dokładne zrzuty ekranu oraz dokładne informacje co i jak robiłem, by w razie czego każdy zainteresowany mógł odwzorować moje kroki i poradzić sobie szybko z uruchomieniem RN131, mimo iż zdaję sobie sprawę, że są inne dobre i popularniejsze moduły WiFi...
Moduł RN131
RN131 to moduł WiFi który umożliwia pracę w trybie hosta i klienta, wspiera szyfrowanie WEP, WPA oraz WPA2.
Posiada interfejsy UART i SPI. Oferuje programowalne piny GPIO oraz ADC. Można go prosto podłączyć do baterii dzięki zintegrowanemu układowi zasilania bateryjnego. Jednym z atutów RN131 jest jego niski pobór mocy.
RN131 charakteryzuje:
- transceiver 2.4-GHz IEEE 802.11b/g
- niski pobór mocy: 4 uA tryb snu, 40 mA odbiór, 210 mA nadawanie
- duży throughput, 1 Mbps przy TCP/IP i szyfrowaniu WPA2
- mały rozmiar, moduł do montażu powierzchniowego
- ceramiczna antena na pokładzie oraz dostępne złącze U.FL do podłączenia zewnętrznej anteny
- 8-Mbit pamięci flash i 128KB RAM
- sprzętowy interfejs UART
- 10 pinów IO
- 8 pinów ADC
- moduł RTCC wspierający wybudzanie RN131 z uśpienia i time stamping
- może być zasilany stabilizowanym 3.3V lub 2-3V z baterii
- wspiera szyfrowanie WPA2-PSK
- wsparcie uzyskiwania dynamicznego IP poprzez DHCP
Schemat blokowy RN131:
RN131 zostało opracowane przez Roving Networks, które potem było przejęte już przez Microchipa.
Użyte PCB
Początkowo chciałem zaprojektować PCB od zera, ale tak się złożyło, że w sieci krążył już gotowy projekt który w pełni spełniał moje wymagania. To RN131 Breakout Board od SparkFun, projekt open hardware. W sieci znalazłem jego źródła Eagle (.brd i .sch) których użyłem, by zamówić odpowiedni panel.
Tak wygląda ta PCB w Eagle:
Tak wygląda utworzony przeze mnie panel którego produkcję zleciłem płytkarni:
I wyprodukowany panel:
Co ciekawe, przy tworzeniu tego panelu popełniłem małe przeoczenie, którego nie zauważyłem na czas przy zleceniu produkcji. Sam producent płytek też na to nie zwrócił uwagi i w ten sposób każda osobna płytka na panelu ma nieco inną warstwę opisową - to widać po dokładnym przyglądnięciu się.
Krok po kroku uruchomienie i testy
Pierwsze testy wykonałem po prostu przylutowując kabelki do odpowiednich pinów modułu. Informacje co podłączyć wziąłem z dokumentacji:
Wybrałem wersję zasilania z 3.3V DC, zaznaczoną na obrazku.
Pin RESET zostawiłem niepodłączony, gdyż nie jest to wymagane:
Do tego oczywiście przylutowałem kabelki też do pinów UART:
Wyszło tak:
Potem podłączyłem całość do przejściówki USB to UART, pin TX RN131 bezpośrednio, pin RX 131 przez rezystory by go chronić przed za dużym napięciem (nie jest 5V tolerant, wiec 5V na UART by mogło mu zaszkodzić), dodatkowo na płytce stykowej umieściłem LDO 3.3V (użyłem TC1264, ale w zasadzie mógłby być każdy), ustawiłem odpowiedni baud rate (9600 domyślnie) i rozpocząłem komunikację z modułem poprzez wysłanie sekwencji "$$$": [url=https://obrazki.elektroda.pl/1787942900_1552786650.png][img:2fe1e2e1c9]https://obrazki.elektroda.pl/1787942900_1552786650_thumb.jpg[/img:2fe1e2e1c9][/url] Moduł odpowiedział sekwencją "CMD": [url=https://obrazki.elektroda.pl/4761928400_1552786680.png][img:2fe1e2e1c9]https://obrazki.elektroda.pl/4761928400_1552786680_thumb.jpg[/img:2fe1e2e1c9][/url] Oznaczało to, że przeszedł w tryb komend i można wydawać mu polecenia i np. skonfigurować tryb AP hosta lub clienta. Na początek wysłałem komende ls: [url=https://obrazki.elektroda.pl/6524765800_1552786775.png][img:2fe1e2e1c9]https://obrazki.elektroda.pl/6524765800_1552786775_thumb.jpg[/img:2fe1e2e1c9][/url] i otrzymałem listę plików w pamięci oraz wersję firmware modułu: [url=https://obrazki.elektroda.pl/1054837500_1552786821.png][img:2fe1e2e1c9]https://obrazki.elektroda.pl/1054837500_1552786821_thumb.jpg[/img:2fe1e2e1c9][/url] Ciekawostka: możliwe, że nie każdy wie, że w programie który używam (RealTerm) można wpisywać komendy bezpośrednio na czarnym ekranie, tzn. w konsolce i zatwierdzać je enterem. Jest to równoważne z wysłaniem tekstu poprzez pole i przycisk 'Send' z włączonym CRLF poniżej. Następnie z pomocą narzędzia Scan uzyskałem listę dostępnych sieci: [url=https://obrazki.elektroda.pl/7174726400_1552787237.png][img:2fe1e2e1c9]https://obrazki.elektroda.pl/7174726400_1552787237_thumb.jpg[/img:2fe1e2e1c9][/url] Następnie uznałem, że skonfiguruję RN131 jako hosta (jako access point). Nie wszystko poszło OK, ponieważ nie udało się ustawić hasła, ale sam AP wstał bez problemu i od razu zaczął być widziany przez komputer: [url=https://obrazki.elektroda.pl/2291052000_1552787677.png][img:2fe1e2e1c9]https://obrazki.elektroda.pl/2291052000_1552787677_thumb.jpg[/img:2fe1e2e1c9][/url] Warto wspomnieć, że w takim trybie access point RN131 wspiera aż do 7 klientów na raz i nadaje im IP poprzez DHCP: [url=https://obrazki.elektroda.pl/5719460100_1558531187.png][img:2fe1e2e1c9]https://obrazki.elektroda.pl/5719460100_1558531187_thumb.jpg[/img:2fe1e2e1c9][/url] Następnie wróciłem do hardware. Uznałem, że pora spróbować przylutować RN131 normalnie do podstawki, mimo iż jest to dość trudne w warunkach domowych. Użyłem w tym celu najzwyklejszej opalarki, gdyż nie posiadam jeszcze zestawu hot air do lutowania: [url=https://obrazki.elektroda.pl/4507088900_1552788783.jpg][img:2fe1e2e1c9]https://obrazki.elektroda.pl/4507088900_1552788783_thumb.jpg[/img:2fe1e2e1c9][/url] Pobieliłem piny, dałem dość dużo topnika i mocno nagrzałem płytkę, po czym ostrożnie ustawiłem na odpowiednim miejscu moduł RN131 i lekko docisnąłem go z góry. Udało się! Tak wygląda przylutowany moduł wraz z płytką i kabelkami, juz po po poprawnie przeprowadzonych testach, ale jeszcze przed czyszczeniem z topnika: [url=https://obrazki.elektroda.pl/1092156800_1552788659.jpg][img:2fe1e2e1c9]https://obrazki.elektroda.pl/1092156800_1552788659_thumb.jpg[/img:2fe1e2e1c9][/url] [url=https://obrazki.elektroda.pl/6475718800_1558363496.png][img:2fe1e2e1c9]https://obrazki.elektroda.pl/6475718800_1558363496_thumb.jpg[/img:2fe1e2e1c9][/url] Podpisane piny od spodu: [url=https://obrazki.elektroda.pl/5915170000_1558363469.png][img:2fe1e2e1c9]https://obrazki.elektroda.pl/5915170000_1558363469_thumb.jpg[/img:2fe1e2e1c9][/url] Następnie uznałem, że pora przetestować RN131 w roli klienta. Zamierzałem podłączyć się do mojego routera, który korzysta z szyfrowania WPA-PSK2. [url=https://obrazki.elektroda.pl/6826399000_1558359877.png][img:2fe1e2e1c9]https://obrazki.elektroda.pl/6826399000_1558359877_thumb.jpg[/img:2fe1e2e1c9][/url] Ponownie uruchomiłem tryb konfiguracji RN131 poprzez wysłanie sekwencji $$$:
A potem użyłem kolejno komend:
- set wlan ssid <SSID> aby ustawić nazwę mojej sieci
- set wlan pass <hasło> aby ustawić hasło WPA-PSK2 z mojej sieci
- set wlan join 1
- save
Po ustawieniu informacji o moim routerze i zapisaniu ich użyłem komendy "reboot" by uruchomić ponownie moduł. Po włączeniu RN131 połączył się od razu z moim routerem i uzyskał adres IP z pomocą DHCP:
Na koniec jeszcze sprawdziłem poprawność połączenia z pomocą programu Putty. Putty skonfigurowałem tak by łączył się z adresem IP uzyskanym przez moduł (192.168.102 port 2000)
Jak widać, wszystko działa. Komunikaty wysyłane przez WiFi przez Putty są poprawnie odbierane przez moduł RN131 i drukowane na UART.
Na koniec jeszcze użyłem komendy "get everything" aby przejrzeć ustawienia modułu:
Uwaga: komenda get everything w RN131 zwraca wszystkie ustawienia, łącznie z ustawionym hasłem sieci WiFi w postaci czystego tekstu!
Podsumowanie
W ten sposób udało mi się uruchomić mało znany moduł WiFi RN131 w trybie zarówno klienta jak i hosta. Nieodzowną pomocą w tym był WiFly Command Reference Manual od Microchipa, który zawiera listę wspieranych komend i opis jak należy je stosować. Mam nadzieję, że mój temat kogoś zainteresuje, a może nawet ułatwi start z WiFi bądź modułami RN.
Załączam dokumentację, kilka użytecznych PDF, źródła Eagle dla dwóch rodzajów PCB (to z tematu oraz takie z dodatkowymi diodami LED), oraz sterowniki dla Windowsa dla przejściówki UART-USB której użyłem przy testach:
Fajne? Ranking DIY Pomogłem? Kup mi kawę.
