wersja mobilna
Online: 519 Wtorek, 2017.09.26

Technika

SPWF04SA: miniaturowy moduł Wi-Fi z oferty STMicroelectronics - przykłady zastosowań

środa, 05 lipca 2017 11:35

Firma STMicroelectronics wprowadziła do swojej oferty miniaturowy moduł Wi-Fi o nazwie SPWF04SA, który oprócz funkcji radiowych obsługuje dodatkowe porty oraz interfejsy sprzętowe, takie jak przetworniki ADC, DAC, PWM, UART, SPI. Dzięki swojej budowie i oprogramowaniu moduł może pracować autonomicznie lub poprzez jeden z interfejsów szeregowych może być sterowany przez urządzenie zewnętrzne.

Rys. 1. Budowa oprogramowania zastosowanego w SPWF04SA

Na niewielkiej (26,92×15,24×2,35 mm) płytce drukowanej modułu są zamontowane: część radiowa, kontroler z dodatkowymi układami peryferyjnymi, zintegrowana antena (w wersji SPWF04SC montowane jest gniazdo U.FL do podłączenia zewnętrznej anteny). Moduł przewidziano do montażu powierzchniowego. Dostępne podłączenia wyprowadzone są na krawędziowe pola lutownicze rozłożone wzdłuż 3 boków płytki.

Za funkcjonowanie modułu SPWF-04SA odpowiada zamontowany na płytce mikrokontroler z odpowiednim oprogramowaniem. Firmowe oprogramowanie zarządza wszystkimi funkcjami związanymi z obsługą części radiowej, programowego stosu TCP/IP, obsługą protokołów i interfejsów służących do komunikacji z układami zewnętrznymi. O jego złożoności może świadczyć rysunek 1.

Pokazano na nim kolejne warstwy oprogramowania. Warstwa najniższa Radio & Lower MAC zawiera procedury odpowiedzialne bezpośrednio za sterowanie radiową częścią modułu. Poprzez warstwy pośrednie dochodzimy do procedur związanych z obsługą stosu TCP/IP. Wszystko opakowują procedury służące do wymiany danych ze światem zewnętrznym (interfejsy konsoli UART i SPI) oraz procedury do obsługi skryptów MicroPython, gdy moduł pracuje w trybie autonomicznym.

Na rysunku 2 pokazano blokowy diagram obsługiwanych przez programowy stos TCP/IP protokołów.

Pracą modułu można sterować na kilka różnych sposobów: poprzez port UART tekstowymi rozkazami AT, port SPI, za pomocy skryptów MicroPythona.

Przykłady

Transmisja rozkazów AT portem UART

Rys. 2. Protokoły obsługiwane przez fi rmware modułu SPWF04SA

Ogólna składnia tak wysyłanych rozkazów jest następująca: AT+S.<rozkaz> <parametry><CR>[dane] gdzie: <rozkaz> jest nazwą przesyłanego rozkazu np. AT+S. HELP<cr>, <parametry> opcjonalnie zależnie od typu rozkazu przesyłany jest parametr, np. nazwa rejestru lub wartość liczbowa, <CR> kod końca rozkazu (heksadecymalnie 0×0D), [dane] opcjonalnie zależnie od typu rozkazu przesyłane są dodatkowe dane.

Transmisja rozkazów portem SPI
W tym przypadku moduł pracuje jako slave. Ogólna składnia rozkazów jest następująca: 0×02<rozmiar.przeslania> <kod.roz> <ile_param><rozmiar.1param> <1.param>... <rozmiar. n.param> <n.param> gdzie: 0×02 bajt startu (heksadecymalnie 0×02), <rozmiar. przeslania> 2 bajty określające łączną długość kodu rozkazu, <kod.roz> bajt kodu rozkazu odpowiadający rozkazowi typu AT, <ile_param> bajt liczby parametrów rozkazu, <rozmiar. 1param> bajt określający długość (liczba bajtów) 1. parametru, <1.param> bajty 1. parametru ... itd. dla kolejnych parametrów.

Przykład:
Rozkaz AT: AT+S.SCAN=d,/scan.t×t przesyłany portem SPI 0×02 0×00 0×0D 0×33 0×02 0×01 d 0×09 (/scan.t×t)

Skrypty
W tym trybie pracą modułu sterują polecenia skryptu MicroPythona, który zapisany jest w pamięci Flash kontrolera. Skrypt może być uruchamiany z poziomu rozkazów AT lub automatycznie. Uruchamianie automatyczne po włączeniu zasilania wymaga wskazania położenia skryptu do uruchomienia (ustawianego w zmiennej python_script opisanej w dokumencie en.DM00329655.pdf) i ustawienia wyprowadzenia GPIO(8) w stanie wysokim podczas inicjacji pracy modułu.

Testowanie modułu w trybie AT

Rys. 3. Konfiguracja sprzętu służąca do testowania modułu SPWF04SA

Żeby przetestować sterowanie modułu SPWF04SA rozkazami AT, potrzebna będzie konfiguracja układów pokazana na rysunku 3. Do portu UART modułu należy podłączyć konwerter USB-UART. Do testów wystarczy zasilanie modułu z portu USB. Ponieważ USB dostarcza napięcia 5 V, a moduł pracuje przy zasilaniu +3,3 V, potrzebny będzie stabilizator (na wejściu i wyjściu stabilizatora należy zamontować kondensatory odsprzęgające o wartości 1-10 μF). Do wyprowadzeń SPI modułu warto podłączyć złącze dla karty SD lub microSD. Zestawienie wszystkich niezbędnych połączeń jest pokazane w tabeli 1.

Do testów potrzebny będzie jeszcze uruchamiany na komputerze program typu terminalowego np. Br@y. Jest to prosty terminal tekstowy, który pozwoli na przesyłanie łączem UART modułu rozkazów AT oraz odbieranie z modułu wysyłanych odpowiedzi i komunikatów.

Tabela 1. Konfiguracja połączeń testowych

Pełna lista rozkazów AT dla obecnej wersji oprogramowania modułu zamieszczona jest w dokumencie en.DM00329655.pdf. Lista rozkazów jest częściowo zgodna z wersjami dla wcześniej produkowanego typu modułu SPWD01xx. Jednak ze względu na nowe funkcjonalności różni się w pewnych partiach zarówno co do zawartości, jak i formatu poszczególnych rozkazów.

Poniżej przykłady składni rozkazów AT sterujących wybranymi funkcjami modułu. Rozkazy będą wpisywane ręcznie w edytorze terminala Br@y i przesyłane portem UART do modułu. Tą samą drogą będą odbierane potwierdzenia i komunikaty wysyłane z modułu. Każdy rozkaz musi być zakończony kodem CR (powrót karetki). Ponieważ w terminalu Br@y można ustawić opcję jego automatycznego dodawania na końcu wysyłanych danych, w przykładach ten kod będzie pomijany. Na początek proste funkcje sterowania uniwersalnymi portami GPIO modułu. W przypadku cyfrowych portów GPIO najpierw należy ustawić ich funkcję: pracę jako wyjście lub wejście. Kolejne rozkazy ustawiają wyjście portu GPIO2 na poziomie wysokim bądź niskim.

AT+S.GPIOC=2,out GPIO2 ustawione jako wyjście
AT+S.GPIOW=2,1 GPIO2 poziom wysoki
AT+S.GPIOW=2,0 GPIO2 poziom niski

Przykład odczytu stanu GPIO13 pracującego jako wejście. Po odebraniu rozkazu odczytu moduł przesyła komunikat zawierający informację o stanie portu. Kolejne cyfry oznaczają: numer portu, odczytany stan z jego wejścia 1 lub 0, tryb pracy: 1 - GPIO jest wejściem, 0 - GPIO jest wyjściem.

AT+S.GPIOC=13,in GPIO13 ustawione jako wejście
AT+S.GPIOR=13 odczyt stanu wejścia GPIO13
AT-S.Value:13:1:1 stan wejścia GPIO13: wysoki
AT+S.GPIOR=13
AT-S.Value:13:0:1 stan wejścia GPIO13: niski

