OK

Při poskytování služeb nám pomáhají soubory cookie. Používáním našich služeb vyjadřujete souhlas s naším používáním souborů cookie. Více informací

Úvodní stránka » GSM » Jak jednoduše na GSM - II.díl - základní AT příkazy a HW

Jak jednoduše na GSM - II.díl - základní AT příkazy a HW

Tento článek navazuje na úvodní představení GSM modulu SIM800L a dneska se podrobněji podíváme, na to, jak zakomunikovat s modulem SIM800L a donutit jej vytočit telefonní číslo, zavěsit příchozí volání - přečíst identifikaci a na jejím základě odeslat SMSku a hlavně, co je potřeba nastavit před tím, než modul začneme aktivně využívat.

 

Zapojení pro praktické testy

Abychom se dokonale seznámili s modulem SIM800L, doporučuji nepřipojovat jej rovnou k Arduinu, ale zkusit si zakomunikovat přes vhodný převodník USB/UART s tím, že je třeba mít neustále v patrnosti nutnost vhodného napájení modulku. Pro tyto účely se velmi dobře hodí step down měniče z našeho e-shopu, které lze připojit např. k baterii nebo síťovému napáječi a potřebné napětí (tedy zhruba kolem 4V) nastavit trimrem.  Zapojení je patrné ze schématu. Pin RESET na SIM800L nechávám nezapojený, využivám jej pouze ve spojení s Arduinem pro korektní reset při počátečním startu aplikace. Pouze připomínám, že úrovně na TX a RX musí být 3,3V, takže je potřeba využít nějaký vhodný USB/UART převodník, který umožňuje přepnutí z 5V na 3,3V, naleznete jej třeba na našem eshopu.

 

Jak je z obrázku patrné, je potřeba signály RX, TX modulku SIM800L připojit do kříže s TX,RX USB/UART převodníku. Toť po stránce HW vše a můžeme se pustit do testování. Vyberte si nějaký vhodný terminálový program - těch je na netu nepřeberné množství, osobně bych doporučil geniální utilitu Hercules SETUP od kolegů z HW serveru. Je to asi nejlepší prostředí pro experimentování jak s UARTem, pak hlavně v oblasti TCP/IP komunikace. Vřele doporučuji mít tuto utilitku na ploše!

Do modulku SIM800L vložte SIM kartu (doporučuji odemknout v jiném telefonu a zbavit ji PINu), zapněte napájení a mělo by se objevit blikání jediné LEDky, která je na modulku přítomná. LEDka bude blikat v intervalu cca 800ms, po zhruba 10 sekundách by se měl modulek začít registrovat k síti - to se projeví zhasnutím LED na cca 2 sekundy a pak už LED bude blikat v intervalu také zhruba 2 sekundy (cca 800ms svítí, zbytek tma).

Modulek SIM800L má autodetekci komunikační rychlosti, přesto je ale potřeba nějakou rychlost na terminálu zvolit - doporučuji 115 200, odezvy jsou pak velice svižné, zejména při laborování s GPRS komunikací a načítání většího množství dat. Zvolte také příslušný virtuální COM port a můžeme začít.

Úvodní komunikace se SIM800L

Jako první si vyzkoušíme samotnou odezvu od modulku SIM800L:

Příkaz: AT

Odpověď: OK


 Dále se podíváme, zda je SIM800L registrován k síti operátora:

Příkaz: AT+CREG?

Odpověď: +CREG: 0,1 OK - pokud jsme v domácí sítí, +CREG: 0,3 - pokud jsme v roamingu, pokud obdržíte jinou odpověď, doporučuji příkaz po pár sekundách opakovat


Prověříme, jak silný máme signál:

Příkaz: AT+CSQ

Odpověď: +CSQ: 25,0 OK - zde pod číslem 25 se skrývá hodnota kvality signálu v rozmezí -110 až -54dBm, čím vyšší údaj, tím lepší, empiricky jsem zjistil, že pro odeslání SMS by hodnota měla být někde nad 12, u datové komunikace nad 15, aby vše spolehlivě fungovalo. Jsem cca 1km od nejbližší BTSky, takže tomu odpovídá i poměrně vysoká kvalita signálu


Zjistíme si, u jakého operátora se nám SIM karta registrovala:

Příkaz: AT+COPS?

Odpověď: +COPS: 0,0,"T-Mobile CZ" OK - jak je patrné, jsme u T-Mobile CZ


Operátor obvykle poskytuje i přesný čas ve své síti GSM, tak se ho pokusíme zjistit, nejprve ale musíme udělat nějaké konfigurační příkazy:

Příkaz: AT+CLTS=1

Odpověď: OK

Příkaz: AT+CENG=3

Odpověď: OK

A teď už můžeme čas přečíst:

Příkaz: AT+CCLK?

Odpověď: +CCLK: "15/09/02,08:25:17+08" OK - formát časové značky z GSM sítě je myslím patrný - rok/měsíc/den, čas včetně posunu, formát je 24 hodinový.


No a pro fajnšmekry ještě i GPS pozice odvozená interpolací ze známého umístění BTS, síly signálu, azimutu vysílání a nevím čeho všeho, určitě to není nic přesného a s reálou GPSkou se to nedá srovnávat:

Příkaz: AT+CIPGSMLOC=1,1

Odpověď: +CIPGSMLOC: 0,18.266600,49.545933,2015/09/02,07:15:27 OK

Formát je celkem zřejmý, GPS pozice a časová značka.


 

Nachystáme si ještě 2 důležité věci pro násedující pokusy s vytáčením a příjmem hovoru a přijetím a odesláním SMSky. Práce s hovorem se může zdát u modulku SIM800L celkem zbytečná, protože nemá vyvedené audio (jsou ovšem modulky se SIM800L, které audio mají), ale já osobně používám hovor pro autorizované odeslání SMSky o stavu zařízení - trochu těžkopádně popsané, ale princip je tento: na zařízení zavolám ze svého mobilu, Arduino přečte, kdo volá a pokud má číslo uložené v paměti, pak pošle danou SMSku. A protože příchod SMSky je někdy těžko postřehnutelný, pak po odeslání SMSky ještě na daný telefon zavolám a nechám cca 3x prozvonit. Tato metoda funguje velice spolehlivě! Tak pojďme ještě k poslední konfiguraci.

Nakonfigurujeme modul tak, abychom zachytili příchozí volání s CLIP (Calling Line Identification Presentation) - neboli, abychom pak mohli přečíst, kdo na modulek volá:

Příkaz: AT+CLIP=1

Odpověď: OK

K SMSkám provedeme poněkud více nastavení:

1. Nadefinujeme textový formát příjmu SMS zpráv (defaultní je tzv. PDU formát - to je takové 7-mi bitové kódování, kterým se nebudeme zabývat):

Příkaz: AT+CMGF=1

Odpověď: OK

 2. Zakážeme si indikaci příchozí SMS zprávy on the fly do UARTu - osvědčilo se mi, že je lepší ke zprávám přistupovat asynchronně a tahat si je z paměti, až je na tuto akci prostor. Oceníte to zejména v rozsáhlých aplikacích ve spojení s GPRS komunikací, kdy Vám do UARTu chodí kde co a musíte prioritně zpracovávat jiné věci, než SMSky, ty většinou počkají v paměti, tak tedy:

Příkaz: AT+CNMI=0,0

Odpověď: OK

3. Smažeme z paměti všechny případné SMSky:

Příkaz: AT+CMGD=1,4

Odpověď: OK

Tak a jsme připraveni zahájit pokusy na téma volání a posílání SMSek!

 

Vytáčení a příjem hovorů

Nejprve si zkusíme zavolat z modulku SIM800L na své číslo, do terminálu tedy pouštím:

Příkaz: ATD 739822476; - POZOR!!!! nezapomeňte na ten středník na konci, pokud jej tam nevložíte, pak se má za to, že sestavujete datové nikoliv hlasové volání!

Odpověď: OK - to je bezprostředně po zadání příkazu a v momentě, kdy hovor típnete se objeví BUSY (obsazeno)

Nyní zkuste zavolat zpět na modulek SIM800L, při každém zazvonění se objeví:

RING

+CLIP: "420739822476",145,"",0,"",0 - zde je hezky patrná identifikace mého čísla

V momentě, kdy na telefonu hovor típnu, objeví se v UARTu hláška NO CARRIER. Hovor také můžete zavěsit z modulku SIM800L a to posláním příkazu:

Příkaz: ATH

Odpověď:NO CARRIER OK

To je tak asi vše, co se dá od hovorového kanálu modulku SIM800L potřebovat a pojďme na SMSky.

 

Příjem a poslání SMSky 

