Pokazywanie postów oznaczonych etykietą gsm. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą gsm. Pokaż wszystkie posty

czwartek, 21 kwietnia 2016

Wyślij SMS o treści...

Wyrównujemy szanse

Dodajmy kolejną możliwość do naszej komunikacyjnej piaskownicy. Za pośrednictwem modułu jesteśmy w stanie przekazać wiadomość SMS do Atmegi. Wyrównajmy szanse - niech teraz Atmega będzie w stanie wysłać SMSa do nas.

W tym celu musimy skonfigurować połączenie z modułem GSM jak poprzednio. Uruchomić moduł, odczekać 15 sekund potrzebne na zalogowanie się do sieci i wysłać - niespodzianka - sekwencję komend AT, które sprawią, że przez sieć GSM poleci SMS od Atmegi wprost do telefonu o wskazanym przez nas numerze telefonu - najlepiej, żeby był to nasz telefon - przynajmniej będziemy wiedzieć, że działa, a karta SIM włożona do modułu GSM nie posłuży nam do wysyłania niechcianych wiadomości do losowych ludzi...

Procedura wysyłania SMSa

Ustalamy tryb tekstowy
AT+CMGF=1
Po otrzymaniu informacji
OK
Podajemy numer telefonu odbiorcy
AT+CMGS=000000000 lub AT+CMGS=+48000000000

Następnie oczekujemy na znak zachęty:
>
Zachęceni podajemy treść SMSa:
Daj sie poznac!
Koniec treści SMSa komunikujemy kombinacją Ctrl+Z... czyli za pomocą kombinacji:
\x1A
Możemy jeszcze zaczekać na potwierdzenie nadania wiadomości
+CMGS: ...
Po otrzymaniu tak rozpoczynającego się ciągu znaków, możemy uznać, że SMS został wysłany - nasz trud skończony.

W optymistycznym przypadku...

...nie będziemy musieli się martwić o nieprzewidziane sytuacje. Jednak warto być świadomym, że każda nasza komenda może zostać niezrozumiana przez moduł GSM, o czym w najlepszym przypadku poinformuje nas pięknym komunikatem ERROR, który przyjdzie do nas zamiast oczekiwanej wiadomości pozytywnej. Dlatego komunikując się z modułem GSM za pomocą komend AT warto określać stan aplikacji - będzie o wiele łatwiej zarządzać kodzikiem i decydować, co w danym momencie powinniśmy zrobić - będziemy mieć informację na temat stanu, w jakim się aktualnie znajdujemy i wiadomości, jaka aktualnie przyszła - sporo wiedzy - warto ją spożytkować w należyty sposób - nie zawsze mamy aż tyle informacji o stanie systemu...

Kodzik
Aby wysłać SMS o treści podanej w kodzie programu powinniśmy wprowadzić aplikację w stan "GSM_Init". W celu odebrania SMSa od modułu GSM, wprowadzamy aplikację w stan "SMS_ReadInit". Zmiana stanu aplikacji może nastąpić na przykład pod wpływem odczytu określonej temperatury (jeżeli podepniemy do układu termometr) lub pod wpływem przerwania wywołanego przez zwarcie lub rozwarcie zewnętrznego układu - kiedy dokładnie - zostawiam Tobie!

czwartek, 14 kwietnia 2016

- SMS Przyszedł! - Czego chce?

Połączenie

Uruchomienie modułu to dopiero początek. Teraz musimy się z nim dogadać. Na chwilę obecną Fibocom G510 jest połączony z mikrokontrolerem jedynie linią POWER_ON. Do pełni szczęścia potrzebne nam jest jeszcze połączenie USART - 2 kolejne linie. Zatem standardowo - łączymy linię RxD modułu z linią TxD mikrokontrolera, a linię TxD modułu z linią RxD mikrokontrolera. Jak pamiętamy z posta o USART, potrzebna jest też znajomość parametrów transmisji. Domyślnie port UART1 modułu G510 skonfigurowany jest następująco:
  • 8 data bits
  • 1 stop bit
  • no parity
  • none flow control
  • auto baud rate detect 
Ta ostatnia opcja jest o tyle ciekawa, że to my możemy zdecydować, z jaką prędkością odbywać się będzie nasza komunikacja. Osobiście wybrałem 115200 bps. Radośnie zakładam, że karta SIM jest już na swoim miejscu, a moduł znajduje się tam, gdzie jest zasięg sieci, do której będzie próbował się logować.

Wait a minute...

