Každý vývojář, který musí pracovat s mobilním modemem, musí někdy použít takzvané příkazy AT. Příkazy AT jsou v podstatě instrukce modemu. Příkazy AT, které původně vyvinul výrobce modemů Hayes jako prostředky pro obsluhu svých výrobků pro vytáčené pevné linky, jsou nyní používány všemi modemy všech typů.
Příkazy AT slouží především ke konfiguraci modemu a navázání síťového připojení. Lze je také použít k získání informací o stavu modemu a připojení, což může být velmi užitečné při ladění aplikací a při potvrzení, že modem pracuje správně: je připojen ke správné síti, používá správnou mobilní technologii, má povolen roaming atd. Na některé užitečné příkazy pro takové úkoly se podíváme za chvíli.
Jak posílat příkazy AT
Příkazy AT se posílají do modemu jako prostý text přes sériové (UART) připojení, které se skládá ze dvou vodičů, jednoho pro příjem (RX) a druhého pro vysílání (TX), nebo přes USB. V terénu bude zařízení IoT s mobilním připojením spravovat svůj modem tak, že mu bude posílat příkazy AT, ale během vývoje a ladění aplikací není neobvyklé připojení modemu odposlouchávat. To vám umožní spustit terminál a komunikovat s modemem přímo vydáváním vlastních příkazů AT.
Jak formátovat příkazy AT
Příkazy, které posíláte, musí dodržovat následující základní syntaxi:
AT<COMMAND><SUFFIX><DATA>
Tomu se říká „příkazový řádek“. Jak vidíte, začíná AT
, následuje příkaz, přípona označující režim příkazu nebo ‚typ‘ a nakonec nějaká data, i když ne všechny příkazy musí toto pole obsahovat.
Tato struktura se nazývá ‚příkazový řádek‘ a je vždy ukončena jedním návratem vozíku. Do řádku můžete zahrnout více příkazů, každý oddělený středníkem:
AT<COMMAND><SUFFIX><DATA>;<COMMAND><SUFFIX><DATA>;<COMMAND><SUFFIX><DATA>
Každý řádek, bez ohledu na to, kolik příkazů obsahuje, má pouze jeden AT
, a to na začátku. Pokud v jednom řádku uvedete AT
vícekrát, zobrazí se chyba. Příkazy v řádcích s více příkazy se zpracovávají postupně. Délka řádku je obvykle omezena na 80 znaků.
Pole příkazového řádku AT
Pole <COMMAND>
udává, co má modem provést. Starší, „základní“ příkazy mají jednoznakové názvy; pozdější přírůstky do sady příkazů, nazývané „rozšířené“ příkazy, mají předponu se znakem +
, například AT+COPS
(vyhledávání sítí) a AT+CGMI
(získání výrobce modemu). Některé příkazy mají předponu & – například AT&F
, který resetuje nastavení modemu. Všechny mobilní příkazy jsou rozšířené příkazy. Podle specifikace příkazů AT musí příkazy obsahovat velká písmena, ale mnoho modemů umožňuje posílat příkazy i malými písmeny. My se budeme držet standardu.
Hodnoty polí <DATA>
a <SUFFIX>
závisí na typu příkazu, které jsou čtyři:
Type | Suffix | Role |
---|---|---|
Read | ? |
Zjistit nastavení konfigurace modemu |
Nastavit | = |
Nastavit konfiguraci modemu. setting |
Execute | None | Trigger a modem operation |
Test | =? |
Zkontrolovat, zda modem podporuje jmenovaný příkaz – všimněte si však, že AT+COPS=? funguje trochu jinak, jak za chvíli uvidíme |
Za chvíli uvidíme, jak tyto typy ovlivňují používání příkazů AT, ale nejprve se podívejme, jak modem na příkazy reaguje.
Odpověď příkazu AT
Při vydání příkazu AT může, ale nemusí modem v závislosti na odeslaném příkazu vrátit data, tj. provést tzv. informační odpověď. V každém případě operace příkazu vždy končí tím, že modem vrátí „kód výsledku“.
Předpokládejme například, že se zeptáme na jméno výrobce modemu pomocí následujícího příkazu:
AT+CGMI
Tento příkaz při volání na modem u-blox vygeneruje následující odpověď:
u-bloxOK
Každá jednotka odpovědi – informace (horní řádek) a kód výsledku (dolní řádek) – je ohraničena znaky Carriage Return a Line Feed (kódy Ascii 0x0D
, resp. 0x0A
), proto je před OK
prázdný řádek.
OK
je jeden návratový kód; druhý je ERROR
– udělali jste chybu. Možná modem nereaguje na příkaz AT, který jste odeslali, nebo jste ho špatně zadali. Možná jste zadali příliš málo nebo příliš mnoho datových hodnot nebo parametrů příkazu. Ve výchozím nastavení nemusí modemy poskytovat mnoho vysvětlení. Některé z nich lze naštěstí nastavit tak, aby vracely rozšířené informace o chybách; pro použití tohoto nastavení je opět nutné odeslat příkaz AT: AT+CMEE=2
.
Důležité je si uvědomit, že můžete také obdržet ERROR
z naprosto správného příkazu AT. Pokud k tomu dojde, je to známka toho, že modem je ve stavu, který je s příkazem nekompatibilní. Pokud se například pokusíte změnit název přístupového bodu (APN) modemu, když je aktivní, obvykle se vrátí ERROR
. Náprava spočívá v deaktivaci modemu, provedení změny APN a jeho opětovné aktivaci.
Typy příkazů AT a testování
Problém, kdy zdánlivě správné příkazy hází chyby, můžete zmírnit použitím přípony testovacího příkazu (=?
), která slouží k dotazu na modem, zda daný příkaz podporuje. Pokud ne, obdržíte návratový kód ERROR
; víte, že tento příkaz nemáte zadávat. Pokud modem příkaz podporuje, obdržíte informační odpověď s uvedením parametrů příkazu, pokud nějaké má, následovanou kódem OK
.
Výše uvedený příklad lze použít k demonstraci testování příkazů. Můžeme se modemu zeptat, zda podporuje příkaz +CGMI
:
AT+CGMI=?
a modem vrátí odpověď OK, protože tento příkaz podporuje. Protože je však výrobce modemu pevně stanoven, pokus o jeho změnu vždy skončí hlášením ERROR
. Jak jsme se mohli pokusit změnit jeho hodnotu? Pomocí přípony příkazu set (=
):
AT+CGMI="Fintlewoodlewix"ERROR
Všimněte si, jak jsou údaje řetězce umístěny do dvojitých uvozovek – i to je požadavek příkazu AT.