Šį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.
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:
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ą.
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:
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