Połączenie utworzone, czas włączyć moduł i wyciągnąć z niego interesujące nas informacje. Na dzień dobry musimy uzbroić się w ok. 15 sekund cierpliwości - w tym czasie moduł powinien zalogować się do sieci. Sukces tego procesu zostanie oznajmiony poprzez zmianę częstotliwości migania diody podpiętej do linii LPG. To opóźnienie nie jest wymagane w momencie odczytu SMSów obecnych na karcie SIM, aczkolwiek myślę, że warto o nim wspomnieć - choćby po to, by zapamiętać na przyszłość - kiedy to zasięg sieci będzie krokiem wymaganym (choćby po to, by odebrać tego pierwszego SMSa :))

Porozmawiajmy!

G510 komunikuje się z nami za pośrednictwem komend AT. W celu sprawdzenia komunikacji, powinniśmy wysłać do modułu proste "AT" i oczekiwać czegoś w rodzaju "OK" lub "AT OK" - w zależności, czy moduł ma włączone echo, czy nie. Echo może się przydać do kontroli wysyłanych wiadomości - tj. przetwarzając odpowiedź, najpierw sprawdzamy, czy zapytanie, na które odpowiada to to samo, na które oczekujemy. Oprócz tego w ten sposób można sprawdzić poprawność konfiguracji połączenia. Przy pomocy komend AT opisanych w odrębnym dokumencie możemy dowiedzieć się wielu ciekawych rzeczy o stanie modułu. Skupmy się jednak na tych, które pozwolą nam "odebrać SMSa".


Odczyt SMSa z karty SIM

Na początek ustawmy format wiadomości - interesuje nas tekst. zatem:

AT+CMGF=1

oczekujemy odpowiedzi

OK

Następnie wskazujemy, skąd chcemy odczytać SMSa

AT+CPMS="SM"

w odpowiedzi uzyskamy informację zaczynającą się od

+CPMS ...

Teraz właściwe żądanie odczytu SMSa. Do tego celu potrzebujemy id interesującej nas wiadomości. Załóżmy, że przed nadejściem naszego SMSa karta była pusta, zatem chcąc odczytać pierwszą wiadomość:

AT+CMGR=1 lub AT+MMGR=1

Różnica między tymi komendami jest taka, że ta pierwsza zmienia status wiadomości na karcie - tj. ze statusu "REC UNREAD" (otrzymana nieprzeczytana) na status "REC READ" (otrzymana przeczytana). W odpowiedzi otrzymamy strukturę zawierającą informację na temat otrzymanego SMSa (w zależności od parametru ustawionego komendą AT+CSDH) - m. in. numer, z jakiego został wysłany, czas otrzymania i w końcu - treść SMSa.

+CMGR ...

Do nas należy decyzja, co zrobimy z otrzymanymi danymi. Wypadałoby wyłuskać treść SMSa. Co może nieść ze sobą ta treść? Na przykład informację o tym, że powinniśmy włączyć którąś diodę podpiętą do mikrokontrolera albo załączyć przekaźnik, który załączy nam ogrzewanie w domu albo... co tylko sobie wymyślisz :)

Chcąc wykorzystać bardziej informacje zawarte w komendzie zwrotnej +CMGR - powinniśmy pokusić się o utworzenie struktury danych, która przechowa nam to, co dla nas ważne.

Po odczytaniu SMSa możemy go usunąć z karty SIM komendą:

AT+CMGD=1

Która usunie nam wiadomość o identyfikatorze 1 (czyli tą, którą przed chwilą odczytaliśmy). Spodziewamy się odpowiedzi:

OK

Usuwanie SMSów zaraz po ich przetworzeniu odejmuje nam jeden problem - karta SIM nie zapełni się zbyt szybko i nasz układ będzie "responsywny". Od konkretnego problemu zależy, czy będziemy chcieli trzymać SMSy na karcie SIM i jak długo... Jednakowoż uważam, że istnieją lepsze sposoby archiwizacji danych, niż trzymanie ich na karcie SIM.

piątek, 8 kwietnia 2016

GSM Fibocom G510

What's next?

Ograniczenia wynikające z utrzymaniem połączenia z mikrokontrolerem za pośrednictwem modułu Bluetooth zmuszą nas prędzej czy później do rozważenia rozwiązania o większym zasięgu. Skoro producenci telefonów komórkowych potrafią jakoś podpiąć kartę SIM do obecnego w telefonie mikrokontrolera, dlaczego my nie moglibyśmy zrobić tego samego? Bezpośrednie łączenie pól karty SIM z Atmegą nie jest najlepszym pomysłem - zastosujmy do tego interfejs!

