Moduły Wi-Fi są elementami łączącymi zasoby sprzętowe z możliwościami programowymi potrzebnymi do pracy sterownika mikroprocesorowego w sieciach WLAN – Wireless Local Area Network. Przez zasoby sprzętowe rozumiemy kompletny transciver pracujący w paśmie częstotliwości 2,4 GHz, lub/i 5 GHz oraz wbudowany wydajny mikrokontroler wspierający obsługę stosu TCP/IP i szyfrowanie transmisji WEP/WPA/WPA2.
Moduł jest umieszczony na płytce drukowanej przeznaczonej do montażu powierzchniowego. To rozwiązanie dobrze się sprawdza w nowo projektowanych urządzeniach. Jednak żeby można było przeprowadzić testy, chociażby w celu potwierdzenia przydatności w nowym projekcie ST przygotował moduł ewaluacyjny X- NUCLEO-IDW01M1 kompatybilny sprzętowo z modułami mikrokontrolerów serii STM32Nucleo.
Moduły ewaluacyjne NUCLEO (moduły mikrokontrolerów i płytek rozszerzeń) są sprzętowo zgodne ze standardem Arduino UNO R3, ale żeby wykorzystać wszystkie możliwości sprzętowe mikrokontrolerów płytki NUCLEO wyposażono w dodatkowe złącza nazwane ST Morpho. Zestaw X-NUCLEO-IDW01M1 można łączyć z modułem mikrokontrolera tylko za pomocą złącza Morpho. Na fotografii 1 pokazano połączone moduły Wi-Fi X-NUCLEO-IDW01M1 i NUCLEO-F401RE.
Dla wszystkich zaawansowanych modułów X-NUCLEO ST przygotowuje i udostępnia programy demonstracyjne z kompletnymi projektami zawierającymi pliki źródłowe w C, pod różne środowiska projektowe. Tak tez jest w przypadku modułu X- NUCLEO-IDW01M1 Dostępne są też gotowe pliki wynikowe do wgrania bezpośrednio do pamięci mikrokontrolera. Na rysunku 2 przedstawiono blokowo strukturę budowy programów demonstracyjnego.
Komponenty programowe zawierają kompletne middleware do budowania aplikacji używającej SPWF01SA. Warstwa API pozwala na prostą konfigurację i pracę modułu. Dzięki możliwości używania programu STM32Cube można w prosty sposób dostosowywać aplikację do różnych typów mikrokontrolerów STM32. Dostarczone przez STMicroelectronics przykłady umożliwiają pracę modułu Wi-Fi z modułami NUCLEO-F103RB, F401RE i L053R8.
Jak już wspominałem, moduł SPWF01SA ma wbudowany mikrokontroler z rodziny STM32 Cortex-M3 z zapisanym w pamięci Flash firmware. To firmowe oprogramowanie jest rozwijane i jest możliwość jego aktualizacji przez interfejs UART. Trzeba do pamięci mikrokontrolera modułu STM32 X-NUCLEO połączonego z X-NUCLEO-IDW01M1 wgrać skompilowany plik z katalogu FW_Upgrade_UART zawartego w paczce programowej z programami testowymi. Moduł mikrokontrolera STM32 Nucleo może się teraz łączyć z komputerem poprzez wirtualny UART via USB. Do komunikacji można użyć dowolnego programu terminalowego np. PuTTY, TeraTerm itp. Parametry transmisji: 115200 b/s, 8 b, none; 1 i Flow Ctrl: None. Po wysłaniu komendy AT+S.STS moduł odpowie informacją o wersji firmware wgranej do mikrokontrolera modułu SPWF01SA. Na jej podstawie można podjąć decyzję o aktualizacji.
Procedurę aktualizowania firmware dokładnie opisuje dokument X-NUCLEO-IDW01M1-FW upgrading over UART.pdf dostępny z programami demonstracyjnymi w katalogu Documentation.
• Transceiver pracujący w paśmie 2,4 GHz zgodnie z IEEE 802.11 b/g/n
• Moduł radiowy spełnia wszystkie europejskie normy i dyrektywy w zakresie kompatybilności elektromagnetycznej
• Zintegrowana antena w wersji SPWF01SA.xy, lub zintegrowane złącze antenowe w wersji SPWF01SC.xy
• Moc TX 18,3 DSSS DSM 1 dBm, 13,7 dBm przy 54 MB/s OFDM
• Czułość RX –66 dBm przy 1 Mbps OFDM, –74,5 dBm przy 54 MB/S OFDM
• Interfejs UART (Host)
• Wbudowany mikrokontroler STM32 Cortex-M3 64 kB RAM i 512 kB Flash
• Zintegrowany stos TCP/IP: 8 jednoczesnych klientów TCP, lub UDP i 1 socket server
• 1 socket klient TLS/SSL wspierający protokół TLS1.2 z algorytmami szyfrowania AES, hash i algorytmy klucza publicznego (RSA, ECC)
• Serwer internetowy obsługujący dynamicznie strony internetowe
• Szyfrowanie transmisji WEP/WPA/WPA2
• Możliwość aktualizacji firmware za pośrednictwem UART
Zestaw programów demonstracyjnych oraz prostych programów pomocniczych pozwala użytkownikowi na konfigurowanie modułu SPWF01SA:
- do połączenia z punktem dostępowym Acces Point (AP),
- do pracy w trybach STA (Station), MiniAP (mini Acces Point), IBBS (pracy w konfiguracji ADHoc),
- do skanowanie dostępnej sieci, wybór punktu dostępowego AP i połączenia z nim,
- do użycia połączenia TCP/UDP do otwierania, zamykania, oraz zapisywania/odczytywanie soketów.
Przykład Client Socket
W tej aplikacji moduł Wi-Fi jest skonfigurowany jako STA (station) i musi się połączyć z punktem dostępowym AP . Tym punktem w czasie testu był router wykorzystywany łączenia się z Internetem za pomocą linii telefonicznej z wbudowanym interfejsem Wi-Fi. Połączenie wymaga podania SSID sieci, rodzaju szyfrowania transmisji radiowej i hasła dostępu. Po wgraniu programu do pamięci mikrokontrolera i połączeniu z portem USB komputera mamy możliwość używania konsoli znakowej przez wirtualny interfejs UART pracujący z prędkością transmisji 115200 b/s I parametrami transmisji Data: 8bit, Parity: None; Stop Bit: 1bit, Flow Ctrl: None. Ja użyłem programu TeraTerm. Na rysunku 5 pokazano zrzut z ekranu w trakcie wpisywania przez konsolę danych potrzebnych do połączenia z siecią WLAN routera.
Po potwierdzeniu, że będziemy wprowadzać dane do konfigurowania transmisji wprowadzamy kolejno:
- identyfikator sieci SSID,
- hasło dostępu,
- rodzaj szyfrowania transmisji,
- nazwę (adres ip) komputera pełniącego rolę serwera przy nawiązywaniu połączenia klient serwer.
Po wprowadzeniu tych danych rozpoczyna się inicjalizowanie modułu Wi-Fi i jeżeli wszystko jest poprawne wyświetli się komunikat „WiFi Initialised and Ready, End of Initialization” – rysunek 6.
Po prawidłowej inicjalizacji wykonywane jest skanowanie sieci, wykrywanie jej identyfikatorów i próba łączenia z siecią o SSID wprowadzonym z konsoli – rysunek 7.
Kiedy połączenie z siecią WLAN jest zestawione, router przydziela modułowi adres IP – w naszym przypadku jest to adres 192.168.1.3. Na rysunku 8 pokazano fragment zakładki DHCP strony konfiguracyjno-administracyjnej routera z tabelą zawierającą nazwy hostów pracujących w lokalnej sieci, ich adresy MAC i adresy IP. Nasz moduł zgłosił się jako iwm-B8-D7-75 i jak już wspomniałem przydzielono mu adres 192.168.1.3.
Komputer (laptop) łączący się przez Wi-Fi i pracujący w tej sieci na przydzielony adres 192.168.1.4. Ten sam adres wprowadziliśmy jako Hostname (APACHE Server) w trakcie wprowadzania danych konfiguracyjnych. Pokazane to zostało na rysunku 5. Po nawiązaniu połączenia z AP i przydzieleniu adresu IP w sieci moduł Wi-Fi próbuje otworzyć połączenie (socket connection) ze zdalnym socketem.
Jeżeli próba połączenia przebiegnie poprawnie, to moduł otwiera własny zdalny socket. Do testowania połączenia klient-serwer można użyć testowego programu server.exe dostępnego w katalogu Utilitestcp socket w paczce programów testowych. Server.exe musi być uruchomiony na komputerze PC o adresie Hostname = 192.168.1.4 pracującym w tej samej sieci co moduł Wi-Fi. Ten program otwiera swój socket na porcie 32000 i czeka na połączenie klienta i po jego zrealizowaniu połączenia czeka na dane. Informacja o zrealizowaniu połączenia jest sygnałem dla klienta o konieczności wysłania danych do apikacji server. Klient testowo wysyła do serwera łańcuch znakowy „Test przykładu Client Socket modul SPWF01SA1”. Serwer po odebraniu danych odsyła je kontrolnie do klienta (echo). Na rysunku 10 pokazano kolejne etapy zestawiania połączenia i przesyłania danych.
Na listingu 1 zamieszczono fragment pętli głównej programu odpowiedzialny za przesłanie danych klient-serwer.
case wifi_state_socket_write:
HAL_Delay(500);
printf(„\r\n >>Writing data to client\r\n”);
memset(echo,0x00,512);
snprintf(echo, 50, „Test przykladu Client Socket modul SPWF01SA1”);
len = strlen(echo);
/* Read Write Socket data */
status = wifi_socket_client_write(socket_id, len, echo);
if(status == WiFi_MODULE_SUCCESS)
{
printf(„\r\n >>Client Socket Write OK \r\n”);
}
wifi_state = wifi_state_idle;
break;
Przykład serwer tryb MiniAP
W tym przypadku moduł Wi-Fi jest skonfigurowany jako punkt dostępu Acces Point MiniAP. Podobnie jak w przypadku poprzedniego programu testowego jest możliwość łączenia z programem terminala znakowego się przez wirtualny port szeregowy UART o dokładnie takich samych parametrach transmisji. MiniAp ma domyślny SSID SPWF04SA, ustawione szyfrowanie WPA2 i hasło „123456789” – listing 2.
char * ssid = „SPWF04SA”;
char * seckey = „123456789”;
uint8_t channel_num = 6;
WiFi_Priv_Mode mode = WPA_Personal;
Dane konfiguracyjne można zmienić po restarcie mikrokontrolera, podobnie jak w przypadku poprzedniego programu przykładowego. Na rysunku 11 pokazano okno z wykrytą siecią o SSID SPWF04SA.
Zrzut z ekranu terminala znakowego w trakcie inicjalizacji programu Server-Socket z domyślnymi ustawieniami został pokazany na rysunku 12.
W terminalu jest wypisywany adres IP i MAC adres. Moduł ma w sieci lokalnej na sztywno ustalony adres IP 172.24.117.1. Do testowania połączenia server-client użyjemy programu SocketTest V3.0.0 dostarczanego w paczce programów testowych w katalogu Utilites. Uruchamiamy go na komputerze połączonym przez Wi-Fi do sieci miniAP o SSID SPWF04SA. Najpierw trzeba otworzyć zakładkę Client i wpisać w pole IP Address adres IP miniAp równy 172.24.117.1.
W polu Port wpisujemy wartość 32000. Po wpisaniu tych danych klikamy na przycisk Connect i czekamy na połączenie z serwerem. Rolę serwera pełni moduł a rolę klienta komputer z uruchomionym programem SocketTest V3.0.0. Po połączeniu w polu Conected To pojawia się adres IP 172.24.117.1. – rysunek 13.
Po ustaleniu połączenia w konie Message można wpisywać tekst przesyłany do serwera. Naciśnięcie przycisku Send powoduje, że łańcuch znaków jest przesyłany do serwera i można to zobaczyć w terminalu znakowym – rysunek 14.
Tomasz Jabłoński, EP