Przykład obsługi modemu GSM Quectel M10 w systemie z mikrokontrolerem STM32

Przykład obsługi modemu GPS w systemie z mikrokontrolerem STM32

W przykładowej aplikacji pokażemy jak wysłać wiadomość SMS korzystając z modemu Quectel M10 (w prezentowanym przykładzie w module EB-M10 z oferty firmy Soyter) sterowanego przez mikrokontroler STM32. W przykładzie wykorzystano zestaw uruchomieniowy STM32Butterfly2 oraz moduł EB-M10, połączenia pokazane są na rysunku 1. Należy pamiętać, aby zasilacz systemu dysponował odpowienią wydajnością (moduł M10 potrzebuje do 2 A).

 

Rys. 1. Sposób połączenia modułu EB-M10 i zestawu startowego STM32Butterfly2

Rys. 1. Sposób połączenia modułu EB-M10 i zestawu startowego STM32Butterfly2

 

 

Komunikacja z modemem

Do komunikacji z modemem wystarczy jeden interfejs UART oraz jedna linia GPIO służąca do włączania modemu. Po dołączeniu zasilania do modemu należy odczekać 2 sekundy, następnie można uruchomić modem podając stan wysoki na linię PWRKEY. Od tej pory możemy komunikować się z modemem przez UART. Modem nie wymaga użycia konkretnej prędkości interfejsu UART, ponieważ automatycznie ją rozpozna (zakres prędkości to 4800…115 200 bps), należy tylko wysłać trzykrotnie sekwecję AT\x0D. W przykładowym zestawie uruchomieniowym procesor STM32 taktowany jest kwarcem o częstotliwości 14,7456 MHz, a szyna APB1 zegarem o częstotliwości 58,9824 MHz, stąd funkcja konfigurująca USART2 wygląda następująco:

Wysyłając rozkaz do modemu musimy zakończyć go znakiem CR (0x0D), odpowiedź modemu będzie rozpoczęta i zakończona sekwencją CRLF (0x0D, 0x0A), przykładowo:

wysyłamy: ATE0<CR>

odbieramy: <CR><LF>OK<CR><LF>

Jeśli karta SIM wymaga podania kodu PIN wysyłamy go rozkazem AT+CPIN=xxxx, gdzie w miejsce znaków ‘xxxx’ wprowadzamy numer PIN. W przykładzie użyto startera SIM, który nie wymaga kodu PIN. Funkcja inicjalizująca modem:

Teraz możemy przystąpić do wysłania wiadomości. Przykładowy program czeka w nieskończonej pętli na naciśnięcie joysticka, po naciśnięciu wysyłana jest wiadomość SMS (w przykładzie użyto numeru +48123123123, oczywiście przy uruchamianiu przykładu należy wstawić tam właściwy numer odbiorcy).

Funkcja wysysłająca wiadomość:

W tej funkcji wysyłamy najpierw polecenie AT+CMGF=1, które określa format wysyłanej wiadomości jako tekstowy, następnie wysyłamy polecenie AT+CMGS=”+48xxxxxxxxx”\0x0D po którym wysyłamy treść wiadomości, na koniec wysyłamy znak Ctrl+Z, czyli 0x1A (26 dziesiętnie). Po chwili wiadomość powinna dotrzeć do odbiorcy.

W powyższym przykładzie założono optymistyczny wariant, czyli mamy zasięg, komunikacja przebiega bez problemów itd. W rzeczywistych aplikacjach koniecznie należy uwzględnić wszelkie możliwe problemy, czyli m.in. trzeba sprawdzać odpowiedzi modemu i reagować na ewentualne błędy!

Do pobrania

O autorze