Pojďme programovat elektroniku: Sestavíme si mobil a pošleme SMS

  • Kolik stál váš mobilní telefon?
  • Základní GSM modem koupíte za stovku
  • Umí telefonovat, posílat SMS a zvládne i GPRS

Je jich plný eBay a AliExpress, jejich cena začíná zhruba na stokoruně a pomocí UART převodníku je můžete prozkoumávat přímo ze svého počítače. O čem dnes bude řeč? Jak už jsem napověděl v názvu článku, tentokrát se stručně podíváme na jednoduché GSM modemy se sériovým rozhraním.

Prakticky všechny tyto levné moduly používají buď populární GSM čip SIM800L, anebo velmi podobný A6. Destičky jsou zpravidla připravené pro okamžité použití. To znamená, že na spodní straně nechybí slot pro SIM kartu, čip si poradí s českými komunikačními frekvencemi a vedle hlasu a SMS i s GPRS.

Klepněte pro větší obrázek Klepněte pro větší obrázek Klepněte pro větší obrázek Klepněte pro větší obrázek
Různé moduly s GSM medemem SIM800L. Zatímco první modul má širokou nabídku pinů včetně těch pro mikrofon a reproduktor, druhý je jednodušší a nabízí jen RX/TX piny pro sériovou linku. To bohatě stačí na SMS i prozvánění.

No dobrá, ale jak se vlastně takový GSM modem ovládá? Pomocí sériové linky a AT příkazů. Já dnes ale modem nepřipojím skrze piny RX a TX pro sériovou linku třeba k Arduinu, ale pomocí převodníku přímo s počítačem, kde si ukážeme základní práci v sériovém terminálu.

Klepněte pro větší obrázek Klepněte pro větší obrázek
Tento modul A6_Mini s GSM/GPRS modemem A6 od Ai Thinker použijeme v dnešním článku

Hayesovy příkazy

Každý podobný modem lze ovládat pomocí jednoduchých textových instrukcí. Dnes je známe jako tzv. AT příkazy (podle slovíčka ATtention – pozor, zpozornit), jejich historie ale sahá hluboko do 80. let minulého století. Stojí za nimi Dennis Hayes, který potřeboval nějaký jednoduchý příkazový jazyk pro svůj Hayes Smartmodem 300.

Klepněte pro větší obrázek
Řada Hayes Smartmodem byla první, která používala AT příkazy (Foto: Michael Pereckas)

Postupem času jednoduché instrukce převzali i další výrobci a vytvořili si vlastní dialekty. Některé AT příkazy pro základní operace tak zůstávají dodnes stejné, každý typ zařízení ale používá i hromadu vlastních specifických. Ostatně podrobná dokumentace Hayesových příkazů k GSM modemu A6 od čínského Ai Thinkeru, který použiji i já, čítá bezmála 200 stran v PDF.

Pojďme to připojit k počítači

Dost ale bylo omáčky, pojďme si to vyzkoušet v praxi. GSM modem si může během kritických okamžiků (příjem a vysílání) říci o relativně vyšší proud, jeho napájecí piny (VIN + a GND -) tedy připojím k samostatnému 5V zdroji.

Dále musím destičku připojit k počítači. GSM modem pochopitelně nemá USB konektor, budu tedy potřebovat zmíněný UART převodník, který má na jedné straně USB konektor a na druhé komunikační a napájecí piny. Jak už jsem ale napsal výše, proud z USB by nemusel stačit, a tak použiji externí zdroj.

Klepněte pro větší obrázek Klepněte pro větší obrázek
UART převodník, který má na jedné straně USB konektor a na druhé piny pro sériovou komunikaci, a konečně celý obvod připojený vlevo k 5V zdroji a vpravo skrze převodník do počítače

GSM modemy zpravidla pracují s 3V logikou, tu tedy musí nabízet i převodník. Vyplatí se proto takový, který pracuje s oběma nejčastějšími napětími 3,3V a 5V a lze mezi nimi přepínat třeba pomoci jumperu.

Pak už stačí jen křížově propojit samotné komunikační piny sériové linky (RX na TX a TX na RX) a ještě propojit oba zdroje napětí pomocí GND (GND na převodníku s GND na externím zdroji).Tento modem zároveň potřebuje alespoň během startu připojit k napájení (VIN +) i pin PWR (Power – tím jej vlastně zapnu).

Klepněte pro větší obrázek Klepněte pro větší obrázek
Převodník se ohlásil jako COM16 a po otevření linky v sériovém terminálu a spuštění modemu se zobrazily jeho startovací informace

Po připojení k PC se doinstalují ovladače a převodník se v systému ohlásí jako některý z portů COM. Pak už stačí spustit některý z terminálů sériové linky (třeba RealTerm), zvolit patřičný COM a ideálně komunikační rychlost 115 200.

Když teď zapojím zdroj modemu do elektrické sítě, nastartuje a v sériové lince se vypíše několik základních popisných informací. A pokud jsem už tuto sekvenci propásl, mohu správné zapojení a funkčnost modemu ověřit prvním základním AT příkazem ukončeným zalomením řádku:

AT

Pokud bude destička rozumět, měla by mi odeslat odpověď:

OK

Hurá! Můj GSM modem komunikuje.

Kdo jsi?

Dobrá, ale od GSM modemu chceme víc než jen prosté OK. Teď mu tedy v několika instrukcích přikážu, aby o sobě něco prozradil.

Klepněte pro větší obrázek
Základní představovací odpovědi GSM modemu

Začnu jakýmsi aboutem:

ATI

V terminálu se rázem zobrazí výrobce, model čipu, verze firmwaru a vše opět uzavře OK:

Ai Thinker Co.LTD                                                          
A6
V03.03.20160830011H03
OK

Před spuštěním modemu jsem do něj vložil SIM kartu, a tak se ho teď zeptám, jestli je v pořádku:

AT+CCID

Pokud ano, odpovědí mi bude sériové číslo karty SIM:

+SCID: SIM Card ID: 8942031016442791061F
OK

Karta může být chráněná pinem. Mohl bych jej zadat tímto příkazem:

AT+CPIN=1234

A pokud bych se chtěl stejným příkazem zeptat, jestli je PIN v pořádku:

AT+CPIN?

Tak a to je celá základní logika AT příkazů v kostce. Známe, jak zadávat základní parametry a jak se na něco ptát. Teď už pouze zbývá nastudovat desítky a stovky jednotlivých příkazů.

Ale nebojte se, my se jen podíváme na telefonní hovor a SMS.

Co se stane, když někdo zavolá?

Mám stále připojený sériový terminál a teď si z druhého telefonu na testovací SIM zavolám.

Klepněte pro větší obrázek Klepněte pro větší obrázek
Vytáčím číslo GSM modemu, který začne do sériové linky posílat informaci o vyzvánění

Modem v tom případě začne posílat do sériové linky všeříkající sdělení:

RING

RING

RING

Pokud bych hovor potvrdil a měl bych na pinech pro hlasový vstup a výstup připojenou patřičnou audiotechniku, mohl bych hovor bez problému přijmout. Já však namísto toho virtuální sluchátko položím příkazem:

ATH

Bezplatný rádiový spouštěč

V jednom z předchozích dílů jsem si postavil Wi-Fi spínač běžné domácí elektrické sítě a mohl jsem z webového prohlížeče zapnout pokojovou lampu. Předchozího příkladu s příchozím hovorem bych mohl tedy využít ke spuštění lampy i pomocí mobilního signálu.

Klepněte pro větší obrázek Klepněte pro větší obrázek
Wi-Fi spínač magnetického 230V relé bych mohl rozšířit i o GSM. Relé by se sepnulo/odpojilo, pokud by modem vyzváněl.

Mikropočítač by jednoduše čekal, dokud od modemu nedorazí klíčové slovo RING, načež vyzvánění ukončí a zapne, nebo naopak vypne lampu. Kouzlo spočívá v tom, že nemusím posílat v tomto případě relativně drahou SMS zprávu. Hovor, který nikdo nepřijme, mě totiž vůbec nic nestojí, ale už samo volání lze využít jako informaci.

A teď si zavolám

AT příkazem mohu podobným způsobem hovor také vyvolat:

ATD724669123

Jakmile tato instrukce dorazí do modemu, vytočí číslo. Hypotetický mikropočítač by mi tímto způsobem mohl sdělit, že se něco děje, aniž by mě to opět cokoliv stálo. Prostě mě jen prozvoní a vyzvánění třeba po třech sekundách sám ukončí. Do délky vyzvánění přitom mohu opět zakódovat nějakou jednoduchou informaci. Třeba: Prozvání mě telefonní modem déle než pět sekund? Mám doma lupiče!

Klepněte pro větší obrázek Klepněte pro větší obrázek
V terminálu jsem vyslal příkaz k vytočení čísla svého telefonu. Modem oznámil, že telefon na druhé straně vyzvání (SOUNDER) Jelikož jsem ale hovor odmítl, modem nakonec ohlásil, že je obsazeno (BUSY).

Co se stane, když dorazí SMS

Jelikož GSM modem stále poslouchá a stav hlásí do sériové linky, podobně jako v případě hovoru sám ohlásí, že dorazila SMS. Jenže namísto hezky čitelného textu dorazí třeba takový guláš:

+CMT: ,30
07912470335489600040C91247042660920000071102112441140CCD41F45B0D6ABFC9E5763904

Modem totiž ve výchozím stavu používá pro textové zprávy surový formát PDU (Protocol Description Unit) a já mu musím přikázat, ať používá ASCII. Nejprve si tedy ověřím, jaký formát je aktuálně nastavený:

AT+CMGF?