W kolejnym przykładzie GPIO13 zaprogramowano jako wejście generujące przerwania. Zależnie od ustawienia, wejście będzie reagowało na określone zbocze sygnału wejściowego: F - opadające, R - narastające, B - na obydwa. Detekcja ustawionego stanu zbocza spowoduje wysłanie portem UART do terminalu informacji o zaistniałym przerwaniu.

AT+S.GPIOC=13,in,F GPIO13 ustawione jako wejście generujące przerwanie opadającym zboczem sygnału
+WIND:52:GPIO wysłany przez moduł
Interrupt:13:0 UART-em komunikat, wygenerowany przerwaniem

W następnym przykładzie jeden z trzech wyposażonych w taką funkcjonalność portów GPIO1 inicjowany jest do pracy jako wejście przetwornika ADC. Po tym rozkazie moduł w odpowiedzi przesyła komunikat z liczbą wyrażającą w miliwoltach zmierzone na wejściu portu napięcie analogowe. Zakres napięć wynosi 0-3300 mV.

AT+S.ADC=1 ustawienie GPIO1 w trybie ADC i inicjacja konwersji
AT-S.Value:2300 przesłanie wyniku konwersji ADC z GPIO1

Przykład pokazujący, jak na porcie GPIO15, mogącym pracować jako wyjście przetwornika DAC, ustawić napięcie analogowe w zakresie 1-3300 mV. Wartość 0 oznacza zakończenie pracy GPIO15 jako wyjścia przetwornika.

AT+S.DAC=500 GPIO15 ustawione jako wyjście
DAC o poziomie napięcia 500 mV

Moduł umożliwia dostęp do systemu plików znajdujących się w pamięci FLASH, pamięci RAM i na karcie SD. Przy czym dodawanie i usuwanie plików jest możliwe tylko dla pamięci RAM i karty SD.

Przykład utworzenia w głównym katalogu na karcie SD pliku o długości 13 znaków tekstu:

