W tym artykule zostanie omówiony moduł GSM SPRS SIMM900. Moduł ten docelowo ustawiony jest na komunikacje na terenach Azji, dlatego przedstawię jak możemy zmienić jego firmware tak, aby działał on na standardzie europejskim. Na koniec przedstawię przykład użycia tego modułu dzięki któremu będziemy mogli wysyłać SMS używając naszej karty SIM.
Spis treści
- Krótki opis
- Specyfikacja
- Zamiana firmware -u
- Przykład
- Pliki do pobrania
Krótki opis
Moduł pracuje na częstotliwościach 900 i 1800MHz. Została w nim wykorzystana technologia GPRS/GSM która pozwala na wykonywanie połączeń oraz wysyłanie SMS -ów. Przy użyciu interfejsów modułu developerzy stworzyli wiele aplikacji pozwalających na bardziej rozbudowany sposób komunikacji dzięki technologii GPRS/GSM.
Specyfikacja
- Chip: SIM900A (wersja A obsługuje wyłącznie sieci Azjatyckie, w celu dostosowania do europejskich sieci telekomunikacyjnych konieczna jest zmiana firmware układu. )
- Częstotliwości sieci GSM: 850/900/1800/1900 MHz
- Napięcie zasilania: 4V – 5.2V
- Interfejs: UART TTL
- Interfejs: RS232
- Komunikacja za pomocą komend AT
- Standardowe złącze karty SIM
- Diody LED sygnalizujące pracę modułu
- W zestawie antena 2dBi
- Wymiary: 50mm x 48mm
Zmiana firmware
Potrzebne do wykonania:
Hardware:
- Moduł GSM GPRS SIM900A mini V3.8.2 z anteną
- 4x kable stykowe (żeń)
- Konwerter USB – RS232/TTL/UART – wyjście 3,3V/5V – CP2102
Software:
- Simcom – sim900 Customer flash loader
- AiThinker Serial Tool (można również wykorzystać Arduino IDE, ale osobiście polecam tą aplikacje z uwagi na efektywność i wygodę korzystania)
(Programy do pobrania poniżej w artykule)
Połączenie
Łączymy konwerter do modułu następująco :
- GND -> GND
- 5V -> VCC
- RXD -> TX
- TXD -> RX
Komunikacja z modułem
Otwieramy AiThinker.
Najpierw musimy sprawdzić czy mamy na pewno dobrze ustawiony port. Możemy sprawdzić z jakiego portu korzysta nasze urządzenie dzięki Menedżerowi urządzeń
Po upewnieniu się że poprawnie ustawiliśmy port i boundrate, rozpoczynamy komunikację. Do komunikowania się z modułem służą komendy AT, w Arduino Ide używamy je wykorzystując monitor portu szeregowego jako terminal. Wystarczy otworzyć pusty szkic a następnie monitor portu i wpisać “AT” w pole odpowiadające za wysyłanie treści do płytki. Po tym moduł powinien nam odpowiedzieć “OK” co oznacza że nie ma żadnych problemów w komunikacji z urządzeniem. W AiThinker robimy to samo, tyle że nie musimy zapamiętywać komend, a wystarczy że w panelu po prawej stronie wciśniemy odpowiednio ponumerowany przycisk który sam wprowadzi nam komendę. (Jeżeli komunikat “OK” nie wyświetlił się, upewnij się że wszystkie przewody są dobrze podpięte)
Skoro wiemy że nasze połączenie działa bez zarzutów sprawdźmy jaka wersja jest zainstalowana na naszym module. Do tego użyjemy komend “AT + GMM” i “AT + CGMR”
Teraz kiedy wiemy już jaką wersję mamy musimy zamienić ją na adekwatną do niej wersję europejską która w nazwie zamiast litery “A” posiada literę “M”(Jeżeli na module znajduje się 32 bitowa wersja bez problemu możemy ją zastąpić 64 bitową). (Link do strony z wersjami znajduje się na dole w artykule).
Pobranie nowej wersji Firmware
Otwieramy Simcom i tak jak poprzednio sprawdzamy czy mamy ustawiony dobry port. Jako prędkość wybieramy “115200”.
Następnie musimy ustawić jaki plik chcemy pobrać na moduł. Teraz z folderu z wersją firmware wybieramy plik z końcówką “.cla”. Program sam powinien nam pokazać tylko ten plik który potrzebuje.
Po wybraniu pliku naciskamy start(po pojawieniu się komunikatu “Please power up the target” odłącz i podłącz ponownie kable od VCC ) i czekamy aż nowa wersja, nadpisze starą. Po załadowaniu się całego paska możemy sprawdzić że wersja na module rzeczywiście uległa zmianie wpisując ponownie “AT + GMM” w AiThinker.
Przykład
Elementy:
- 4x Kable stykowe
- Moduł GSM GPRS SIM900A mini V3.8.2 z anteną
- Arduino Uno lub Mega
- Telefon Komórkowy
- Oddzielna karta SIM
Połączenie:
- Arduino -> Moduł
- GND -> GND
- 5V -> VCC
- 10(Mega)/ 2(Uno) -> TXD
- 11(Mega)/3(Uno)-> RXD
Na początku musimy zaimplementować bibliotekę Software Serial dzięki której będziemy mogli wykonać połączenie. Tworzymy obiekt tej klasy/biblioteki i definiujemy które piny będą odpowiadały na płytce jako RX i TX. W Arduino Uno zamiast (10,11) ustawiamy (2,3).
#include <SoftwareSerial.h> SoftwareSerial SIM900A(10,11);
Kolejno zajmijmy się funkcją void setup(). Rozpoczynamy w niej komunikacje na porcie szeregowym i utworzonym przez nas porcie SIM900A. Następnie wysyłamy komunikat informujący że układ jest gotowy do działania. Potem wyświetli nam się informacja o tym abyśmy podjęli wybór co chcemy zrobić, gdyż nasz program jest wyposażony w 2 funkcje: odbierania i wysyłania. Po wpisaniu “s” w oknie terminala szeregowego będziemy mogli wysłać wiadomość, a po wpisaniu “r” odebrać ją.
void setup() { SIM900A.begin(9600); // GSM Module Baud rate - communication speed Serial.begin(9600); // Baud rate of Serial Monitor in the IDE app Serial.println ("Text Messege Module Ready & Verified"); delay(100); Serial.println ("Type s to send message or r to receive message"); }
Teraz funkcja void loop() w której zadziała logika podjętego przez nas wcześniej wyboru. Po wpisaniu odpowiedniej litery zostanie wykonana adekwatna funkcja. Następnie tworzymy if-a którego zadaniem jest wyświetlenie na monitorze portu szeregowego wszytskich danych przechodzących przez port SIM900a.
void loop() { if (Serial.available()>0) switch(Serial.read()) { case 's': SendMessage(); break; case 'r': RecieveMessage(); break; } if (SIM900A.available()>0) Serial.write(SIM900A.read()); }
Pierwsza z dwóch ostatnich funkcji SendMessage pozwala na wysłanie wiadomości przy użyciu komend AT. Na początku ustawiony zostaje typ przesyłanych danych na tekst. Potem ustawiony zostaje numer docelowy. A na koniec treść wiadomości. Po tym pojawia się jeszcze komunikat (char)26 który znaczy to samo co “CTR+Z”.
Serial.println ("Sending Message please wait...."); SIM900A.println("AT+CMGF=1"); //Text Mode initialisation delay(1000); Serial.println ("Set SMS Number"); SIM900A.println("AT+CMGS=\"+48numertelefonu\"\r"); // Receiver's Mobile Number delay(1000); Serial.println ("Set SMS Content"); SIM900A.println("Wiadomosc zostala wyslana przez arduino ");// Messsage content delay(100); Serial.println ("Done"); SIM900A.println((char)26);// delay(1000); Serial.println ("Message sent succesfully");
W Funkcji ReviceMessages mająca zadnie odbierać wiadomości dzięki komendom AT ustawiamy tylko port na tryb odbioru.
void RecieveMessage() { Serial.println ("Receiving Messeges"); delay (1000); SIM900A.println("AT+CNMI=2,2,0,0,0"); // Eeceiving Mode Enabled delay(1000); Serial.write ("Messege Received Sucessfully"); }
Pliki do pobrania:
Link do Firmwarów- http://drive.google.com/drive/folders/1G8FgBx3XeAaJpn5ZKPW4UjIX6Ks_iRdj