A odpovědí mi bude:

+CMGF: 0
  • 0 představuje formát PDU
  • 1 představuje formát TEXT/ASCII

A jelikož už víte, jak se nastavují základní parametry, tak následující příkaz nemusím vysvětlovat:

AT+CMGF=1

Když mi teď dorazí SMS, v terminálu se zobrazí krásně čitelná zpráva s informací o odesílateli, časem a textem:

+CIEV: "MESSAGE",1
+CMT: "+420724669123",,"2017/01/12,22:41:33+01"
Ahoj modeme, jak se mas?
 
Klepněte pro větší obrázek Klepněte pro větší obrázek Klepněte pro větší obrázek
Hurá, na GSM modem dorazila první SMS zpráva

Odesíláme SMS

Na závěr si vyzkoušíme odeslání vlastní SMS. Už jsme nastavili režim SMS na text, takže ji můžeme vytvořit ve srozumitelném zadání.

Nejprve vyberu telefonní číslo příjemce:

AT+CMGS=“724669123“

Na dalším řádku už bez dalších parametrů napíšu svoji zprávu:

Jsem Skynet a ovladl jsem svet. Utec, dokud muzes!

A vše uzavřu CTRL+Z, čímž dám modemu najevo, že už jsem dopsal a má sdělení doručit nebohému člověku na druhé straně.

Zapsání CTRL+Z může být samozřejmě oříšek, ale stačí odeslat numerický ASCII kód této klávesové zkratky, který je roven 26. Kdyby tedy byl modem připojený třeba k Arduinu, poslal bych do sériové linky příkaz:

Serial.println(char(26));

V případě mého sériového terminálu RealTerm stačí napsat do textového vstupu jednoduše 26 a namísto tlačítka Send ASCII klepnout na Send Numbers.

Klepněte pro větší obrázek Klepněte pro větší obrázek Klepněte pro větší obrázek
Odeslání SMS zprávy z GSM modemu, který připojím k jakémukoliv počítači/mikrokontroleru s rozhraním UART/sériové linky, je naprosto jednoduché

Pokud se zadaří, modem opět odpoví potvrzovacím OK a je hotovo.

Pomocí několika příkazů vytvoříte GSM telefon

Dnes jsme si tedy ukázali základní práci s GSM modemem pomocí AT příkazů, přičemž jsme jej díky sériové lince mohli ovládat pomocí převodníku přímo z počítače. Stejným způsobem bychom ale postupovali, kdyby byl modem připojený k našemu mikropočítači.

Klepněte pro větší obrázek
Na internetu je hromada návodů, jak pomocí (třeba) Arduina a GSM modemu vyrobit plnohodnotný telefon pro geeky. Stačí do Googlu zadat třeba „arduino gsm.“

Vzhledem k tomu, že jsou základní operace opravdu jednoduché, nepotřebujeme k ovládnutí modemu ani žádné knihovny, přestože na webu najdete jak ty pro modemy SIM800L, tak pro A6. Pak je použití modemu ještě snazší.

Ať už tedy máte doma nějaké to Arduino, nebo na něj teprve čekáte, určitě investujte i do GSM modulu. Stojí pár kaček a nejjednodušší stavovou informaci díky detekci prozvonění přenesete prakticky na tisíce kilometrů daleko, aniž by vás to něco stálo.

Témata článku: Hardware, Pojďme programovat elektroniku, Mobility, Programování, Mobilní telefon, Arduino, Stavebnice, Modemy, Code, Pre, Modem, SMS, Ring, Send

28 komentářů

Nejnovější komentáře

  • Peter Misenko 30. 1. 2017 0:17:58
    Moj telefon...
  • zkill 14. 1. 2017 18:56:06
    Jenom technická poznámka. SIM800L není v žádném případě GSM čip. Je to GSM...
  • krakenax 14. 1. 2017 16:33:29
    Taky jsem na to kdysi koukal ale trápí mě jediná věc. Je to schválený pro...
Určitě si přečtěte

Nové úlovky kamer Googlu: Šmírovačka na Street View nepřestává bavit

Nové úlovky kamer Googlu: Šmírovačka na Street View nepřestává bavit

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

19.  5.  2017 | redakce | 38

Kdo dal počítačům okna, kurzor a myš: Douglas Carl Engelbart

Kdo dal počítačům okna, kurzor a myš: Douglas Carl Engelbart

** Douglas Engelbart je opomíjenou osobností počítačové historie ** Věděl, jak bude pohodlné ovládat počítače, i když k tomu ještě neměly výkon ** Za vynálezem myši a systému s okny nestojí Steve Jobs a Apple

17.  5.  2017 | Pavel Tronner | 28


Aktuální číslo časopisu Computer

Supertéma: moderní cestování

Kdy opravdu přijdou nové baterie?

Velké testy: 6 herních notebooků a 8 volantů

Recenze: AMD Ryzen řady 5