Pošlete na modulek SIM800L SMSku. Tak, jak mívám nastavenou prezentaci SMS zprávy, do UARTu nepříjde vůbec nic. Změnou parametrů u příkazu AT+CNMI lze docílit buď aby SMSka přišla do UARTu sychronně v momentě, kdy se objeví, nebo přišla jen její notifikace. Zde doporučuji nastudovat datasheet, jak to s těmi parametry vlastě je. Z výše uvedených důvodů chci mít v UARTu klid a proto, až je na to vhodná doba zkontroluji, zda nějaká SMSka přišla či nikoliv. Kontrolu provedem následujícím příkazem.

Příkaz: AT+CMGR=1

Odpověď: OK - v případě, že paměť je prázdná, nebo se do UARTu vypíše následující, v případě, že SMSka došla:

+CMGR: "REC UNREAD","+420739822476","","15/09/02,08:51:00+08"
Testovaci zprava

Na prvním řádku máte informaci o tom, že zpráva ještě nebyla přečtena REC UNREAD (když si ji vypíšete znovu, pak se stav změní na REC READ), dále pak odkud zpráva přišla - identifikaci a nakonec časovou značku, kdy SMSka dorazila. Na dalším řádku je pak již samotný obsah zprávy v textové podobě.

Kdyby dorazila další SMSka, uloží se na pozici 2 a pak by ji bylo třeba vypsat příkazem AT+CMGR=2. Já ovšem s SMSkami v aplikaci zacházím tak, že ji přečtu a hned ji přkazem AT+CMGD=x smažu (x je pozice v paměti), takže si paměť neustále udržuji čistou a kontroluji ve smyčce tak maximálně 10 pozic, více SMSek najednou než je přečtu snad nepřijde. Resp. se to ještě nestalo, ale můžete samozřejmě nechat běžet smyčku až narazíte na první OK, za touto pozici již žádné UNREAD SMSky nebudou. Možná trochu zvláštní přístup, ale z praxe celkem vím o čem mluvím.

Tak a jako poslední úkol v tomto díle pošleme SMSku z modulku SIM800 na telefonní číslo. Přístup je zde poněkud krkolomnější, ale není to výmysl výrobce SIM800L, je to dáno někde hluboko v normách GSM AT příkazů. Jdeme na to.

Příkaz: AT+CMGS="739822476" - v uvozovkách telefonní číslo v národním nebo mezinárodním formátu bez "+"

Odpověď: >

Do terminálu se nám hodí znak ">", můžeme tedy napsat obsah SMSky a teď pozor - žádné Enter nebo <CR><LF> - to vyrobíte v SMSce leda další řádek. V momentě, kdy SMSka je dopsána, pak je třeba poslat znak CTRL+Z. Pro nedočkavce na další díl, kde už pojedu rovnou z Arduina je správná implementace v kódu takto: SIM800.write ((char) 26); kde právě znak 26 v ASCII kódování reprezentuje CTRL+Z

Za malou chvilku, cca do 4 sekund (berte ale pořád v potas, že SMSka je něco, co nikdo neručí, od toho je tady GPRS, aby se dalo alespoň na něco spolehnout) by Vám měla pípnout SMSka na Vašem mobilu. A ještě odpověď od tohoto příkazu:

+CMGS: 220

OK

Pro tento díl je to vše, příště připojíme modulek SIM800L k Arduinu, uděláme jednoduchý terminálový prográmek, abychom nemuseli používat kdejaké UART převodníky pro testování a vše výše popsané zabalíme do nějakého skeče.

 

Přidat komentář

Zvýrazněné položky jsou povinné.

Přehled komentářů

  1. GPRS se SIM800 (xenon, 2.9.2015 13:05:10) Odpovědět

    Ahoj! Naprosto skvělý článek, díky za něj! Bude i pokračování kolem GPRS komunikace?

  2. SIM800L se nepripoji do site (Jiří Sloupenský, 5.12.2015 20:24:35) Odpovědět

    dobrý den,
    včera jsem dostal modulek SIM800L a zapojil ho podle vašeho návodu. Bohužel se mi nepřipojí do sítě
    - mám SIM od CEZ, jinak je funkcni. AT+CSQ mi dává
    +CSQ: 31,0, takže signálu je dost, ale po AT+CREG?
    to píše +CREG: 0,0. PIN jsem vložil správný . Nevíte, v čem by mohl být problém ?

    Dobrý den,
    doporučuji ze SIM karty PIN odstranit, tzn. ji odemknout tak, by fungovala bez PINU pro prvotní pokusy. Jak máte ten SIM800 napájený? Někdy mívá problém se chytit na síť z důvodu toho, že není schopen vykrýt proudovou špičku. Pokud jej napájite z USB portu PC, pak se Vám to téměř jistě nechytí k operátorovi. Zkuste napájení kolem 4V, tzn. do série dejte jen 1 diodu, to někdy pomůže - je to celé ale o dostatečně tvrdém zdroji. Těch modulků mám asi 80 instaolvaných a v provozu, zatím jsem nenarazil na nějaký problém tohoto typu.

    S pozdravem,

    PF

  3. GPRS (Pepa z depa, 17.12.2015 9:28:52) Odpovědět

    Dobrý den, taky se přikláním ke GPRS komunikaci.
    Dneska má pomalu každá simka internet :) Mám v plánu zhotovit senzor hlídání hladiny, který bude info o stavu hladiny odesílat data přes GPRS "někam na server" a přijímat je třeba přes SMS, ale příjem nebude tak častý.

    Admin:
    Jj, díl 10. bude už konečně o GPRS, někdy mezi svátky to sepíšu a doplním patřičně knihovnu, aby to bylo zase úplně jednoduché. Příklad bude posílat data na Thingspeak.com přes http get.

  4. gprs neodpovida (fredykoci, 19.1.2016 19:35:44) Odpovědět

    Dobrý den,

    Zapojil jsem můj modul podle navodu a na prikaz AT mi neodpovida.

    Nevíte v čem by mohl být problem?

    Dobrý den,
    Problém bývá buď v přehozeném rx a tx, nebo v úrovních na UARTu, ten je pouze 3.3V tolerantní! Nezřídka jde i o správné napájení, snažte se mít na Vcc max. 4.2V, jak toho sosáhnout je předmětem mého seriálu. Dále nezapomeňte, že každý command musí končit sekvencí CR+LF, zkontrolujte si, zda Vám terminál tyto znaky posílá ....
    To jsou základní věci, na které je třeba myslet.

    PF

  5. Jak je to s účtovaním? (ergo, 29.1.2016 21:48:40) Odpovědět

    Ptám se jestli za každou odeslanou sms nebo hovor se učtuje běžný poplatek?

    Admin:
    Pochopitelně. Záleží, jaký máte tarif od operátora. Existují výhodné tzv. M2M tarify pro ovládání nečeho přes prozvánění a SMSky. Případně koukněte na nabídky alternativních operátorů nebo to řešte předplacenou kartou.
    PF

  6. Poloha (Lamak, 23.5.2016 20:59:00) Odpovědět

    Zdravím,

    tak si tady hraju s polohou a command (AT+CIPGSMLOC) co tu uvádíš funguje jen s otevřeným datovým připojením, což pochopitelně stojí nějakou tu kačku. Nevíš, zda to lze nějak obejít? Nechce se mi platit data jen kvůli poloze :).

    Díky :).

    Dobrý den, mám obavy, že bez datového tarifu to nepůjde, jsou na to navázány příkazy, které otevírají datovou komunikaci. Rozumím Vám, ale ani já bych za službu pseudolokalizace nechtěl platit ani korunu - je to plus mínus bus, někdy 100m, někdy 50, někdy 500, nékdy úplně mimo - zejména ve městě při odrazech od budov ta lokalizace chodí bídně. Uvidíme, kam se dostane lokalizace u LPWAN sítí - marketingově je 20m, pravděpodobně se objevil nějaký nový fyzikální zákon, o kterém nevím :-).

    PF

  7. Neregistruje se do sítě (Karel O., 10.10.2016 10:46:58) Odpovědět | Zobrazit odpovědi

    Dobrý den,
    skvělý návod. Nesetkal jste se někdy s tím, že se modul nechce registrovat do sítě?
    Mám 2 různé moduly, 2 různé simkarty (oboje od T-mobile), napájím z lion baterie z mobilu (většinu času si drží cca 4V, kapacita 1500mAh).
    AT+CREG? vrací většinou 0,2 (hledá), pak na chvíli 0,4.
    Příkaz AT+CSQ vrací 0,0. Antény i baterky jsem vyzkoušel různé, výsledek stejný. Dělají to oba moduly.
    AT+COPS=? vrátí seznam dostupných operátorů.
    PIN kód byl odstraněn při aktivaci SIM v mobilu.
    Modul se po nastartování zahlásí takto:
    +CFUN: 1

    +CPIN: READY

    Call Ready

    SMS Ready

    1. Re: Neregistruje se do sítě (alda67, 28.10.2016 23:21:13) Odpovědět

      Dobrý den, měl jsem ten samý problém. Modulek se mi nechtěl registrovat do sítě. Vše jsem měl zapojené na kontaktním poli a napájené z laboratorního zdroje. Nastavené napětí 4V a proudové omezení nastavené na maximum 5A. Až jsem zdroj připojil přímo k modulku, tak najednou problém byl pryč a registrace do sítě proběhla okamžitě. Pravděpodobně v tom kontaktním poli byly nějaké malé přechodové odpory, na kterých muselo docházet k úbytku napětí při proudových špičkách v okamžiku registrace do sítě. Nevím jakým způsobem to máte vše propojené, pokud používáte také kontaktní pole, zkuste napájení modulku připojit přímo k zdroji napětí.

      1. Re: Re: Neregistruje se do sítě (Adam, 13.2.2017 21:55:13) Odpovědět

        Tyjo, fakt to je tímhle... Samotného by mě to fakt nenapadlo, už jsem to chtěl vyhodit.
        Díky

  8. Stav zbývajícího kreditu (alda67, 27.10.2016 23:14:05) Odpovědět | Zobrazit odpovědi

    Dobrý den, potřeboval bych občas zjistit stav kreditu. Příkaz ATD *22#; vypíše pouze odpověď OK. Nemáte prosím radu jak na to? Děkuji předem a jinak parádní stránky.

    Dobrý den,
    To bohužel netuším. Možná někdo ze čtenářů - bastlířů nemá nějakou radu? Díky!
    Petr

    1. Re: Stav zbývajícího kreditu (Jirka, 23.1.2017 18:30:28) Odpovědět

      Mě chodí AT+CUSD=1,"*103#"

      Díky za super článek

  9. SIM900 (Peter, 1.11.2016 20:26:16) Odpovědět | Zobrazit odpovědi

    Dobry den,
    po zapnuti modul hlasi RDY, +CFUN:1, +CPIN:SIM PIN
    kde moze byt problem?
    Dakujem za info

    1. Re: SIM900 (hugo, 8.9.2017 5:46:14) Odpovědět

      karta chce pin

  10. Zistenie stavu kreditu (iVAN, 4.3.2017 22:19:50) Odpovědět | Zobrazit odpovědi

    Ahojte. Mam sice anglickeho operatora ale podarilo sa mi prijat a zobrazit stav kreditu. Najskorej treba zadat prikaz AT+CUSD=1 a potom poslat poziadavku na kredit. V mojom pripade to bolo ATD *131# .

    Odpoved som dostal - +CUSD: 0, "Your Lycamobile balance is Ł0.00 to top-up, please visit Lycamobile.co.uk or purchase a Lycamobile voucher. Thank you", 1


    Snad to pomoze.

    1. Re: Zistenie stavu kreditu (Ivan, 4.3.2017 22:25:10) Odpovědět

      Tak dokonca ten zapis sa da spravit aj vo forme - AT+CUSD=1,"*131#"

  11. Papouškuje (Asus, 29.6.2017 13:43:13) Odpovědět

    Když odešlu příkaz AT odpoví AT.Když pošlu AT+CSQ odpoví AT+CSQ. Kde múže být problém ? Piny Rx a Tx jsem kontroloval. Dík

  12. CSQ (ehmmm, 17.10.2017 15:05:54) Odpovědět

    Na zacatek to je dobrej tutorial pro inspiraci. Dekuji.

    Zkousim prenaset data pres TCP/IP pres GPRS a laboruji s antenou na PCB a s prikazem AT+CSQ. Dovolim si pridat svou poznamku, ze RSSI = 25 (to je to prvni cislo v odpovedi na AT+CSQ, to druhe je BRE) je podle me hodne luxusni hodnota. Obvykle jsou u mne doma hodnoty okolo 15. Dolni mez, pri ktere se mi jeste podarilo prenest data, je v mem pripade cca 5 az 8. Pricemz pri te 5 uz mam nenulove BRE a uz to opravdu drhne.

  13. CSQ oprava (ehmmm, 17.10.2017 15:10:25) Odpovědět

    Oprava: To druhe cislo v odpovedi je BER = Bit Error Rate. Ted koukam do logu, ze uz jsem prenesl i data s RSSI=3 a BER=6, ale to uz je spis nahoda.

  14. HELP (Lukas, 25.11.2017 13:31:44) Odpovědět

    Zdravim, da sa niako overit, ci mi modul spravne odoslal SMS a prisla na mobil ?


TOP produkty

NodeMCU s ESP8266

NodeMCU s ESP8266
350 Kč s DPH

Arduino MEGA2560

Arduino MEGA2560
424 Kč s DPH

Kontakt

Ing. Petr Foltýn
Kunčice pod Ondřejníkem 814, 73913
TOPlist