Jokainen kehittäjä, jonka on työskenneltävä matkapuhelinmodeemin kanssa, joutuu jossain vaiheessa käyttämään niin sanottuja AT-komentoja. AT-komennot ovat pohjimmiltaan modeemin ohjeita. Alun perin modeemivalmistaja Hayes kehitti AT-komennot – ’AT’ tulee sanoista ’come to ATtention’ (tule ATtentioniin) – alun perin keinoiksi käyttää niiden lankapuhelintuotteita, mutta nykyään kaikki kaikentyyppiset modeemit käyttävät AT-komentoja.
AT-komentoja käytetään ensisijaisesti modeemin konfigurointiin ja verkkoyhteyden muodostamiseen. Niitä voidaan käyttää myös modeemin ja yhteyden tilatietojen saamiseen, mikä voi olla erittäin hyödyllistä sovellusten virheenkorjauksessa ja sen varmistamisessa, että modeemi toimii oikein: se on yhdistetty oikeaan verkkoon, käyttää oikeaa matkapuhelintekniikkaa, verkkovierailu on käytössä jne. Tarkastelemme pian joitakin hyödyllisiä komentoja tällaisiin tehtäviin.
At-komentojen lähettäminen
AT-komennot lähetetään modeemille tavallisena tekstinä sarjaliitännän (UART) kautta, joka koostuu kahdesta johtimesta, joista toinen on vastaanottoa (RX) ja toinen lähetystä (TX) varten, tai USB:n kautta. Kentällä matkapuhelinverkkoa käyttävä IoT-laite hallitsee modeemiaan lähettämällä sille AT-komentoja, mutta sovelluskehityksen ja virheenkorjauksen aikana ei ole harvinaista napauttaa modeemin yhteyttä. Näin voit käynnistää päätelaitteen ja olla suoraan vuorovaikutuksessa modeemin kanssa antamalla omia AT-komentoja.
Miten AT-komentoja muotoillaan
Lähettämiesi komentojen on noudatettava seuraavaa perussyntaksia:
AT<COMMAND><SUFFIX><DATA>
Tätä kutsutaan ”komentoriviksi”. Kuten näet, se alkaa kirjaimella AT
, jota seuraa komento, komentotilaa tai ”tyyppiä” osoittava suffiksi ja lopuksi joitakin tietoja, vaikka kaikki komennot eivät tarvitse tätä kenttää.
Tätä rakennetta kutsutaan ”komentoriviksi”, ja se lopetetaan aina yhdellä rivinvaihdolla. Riville voi sisällyttää useita komentoja, jotka erotetaan toisistaan puolipisteellä:
AT<COMMAND><SUFFIX><DATA>;<COMMAND><SUFFIX><DATA>;<COMMAND><SUFFIX><DATA>
Jokainen rivi, riippumatta siitä kuinka monta komentoa se sisältää, sisältää vain yhden AT
, alussa. Saat virheilmoituksen, jos sisällytät AT
useammin kuin kerran yhdelle riville. Usean komennon rivien komennot käsitellään peräkkäin. Rivin pituus on yleensä rajoitettu 80 merkkiin.
AT-komentorivin kentät
Kentässä <COMMAND>
ilmoitetaan, mitä haluat modeemin tekevän. Vanhemmilla ”peruskomennoilla” on yksimerkkiset nimet; myöhemmät lisäykset komentosarjaan, joita kutsutaan ”laajennetuiksi” komennoiksi, on varustettu +
-merkillä, kuten AT+COPS
(verkkojen etsiminen) ja AT+CGMI
(Hae modeemin valmistaja). Joidenkin komentojen etuliite on & – esimerkiksi AT&F
, joka nollaa modeemin asetukset. Kaikki matkapuhelinkomennot ovat laajennettuja komentoja. AT-komentomäärittelyn mukaan komentojen on koostuttava isoista kirjaimista, mutta monet modeemit sallivat komentojen lähettämisen myös pienillä kirjaimilla. Me pysymme standardissa.
<DATA>
– ja <SUFFIX>
-kenttien arvot riippuvat komentotyypistä, joita on neljä:
Type | Suffix | Role |
---|---|---|
Read | ? |
Lue modeemin konfiguraatioasetukset |
Set | = |
Modeemin konfiguraatioasetusten asettaminen |
Execute | None | Trigger a modem operation |
Test | =? |
Tarkistaa, tukeeko modeemi mainittua komentoa – mutta huomaa, että AT+COPS=? toimii hieman eri tavalla, kuten näemme pian |
Katsomme hetken kuluttua, miten nämä tyypit vaikuttavat AT-komentojen käyttöön, mutta katsotaan ensin, miten modeemi vastaa komentoihin.
AT-komentovastaus
Kun AT-komento annetaan, modeemi voi lähetetystä komennosta riippuen palauttaa tai olla palauttamatta tietoja, eli antaa niin sanotun ’tietovastauksen’. Joka tapauksessa komentotoiminto päättyy aina siihen, että modeemi palauttaa ’tuloskoodin’.
Emme esimerkiksi kysy modeemin valmistajan nimeä seuraavalla komennolla:
AT+CGMI
Tämä tuottaa seuraavan vastauksen, kun sitä kutsutaan u-blox-modeemilla:
u-bloxOK
Vastauksen jokainen yksikkö – tiedot (ylin rivi) ja tuloskoodi (alin rivi) – on suluissa Carriage Return- ja Line Feed -merkeillä (Ascii-koodit 0x0D
ja 0x0A
), siksi tyhjä rivi ennen OK
.
OK
on yksi palautuskoodi; toinen on ERROR
– teit virheen. Ehkä modeemi ei vastaa lähettämääsi AT-komentoon tai kirjoitit sen väärin. Ehkä annoit liian vähän tai liian monta data-arvoa tai komentoparametria. Oletusarvoisesti modeemit eivät välttämättä anna paljon selityksiä. Onneksi jotkin niistä voidaan asettaa palauttamaan laajennettuja virhetietoja; tätä asetusta varten sinun on jälleen lähetettävä AT-komento: AT+CMEE=2
.
On tärkeää ymmärtää, että voit myös saada ERROR
täysin pätevästä AT-komennosta. Kun näin tapahtuu, se on merkki siitä, että modeemi on tilassa, joka ei ole yhteensopiva komennon kanssa. Jos esimerkiksi yrität muuttaa modeemin APN-nimeä (Access Point Name) modeemin ollessa aktiivinen, vastaus on yleensä ERROR
. Korjauskeinona on poistaa modeemi käytöstä, tehdä APN-muutos ja aktivoida se sitten uudelleen.
AT-komentotyypit ja testaus
Voit lieventää ongelmaa, jossa näennäisesti oikeat komennot heittävät virheitä, käyttämällä testikomennon päätepistettä (=?
), jota käytetään kysymään modeemilta, tukeeko se kyseistä komentoa. Jos se ei tue, saat paluukoodin ERROR
; tiedät, että tätä komentoa ei saa antaa. Jos modeemi tukee komentoa, saat informaatiovastauksen, jossa ilmoitetaan komennon parametrit, jos niitä on, ja sen jälkeen OK
.
Yllä olevaa esimerkkiä voidaan käyttää komentojen testauksen havainnollistamiseen. Voimme kysyä modeemilta, tukeeko se komentoa +CGMI
:
AT+CGMI=?
ja se vastaa OK, koska se tukee tätä komentoa. Koska modeemin valmistaja on kuitenkin kiinteä, jos sitä yritetään muuttaa, tuloksena on aina ERROR
. Miten olisimme voineet yrittää muuttaa sen arvoa? Set-komennon päätteellä (=
):
AT+CGMI="Fintlewoodlewix"ERROR
Huomaa, miten merkkijonotiedot on sijoitettu kaksinkertaisiin lainausmerkkeihin – tämäkin on AT-komennon vaatimus.