Wi-Fi na STM32 z użyciem STM32CubeMX

Wi-Fi na STM32 z użyciem STM32CubeMX
Pobierz PDF Download icon

Moduły Wi-Fi, podobnie jak inne moduły realizujące połączenia bezprzewodowe (Bluetooth, Thread itp.) są dość popularne i oferuje je wielu producentów. Jednym z nich jest SPWF01SA produkowany przez firmę STMicroelectronics.

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.

Fotografia 1. Połączone moduły 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.

Rysunek 2. Struktura programu 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.

Rysunek 3. Pobieranie programów przykładowych

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.

Rysunek 4. Przykładowa odpowiedź na komendę AT+S.STS

Procedurę aktualizowania firmware dokładnie opisuje dokument X-NUCLEO-IDW01M1-FW upgrading over UART.pdf dostępny z programami demonstracyjnymi w katalogu Documentation.

Najważniejsze właściwości SPWF01SA:
• 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.

Rysunek 5. Wprowadzanie przez konsolę danych do połączenia z siecią WLAN

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.

Rysunek 6. Inicjalizacja modułu Wi-Fi

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.

Rysunek 7. Łączenie z siecią o SSID NETIA_MIK

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.

Rysunek 8. Urządzenia pracujące w lokalnej sieci LAN

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.

Rysunek 9. Łączenie klient-serwer

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.

Rysunek 10. Przesyłanie danych w przykładzie Client Socket

Na listingu 1 zamieszczono fragment pętli głównej programu odpowiedzialny za przesłanie danych klient-serwer.

Listing 1. Zapisanie 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.

Listing 2. Ustawienia miniAP
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.

Rysunek 11. Wykrycie sieci modułu pracującego w trybie miniAP

Zrzut z ekranu terminala znakowego w trakcie inicjalizacji programu Server-Socket z domyślnymi ustawieniami został pokazany na rysunku 12.

Rysunek 12. Inicjalizacja modułu – program przykładowy Server-Socket

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.

Rysunek 13. Okno programu SocketTest V3.0.0 pracującego jako klient

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.

Rysunek 14. Przesłanie tekstu do serwera

Tomasz Jabłoński, EP

Artykuł ukazał się w
Elektronika Praktyczna
styczeń 2019
DO POBRANIA
Pobierz PDF Download icon

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik kwiecień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje marzec 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna kwiecień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich kwiecień 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów