2015-08-31

SIM900A GSM modemo valdymas

Šįkart į rankas pateko elektroninis žaisliukas iš telefonijos srities - SIM900A GSM modemas DIY modulio pavidalu. Įdomus daikčiukas su daugybe panaudojimo paskirčių jau nekalbant apie SMS'ų siuntimą ir skambinimo funkciją. Tiesiogine to žodžio prasme, turime paprastą telefono sistemą. Tokie moduliukai gana populiarūs, o jų valdymas irgi paprastas, tačiau kaip visada yra vienas kabliukas, kurį būtina apeiti norint sėkmingai naudotis. Kas čia per įrenginys ir ką su juo veikti - daugiau informacijos toliau.









I. Intro

SIM900A - mini GSM modulis, skirtas mobiliojo ryšio komunikacijoms. Tai vienas iš gana plačios aibės modulių, kuriuos gamina Simcom kompanija. Nedideli, pigūs ir daug energijos nereikalaujantys (1.5mA miego režimu) DIY (angl. do it yourself) gaminiai. Serijoje rasime ir naujesnį SIM800 modelį ir 900-osios serijos prietaisus. Populiarūs jie dėl to, jog lengva jais naudotis. Jeigu mokate dirbti su UART, tai didelių problemų neturėtų iškilti, kadangi modulis valdomas AT komandomis (jeigu dirbote su GPS, tai bus paprasta). Moduliukas pasižymi dar daugeliu kitų savybių, palaikomi dažniai - "dualband" (900/1800MHz) ir "quadband" (850/900/1800/1900MHz), turi TCP steko realizaciją ir visas įprastas SIM kortelės ir kt. valdymo funkcijas. Europoje pilnai pakanka ir dualband. Pasirinkimas įvairių jau pagamintų modulių ypač didelis, kad ir iš ebay - tereikia suvesti pavadinimą ir rasime tiek pačių moduliukų, tiek ir didelių gabaritų praplėtimo (angl. breakout) plokščių. Kuo didesnė plokštė, tuo daugiau funkcionalumo ir modulio išvadų bus prieinama.

II. Prijungimas

Mano turimame variante, kurį nusipirkau pažaidimui, nėra daug išvadų, tačiau patingėta aiškiai parašyti, ką ir kur jungti. Turime VCC5, GND, VCC4, MCU, SIMR, SIMT, GND ir RST naudojimui. Lentelė kitoje plokštės pusėje turėtų būti labai aiški, tačiau deja nėra, VCC išvadų nė kvapo - gal į abu paduoti maitinimą, o gal tik į vieną? Be ilgų testų pateikiu teisingus atsakymus - su GND viskas aišku, VCC5 - 5V maitinimas, MCU - SIM900a maitinimas (5V), SIMR - (sim receive) RXD išvadas, o SIMT (sim transmit) TXD išvadas. Prie įprastinio mikrovaldiklio ar USB-2-TTL adapterio jungiame per UART išvadus. Vėl gi, RX/TX būtina jungti sukryžiuotai.

Žemiau taip pat pateikta schema, kai modulis jungiamas per 3.3-4.2V (baterijų) maitinimą.


Reikia nepamiršti, kad bandymams reikia nusipirkti ir SIM kortelę, tinka bet kuris mobilaus ryšio operatorius. Jeigu kortelė vietoje ir lemputės žybsi, reiškia jau galima mėginti siųsti komandas.


III. Naudojimas

Kaip minėjau anksčiau SIM900A atpažįsta AT tipo komandas - visą jų specifikaciją galite rasti čia. Modulis automatiškai prisitaiko prie duomenų siuntimo greičio (baud), tad jį galime pasirinkti laisvai - 9600 ar net 115200bps ir pan. Kaip dažnai pasitaiko siunčiama po 8 bitus ir be lygiškumo (parity) bito. Pakeitus greitį ar norint išimti/įdėti SIM kortelę būtina išjungti ir vėl įjungti įrenginuką (kaip įprasta mobiliajame telefone). Pasileidus RealTerm ar kitą emuliatorių ir pasirinkus atitinkamą adapterio COM port'ą galime išbandyti, ar modulis dirba. Įprasta pradžioje siųsti vieną komandą: AT, atsakydamas modulis turėtų ją pakartoti arba pasakyti OK. Jeigu tai veikia, galima toliau vykdyti kitas komandas. Dažniausiai naudojamų komandų sąrašą pateikiau pabaigoje.

IV. Atrakinimas (pin network unlock)

SIM900A modulis yra pigesnis SIM900 variantas, su tam tikru "kabliuku". Tarkime įdedame kortelę, komandomis pasiekiame PIN atrakinimą (kaip įprastame telefone) ir gauname - šnipštą. Modulis prašo "network unlock" kodo, t.y. modulis "pririštas" ir jį galime naudoti tik su kinų ar kitais leidžiamais operatoriais. Komandų seka žemiau:

// Check PIN status (SIM PIN - enter SIM pin)

Komanda:
AT+CPIN?

Atsakymas:
+CPIN: SIM PIN

// Enter SIM PIN

Komanda:
AT+CPIN=6303

Atsakymas:
OK

// Check PIN status? What network PIN?
Komanda:
AT+CPIN?

Atsakymas:
+CPIN: PH-NET PIN

Praktiškai galime mesti į šiukšlinę. Galėtume, bet neverta - sprendimai kaip apeiti šį apribojimą jau surasti ir ne kartą. Kiek pašniukštinėjęs internete radau, kad perrašius modulio firmware į SIM900 firmware gauname pilnai veikiantį ir atrakintą modulį. Verta išbandyti - kito kelio nelabai yra. Įvairius firmware galime rasti šiame puslapyje. Parsisiunčiame nurodytą "Simcom customer flash loader" įrankį bei patį firmware - pasirinkau 1137B01SIM900M64_ST_ENHANCE versiją.



Firmware perrašomas per tą patį UART, tad nieko papildomai jungti nereikia, tik prieš perrašant reikia restartuoti moduliuką (įjungti ir vėl išjungti maitinimą). Pastaba: firmware perrašymas yra pavojinga operacija, kuriai nepavykus modulis gali neteisingai veikti arba nustoti veikti! Paleidžiame programą, pasirenkame failą 1137B01SIM900M64_ST_ENHANCE.cla failą, nustatome COM portą, spaudžiame START bei perkrauname moduliuką. Tada laukiame apie 4 minutes, galime išgerti kavos. Per-restartuojame modulį vėl po sėkmingo perrašymo - ir viskas, galime naudotis atrištu moduliu. Patikriname kaip parodyta komandomis žemiau:

// After firmware re-flashing

AT+CPIN?

+CPIN: READY

OK

V. SIM komandų programa

Internete taip pat radau neblogą programą SIM komandoms išbandyti - belieka tik prijungti modulį ir spaudyti mygtukus, o visos komandos matomos ekrane. Visa bėda, kad programa veikia tik naršyklėje arba po naujos Java 8 versijos įdiegimo ir saugumo suvaržymų, iš viso nebeveikia, nes ji nepasirašyta - kitaip sakant nebepanaudojama iš viso. Laimei pavyko ištraukti jos kodą, pertvarkyti programą, kad veiktų kompiuteryje kaip įprasta programa. Visą kodą viešai prieinamą padėjau GitHub'e - galbūt rasite naudingą.


Kiti straipsnyje paminėti failai - čia.

VI. Komandų sąrašas

Na ir pabaigai išbandytų komandų sąrašas, kurių galbūt prireiks darbui su šiuo moduliu.

// Check if working

Komanda:
AT

Atsakymas:
OK

// Display version

Komanda:
AT+GMR

Atsakymas:
Revision:1137B03SIM900A64_ST_ENHANCE

OK

// Display product identification

Komanda:
ATI

Atsakymas:
SIM900A R11.0

OK

// Request manufacturer info

Komanda:
AT+GMI

Atsakymas:
SIMCOM_Ltd

OK

// Request model identification

Komanda:
AT+GMM

Atsakymas:
SIMCOM_SIM900A