GSM

Moduł GSM Fibocom G510 jest takim właśnie interfejsem. Z jednej strony podpinamy go do Atmegi (USART - a jakże!), z drugiej strony - montujemy antenę i wkładamy kartę SIM (przed włożeniem karty do slotu warto wyłączyć blokadę SIM - korzystając z telefonu komórkowego). Po podłączeniu do prądu nasza karta powinna się zalogować w sieci - tym samym umożliwić nam komunikację z naszym układem wszędzie tam, gdzie jest zasięg.


Możliwości są ograniczone tylko naszą wyobraźnią. 

Moduł możemy wykorzystać do nawiązywania połączeń, wysyłania SMSów, korzystania z transmisji danych - nasze Rzeczy mogą uzyskać dostęp do Internetu - a Internet... do nich. Zanim jednak przejdziemy do rozmowy z modułem - zobaczmy, w jaki sposób możemy się z nim porozumieć...

Zasilanie

Sięgnijmy po raz kolejny do datasheetu. I tu niestety porażka (przynajmniej w moim przypadku). Producent podaje przedział napięcia od 3.3V do ok. 4V. Podpowiem - na 3.3 nie ma szans - moduł owszem - uruchomi się, ale nie zaloguje się do sieci. Musimy dostarczyć mu rekomendowane przez producenta 4.0-4.1V, co może skutkować pewną akrobatyką, jeżeli chodzi o sposób, w jaki takie zasilanie dostarczymy do układu. Możemy bawić się w konwertery napięcia - by Atmega zasilana napięciem 3.3V była w stanie "dogadać się" z modułem, ale to tylko zwiększa koszt rozwiązania. Warto pomyśleć nad układem, który pracuje na wspólnym napięciu. W tym celu powinniśmy wykorzystać "konfigurowalny" stabilizator napięcia, albo posłużyć się prawami fizyki i wymusić spadek napięcia przed wejściem do układu.
Warto też zwrócić uwagę, że w celu uruchomienia modułu musimy podać stan niski na wejście POWER_ON. Więc zanim zaczniecie panikować, że układ nie działa, upewnijcie się, że takowy stan występuje. Ma to swoje zalety - możemy wyłączać moduł, by oszczędzać energię.

LPG

LED - najprostszy "Hello World" w elektronicznym świecie.

Sugerowany przez producenta sposób podpięcia diody do sygnału LPG (źródło: dokumentacja)


Moduł posiada wyprowadzenie LPG - warto podpiąć do niego diodę, gdyż jest to pierwsza linia sygnałowa, która podpowie nam, w jakim stanie znajduje się obecnie moduł. Sygnał ten możemy poprowadzić też bezpośrednio do naszego mikrokontrolera, by już na poziomie kodu móc śledzić stan modułu. O czym nam opowie sygnał LPG? Sięgnijmy do noty katalogowej.

Stan modułu sygnalizowany przez diodę podpiętą do sygnału LPG (źródło: dokumentacja)

USART

Na pokładzie modułu znajdują się 3 układy USART. Ciekawostką jest fakt, że jeden z nich można wykorzystać do programowania samego modułu. Producent na egzemplarzach oznaczonych OPEN CPU zaimplementował możliwość wgrania swojego małego programu. Na potrzeby niewielkich projektów - mega feature! Skupmy się jednak na komunikacji... A ta przebiega standardowo - musimy skrzyżować linie RxD i TxD modułu z odpowiadającymi liniami mikrokontrolera.


Język

Jak większość modułów tego typu i w tym przypadku do komunikacji wykorzystamy modemowe komendy tekstowe AT. Lista obsługiwanych komend i przykładowe "procedury" - tj. określona kolejność ich wysyłania, w celu uzyskania konkretnego skutku - znajdziemy w dokumentacji. W kolejnych postach opiszę sposób obsługi SMSów (wysyłanie i odbieranie).


Im łatwiej tym lepiej

Moduł możemy zakupić "nagi" - tj. gotowy do lutowania powierzchniowego - jednak na potrzeby prototypowania i niejako zabawy :) warto dorzucić kilka złotych i zakupić układ z wlutowanymi niezbędnymi do prawidłowego działania elementami (gniazdem antenowym, stabilizatorem napięcia, slotem na kartę SIM) z wyprowadzeniami USART na goldpinach. Jak już przyjdzie "co do czego" - zaprojektujemy własny układ i poprowadzimy wszystkie wymagane sygnały.

W oczekiwaniu na podłączenie do zasialnia...