Arduino SMS i nie tylko
Moduł GSM do Arduino pozwala na przekształcenie Arduino w telefon komórkowy :) No – mniej więcej.
Ale od początku. Najpierw potrzebujemy moduł GSM do Arduino oraz aktywną kartę SIM. Kartę wsadzamy do modułu i możemy przystąpić do testów. Pierwsza sprawa zasilanie. Moduł GSM jest dość wymagający jeśli chodzi o zasilanie. Nie każdy port USB będzie w stanie zasilić Arduino z modułem GSM. Objaw będzie taki, że po wklepaniu PINu komunikacja znika, to trzeba zorganizować dodatkowe zasilanie. Jak – o tym później.
Testujemy moduł
Moduł może pracować w dwóch trybach komunikacji szeregowej. Albo „rozmawia” z Arduino albo z komputerem dopiętym do port USB Arduino. Ten pierwszy tryb to jest normalny tryb produkcyjny drugi może zostać wykorzystany do testów. Aby skorzystać z tego drugiego trybu:
- wyjmujemy ATMega z Arduino (Arduino będzie służyło tylko jako zasilanie oraz skorzystamy z konwertera USB/Serial)
- ustawiamy na module zworki trybu pracy na USB gateway
- wsadzamy kartę SIM
- podpinamy Arduino do komputera
- przytrzymujemy przycisk ON/OFF na module przez dwie sekundy
- uruchamiamy program terminala (gtkterm) wybieramy port szeregowy i ustawiamy 115200 8,N,1 tryb końca linii CR (nie CR+LF) i używając DUŻYCH liter piszemy komendy AT
- AT – oczekiwana odpowiedź OK – to jest znak że jest komunikacja z modemem
- AT+CPIN=”ABCD” – gdzie ABCD jest PINem wsadzonej karty SIM – powinniśmy dostać odpowiedź OK jeżeli PIN jest dobry, +CME ERROR 16 jeśli zły
- moduł zaczyna szukać sieci GSM – jeżeli w ciągu kilku następnych sekund nadal będzie odpowiadać OK na komendę AT, znaczy że port USB dał radę zasilić układ. Jeżeli komunikacja zamrze – trzeba szykować dodatkowe zasilanie
- jeżeli wszystko działa możemy popróbować kilku komend:
- AT+COPS? – zwraca nazwę operatora sieci komórkowej
- AT+CPBR=# zwraca wpis z książki adresowej na karcie gdzie # to numer z książki adresowej
- AT*PSCPOF – wyłącz moduł
- ATD##########; – zadzown pod numer kryjacy sie za ciągiem # (oczywiście na razie rozmawiać się nie da)
- ATH – rozłącz rozmowę
- wysyłanie SMS – wykonaj następujące kroki:
- AT+CSCA? – ściągnij numer centrum SMS
- AT+CMGF=1 – tryb wysyłania SMSów – 1 to tekstowy
- AT+CMGS=”#######” – numer na jaki chcemy wysłać SMS
- po AT+CMGS zaczynamy wpisywac tresc wiadomosci w jednej lini i konczymy znakiem o kodzie 1A szesnastkowo
- czekamy na SMS’a ;)
Pełna lista komend AT dla modemu Sagem HiLO.
Moduł GSM ma wyjście do mikrofonu i głośnika, więc po podłączeniu tychże Arduino może działać jako telefon komórkowy :)
Zasilanie
Na module jest zworka określająca źródło zasilania. Ustawiona w pozycji oznaczonej 5V wybiera Arduino (a więc port USB) jako źródło zasilania dla modułu GSM. Wybrani ext pozwoli nam zasilić sam moduł z oddzielnego zasialacza. Producent sugeruje, że całość (Arduino + moduł GSM) powinny być zasilane 12 V, 2A. Dla zasilaczy o wydajności mniejszej niż 2A należy dodać kondensator 220 μF. W moich testach udało mi się bez problemu uruchomić całość zasilając Arduino przez USB a moduł GSM z zasilacza 12V/0.5 A z kondensatorem 200 μF oraz konwerterem napięcia na 5V (L7805).
Sterowanie z Arduino
Moduł GSM gdy zworka komunikacji szeregowej jest ustawiona na Arduino podłącza się do portu szeregowego Arduino i wysyłając z Arduino komendy na port szeregowy (przez Serial.println
) sterujemy modułem GSM. Przykładowy kod:
int led = 13; int onModulePin = 2; // the pin to switch on the module (without press on button) int timesToSend = 1; // Numbers of SMS to send int count = 0; void switchModule(){ digitalWrite(onModulePin,HIGH); delay(2000); digitalWrite(onModulePin,LOW); } void setup(){ pinMode(led, OUTPUT); pinMode(onModulePin, OUTPUT); Serial.begin(115200); // the GPRS baud rate switchModule(); // swith the module ON for (int i=0;i<5;i++){ delay(5000); } Serial.println("AT+CMGF=1"); // set the SMS mode to text } void loop(){ while (count < timesToSend){ delay(1500); Serial.print("AT+CMGS="); // send the SMS the number Serial.print(34,BYTE); // send the " char Serial.print("*********"); // send the number change ********* by the actual number Serial.println(34,BYTE); // send the " char delay(1500); Serial.print("Arduino SMS..."); // the SMS body delay(500); Serial.println(0x1A,BYTE); // end of message command 1A (hex) delay(5000); count++; } if (count == timesToSend){ Serial.println("AT*PSCPOF"); // switch the module off count++; } }
Na koniec – moduł GSM ma dość nietypowy kształt, prawda? Otóż doskonale on współgra z innym shieldem – GPSowym :)
Ale o tym już następnym razem.
Cena trochę odstraszająca jak dla studenta. Ja bym próbował podłączyć raczej jakiś stary telefon z szafki i próbował bym za pomocą komend AT go sterować. Cieszy mnie jednak, że coraz więcej modułów do Arduino pojawia się w ofercie ;)
Zdaję sobie sprawę, że to nie jest tani moduł. Ale pojawił się jako odpowiedź na konkretne zapytania klientów, więc opis się należy :)
A kolejne moduły będą się pojawiać w ofercie, zobaczymy na co będzie rzeczywiste zapotrzebowanie.
witam
podłączylem modul gsm do arduino, zasililem 12v 5A zasilacze, ale w hyperterminalu nie pokazuje mi zadnych oznak komunikacji z HILO…czy podczas komunikacji urządzeń ze soba pracowała dioda na HILO ?? i czy jakies pomysły czemu nie chce ruszyc moduł ;/ ??
Pozdrawiam
problem rozwiązany w hyperterminalu nie wolno uzywac casplocka!!! tylko shift powieksza litery ;)
Czytnik kodow kreskowych by sie przydal. Mozna by zrobic porzadek w domowych gratach.
A jak by jeszcze dalo sie podlaczyc jakis procesor kryptograficzny to bylo by miodzio
http://www.ebay.com/itm/Arduino-GPRS-GSM-SIM300-Module-Development-Board-Ver2-/270804700519?pt=LH_DefaultDomain_0&hash=item3f0d37cd67
52$ vs 400pln w nettigo – dlaczego tak?
Bo to inny moduł: http://www.cooking-hacks.com/index.php/arduino-gprs-module.html + http://www.cooking-hacks.com/index.php/arduino-gprs-module.html (ceny tam są netto). Dodać nasz VAT i kurs EUR 4.5 przy składaniu zamówienia i się tyle robi. Czy różnica technologiczna jest na tyle istotna czy tylko fakt że to robione w większości w UE? Nie wiem…
Co do innych modułów – miewałem problemy z chińskimi podzespołami, więc elektronikę staram się brać tylko i wyłącznie u sprawdzonych dostawców. Może w przyszłości pojawi się inny shield, tańszy (od SeeedStudio) ale to już chyba nie w tym roku.
Witam. Mam problem związany z opisywanym shieldem.
W moim Arduino Mega Atmega jest przymocowana na stałe-jest przylutowana.Nie jestem w stanie jej wyjąć.
Nie posiadam więc możliwości sprawdzenia czy istnieje komunikacja( komenda AT) przy jumperach przestawionych na USB
W przypadku sterowania z Arduino program (po kosmetycznych zmianach-Serial.print(34,BYTE)).Program kompiluję się poprawnie, przy wgrywaniu mam natomiast error
„avrdude: stk500v2_ReceiveMessage(): timeout”
Jumpery przestawione są na Arduino.
Zasilam zewnętrznie przez zasilacz 9V.
Spróbuj zdjąć shielda, wgrać program, założyć shielda ponownie.
Trochę się zmieniło w temacie.
1. Załatwiłem sobie arduino uno z wyjmowaną atmega.
2. Przetestowałem w programie terminal, wysyłanie sms i dzwonienie działa bez zarzutu
3.Małe Uwagi. Może komuś to się przyda. Jest super, jeżeli można rozebrać starego sagema i wyjąć sobie antenę gsm. CSQ skaczę momentalnie:)
Jeżeli chodzi o karty sim to próbowałem na PLAY, NIE DZIAŁAŁO.Potem spróbowałem na innych. ORANGE i PLUS BEZ PROBLEMÓW.
4. NADAL MAM PROBLEM Z OKIEŁZNANIEM ARDUINO.
Tak jak podpowiedziałeś:) jeżeli wyjmie się moduł wgrywa się wszystko bez problemu.
Testuje program do dzwonienia(mniej możliwości popełnienia błędu, mniej komend)- nie chce dzwonić.
Przeniosłem nawet „setup” do „loop” z warunkiem
if count==0
if count==1
W żaden sposób arduino nie dzwoni.
Jeżeli chodzi o składnie komend( np czy używać +48 w nr telefonu) to wszystko jest raczej jasne i przetestowane z poziomu terminala.
Aleksander: Uno: Może zapomniałeś wstawić jakiś delay, żeby płytka modemu zdążyła się zainicjować.
Due: Do przechowywania tekstu używaj F(), bo może się nie mieści w RAM.
np.:
Serial.print(F(„AT+CMGF=1”));
Jeżeli chodzi o delay to miałem 20s na samym początku, dodatkowo miedzy każda operacja 100ms. Początkową zmieniłem na 30s.
Dodałem też F(). Nie wiele to pomogło…
Wróciłem ostatnio do tematu. Moduł działa, prawdę powiedziawszy nie wiem co było przyczyną.
Jeżeli chodzi o dokumentację podaną na stronie nettigo.pl jest ona nieodpowiednia.
Link do dokumentacji http://www.macrogroup.ru/content/data/store/images/f_931_5541_1.pdf. Zmiany widoczne są w np. AT+KTCPCLOSE