OK

// Request IMEI

Komanda:
AT+GSN

Atsakymas:
866762026156545

OK

// Request IMSI

Komanda:
AT+CIMI

Atsakymas:
246019402436960

OK

// Get baud rate (0 - auto baud)

Komanda:
AT+IPR?

Atsakymas:
+IPR: 0

OK

// Set command echo mode (0 - disable, 1 - enable)

Komanda:
ATE0

Atsakymas:
OK

// List operators

Komanda:
AT+COPS?

Atsakymas:
+COPS: 0,0,"OMNITEL LT"

OK

// Phone activity status (0 - ready, 2 - unknown, 3 - ringing, 4 - call in progress)

Komanda:
AT+CPAS

Atsakymas:
+CPAS: 2

OK

// Set functionality (0 - minimum, 1 - default, 4 - disable transmit & RF circuits)

Komanda:
AT+CFUN=1

// Check PIN status (SIM PIN - enter SIM pin, PH-NET PIN - network lock pin)

Komanda:
AT+CPIN?

Atsakymas:
+CPIN: SIM PIN

// Enter SIM PIN

Komanda:
AT+CPIN=6303

Atsakymas:
OK

// Check network registration (n, stat)
// stat: 0 - not registered, 1 - registered home network, 2 - searching, 3 - registration denied, 4 - unknown, 5 - roaming

Komanda:
AT+CREG?

Atsakymas:
+CREG: 0,1

OK

// Check signal quality (rssi, ber - bit error rate)

Komanda:
AT+CSQ

Atsakymas:
+CSQ: 28,0

OK

// Check battery status (bcs, bcl, voltage)
//    bcs: 0 - not charging, 1 - charging, 2 - charging finished
//    bcl - battery capacity percent 1-100
//    voltage - in mV

Komanda:
AT+CBC

Atsakymas:
+CBC: 0,100,4313

OK

// List current calls (0 - no active calls)

Komanda:
AT+CLCC?

Atsakymas:
+CLCC: 0

OK

// Call number 867733427

Komanda:
ATD867733427;

Atsakymas:
OK

// Hangup call

Komanda:
ATH

Atsakymas:
OK

// Call number 0037067733427

Komanda:
ATD0037068833427;

Atsakymas:
OK

// Answer call

Komanda:
ATA

Atsakymas:
OK

// Hangup call

Komanda:
ATH

Atsakymas:
OK

// Call number 0037067733427 that is BUSY

Komanda:
ATD0037067733427;

Atsakymas:
OK

BUSY

// Enable CLIP for Incomming call (calling line identification presentation)

Komanda:
AT+CLIP=1

Atsakymas:
OK

// Incomming call with CLIP enabled > answer and then hangup

RING

+CLIP:+9916258273

ATA

ATH

// Read SMS Center Address

Komanda:
AT+CSCA?

Atsakymas:
+CSCA: "+37069899992",145

OK

// Select Character Set

Komanda:
AT+CSCS="GSM"

Atsakymas:
OK

// Select SMS message format (0 - pdu, 1 - text)

Komanda:
AT+CMGF=1

Atsakymas:
OK

// Read message #1

Komanda:
AT+CMGR=1

Atsakymas:
+CMGR: "REC UNREAD","+37067733427","","15/08/08,01:20:05+12"
Test 01

OK

// Read all unread messages

Komanda:
AT+CMGL="REC UNREAD"

Atsakymas:


OK

// Delete SMS message #1

Komanda:
AT+CMGD=1

// Send SMS message

Komanda:
AT+CMGS="37067733427"

> Hello!
(send Ctrl+Z to end input)

Atsakymas:
OK

// List all SMS messages

Komanda:
AT+CMGL="ALL"

Atsakymas:






1 komentaras:

  1. Super aprasymas. Tiek detaliai komandu aprasyneti gal ir nereikejo, nes ju visu neapzvelgsi. Veliau pradedant i duomenu perdavimo komandas lysti akys pradeda verstis truputi tai gerai kad to ir nebeaprasei :D

    AtsakytiPanaikinti