AT+S.FSC=0:/Test.t×t,13#013Napis testowy utworzenie na karcie SD pliku Test.t×t zawierającego napis Napis testowy
(#013 – polecenie dla terminalu Br@y wstawienia kodu CR dziesiętnie 13)

Dodanie do istniejącego pliku na karcie SD, 14 znaków tekstu:

AT+S.FSC=0:/Test.t×t,14#013_kolejny napis

Odczyt pliku zapisanego pliku na karcie SD i przesłanie jego zawartości portem UART:

AT+S.FSP=0:/Test.t×t,0, przesłanie portem UART zawartości pliku z przesunięciem względem początku o 0 bajtów, domyślnie całej zawartości pliku

Usunięcie z karty SD pliku:

AT+S.FSD=0:Test.t×t usunięcie pliku z karty SD

SPWF04Sx ma zaimplementowany stos TCP/IP z serwerem Web i REST API (REpresentational State Transfer) pozwalającym na dostęp do plików na serwerze znajdującym się w chmurze obliczeniowej, a także z funkcjami SSI umożliwiającymi na tworzenie stron internetowych o zmiennej treści. Stos obsługuje wszystkie popularne protokoły jak HTTP, MQTT, SMTP i Websocket, wspiera IPv6, TFTP i mDNS. Dostęp do parametrów konfiguracyjnych modułu, a także wymienionych funkcji, odbywa się za pomocą komend AT i użyciu interfejsu SPI. Oprócz tego dla użytkownika dostępny jest interpreter skryptów MicroPhyton (1.6), co pozwala na szybkie stworzenie aplikacji użytkownika korzystającej z zasobów wbudowanego w moduł mikrokontrolera. Moduł zawiera 1 MB pamięci Flash przeznaczonej na aplikacje i pliki użytkownika, ale w razie potrzeby, za pośrednictwem wyprowadzonych linii SPI/SDIO (Serial Flash/SD Card), można znacznie rozbudować zasoby pamięciowe.

Rys. 4. Konfiguracja modułu jako stacji dołączonej do AP

Moduł skonfigurowany jako stacja może pracować w sieci utworzonej przez znajdujący się w zasięgu punkt dostępowy (AP). Taką sytuację pokazano na rysunku 4. Poleceniem AT+S.SCAN można uzyskać listę będących w zasięgu AP. Ustawiamy nazwę (SSID) wybranego punktu dostępu i jeżeli nie jest to AP typu otwartego, także klucz. Po wybraniu trybu pracy modułu jako stacja i włączeniu Wi-Fi moduł powinien zostać podłączony do AP i w trybie DHCP powinien mu zostać nadany numer IP.

AT+S.WIFI=1 włączenie Wi-Fi
AT+S.SCAN=d, przesłanie portem UART listy punktów dostępu w zasięgu
AT+S.WIFI=0 wyłączenie Wi-Fi
AT+S.FCFG przywrócenie ustawień fabrycznych
AT+S.SSIDTXT=nazwa_AP ustawienie SSID punktu dostępu
AT+S.SCFG=wifi_wpa_psk_te×t,123456 ustawienie klucza do punktu dostępu
AT+S.SCFG=wifi_priv_mode,2 network privacy mode
AT+S.SCFG=wifi_auth_type,0 authentication type
AT+S.SCFG=wifi_mode,1 SPWF04SA pracuje jako stacja
AT+S.WIFI=1 włączenie Wi-Fi
AT+S.WCFG zapis konfiguracji do pamięci nieulotnej
AT+S.RESET zerowanie modułu
AT+S.STS odczyt statusu
AT-S.Var:ip_ipaddr=192.168.1.102 przydzielony dynamicznie adres IP

W ustawieniach fabrycznych moduł pracuje jako serwer HTTP z zaprogramowanymi w pamięci Flash przykładowymi stronami. Po wpisaniu w pasku statusu przeglądarki przydzielonego adresu zostanie wyświetlona strona startowa.

Rys. 5. Konfiguracja modułu jako AP

Moduł SPWF04SA może też pracować jako samodzielny punkt dostępu, do którego będą się podłączać inne urządzenia Wi-Fi pracujące jako stacje. Taką sytuację pokazano schematycznie na rysunku 5.

W tym trybie nadaje się modułowi nazwę (SSID), pod jaką będzie widoczny dla innych urządzeń w sieci Wi-Fi. Jeżeli moduł jako AP nie ma pracować w trybie otwartym, należy określić parametry klucza dostępu, który każda stacja będzie musiała podać, zanim uzyska status podłączonej. Należy także określić adres IP, pod jakim AP będzie dostępny w sieci. Jeżeli włączony będzie tryb DHCP, każdej podłączanej do modułu stacji będzie nadawany numer IP. Na koniec należy zapisać ustawienia do pamięci nieulotnej tak, aby każdorazowo po włączeniu zasilania modułu były odtwarzane.

AT+S.WIFI=0 wyłączenie Wi-Fi
AT+S.FCFG przywrócenie ustawień fabrycznych
AT+S.SSIDTXT=modul_AP nadanie nazwy modułowi pracującemu jako AP
AT+S.SCFG=wifi_priv_mode,1 dostęp do AP w trybie WEP po podaniu klucza
AT+S.SCFG=wifi_mode,3 tryb MiniAP
AT+S.SCFG=wifi_wep_keys[0],76543210ab klucz dostępu do AP np. "76543210ab"
AT+S.SCFG=wifi_wep_key_lens,05 rozmiar klucza w bajtach
AT+S.SCFG=wifi_auth_type,0
AT+S.SCFG=ip_ipaddr,192.168.0.50 adres IP, pod jakim AP będzie dostępny
AT+S.SCFG=ip_use_dhcpc,2 tryb DHCP, automatyczne przydzielanie numerów kolejnym podłączanym do AP stacjom
AT+S.WIFI=1 włączenie Wi-Fi
AT+S.WCFG zapis konfiguracji do pamięci nieulotnej
AT+S.RESET zerowanie modułu

W ustawieniach fabrycznych moduł pracuje jako serwer HTTP z zaprogramowanymi w pamięci Flash przykładowymi stronami. Po podłączeniu do modułu poprzez sieć Wi-Fi np. telefonu otwieramy jego przeglądarkę internetową i w pasku wyszukiwania wpisujemy ustawiony adres IP (w przykładzie 192.168.0.50). Powinna wyświetlić się strona testowa.

Ryszard Szymaniak