Uma Introdução aos Comandos AT

Um desenvolvedor que precisa trabalhar com um modem celular terá que fazer uso do que é chamado de ‘comandos AT’ em algum momento. Comandos AT são essencialmente instruções de modem. Originalmente desenvolvidos pelo fabricante do modem Hayes como meio de operar seus produtos de linha fixa discada, os comandos AT – o ‘AT’ significa ‘come to ATtention’ – agora são usados por todos os modems, de todos os tipos.

Os comandos AT são usados principalmente para configurar um modem e estabelecer sua conexão de rede. Eles também podem ser usados para obter informações do status do modem e da conexão, e isso pode ser muito útil em aplicações de depuração e na confirmação de que um modem está operando corretamente: ele está conectado à rede correta, está usando a tecnologia celular correta, tem roaming habilitado, etc. Em breve veremos alguns comandos úteis para tarefas como estas.

Como enviar comandos AT

Os comandos AT são enviados para o modem como texto simples através de uma conexão serial (UART) compreendendo dois fios, um para recepção (RX) e outro para transmissão (TX), ou via USB. No campo, um dispositivo IoT habilitado para celular irá gerenciar seu modem enviando comandos AT, mas durante o desenvolvimento e depuração da aplicação, não é raro tocar na conexão do modem. Isso permite que você acione um terminal e interaja diretamente com o modem emitindo comandos AT próprios.

Como formatar comandos AT

Os comandos enviados devem obedecer à seguinte sintaxe básica:

AT<COMMAND><SUFFIX><DATA>

>

A isto se chama ‘linha de comando’. Como você pode ver, ele começa com AT, seguido por um comando, um sufixo para indicar o modo de comando ou ‘type’, e finalmente alguns dados, embora nem todos os comandos precisam deste campo para serem incluídos.

Esta estrutura é chamada de ‘linha de comando’ e é sempre terminada por um único retorno de linha de comando. Você pode incluir vários comandos na linha, cada um separado por um ponto e vírgula:

AT<COMMAND><SUFFIX><DATA>;<COMMAND><SUFFIX><DATA>;<COMMAND><SUFFIX><DATA>

Cada linha, não importa quantos comandos contém, tem apenas um AT, no início. Você receberá um erro se incluir AT mais de uma vez em uma única linha. Os comandos em linhas multi-comandos são processados sequencialmente. O comprimento da linha é normalmente limitado a 80 caracteres.

Campos de linha de comando do AT

O campo <COMMAND> indica o que você quer que o modem faça. Comandos mais antigos, ‘básicos’ têm nomes de um único caractere; adições posteriores ao conjunto de comandos, chamadas comandos ‘estendidos’, são prefixadas com um sinal +, como AT+COPS (scan for networks) e AT+CGMI (Get modem manufacturer). Alguns comandos são prefixados com um sinal & – por exemplo, AT&F, que repõe as configurações do modem. Todos os comandos do celular são comandos estendidos. De acordo com a especificação do comando AT, os comandos devem conter caracteres maiúsculos, mas muitos modems permitem que os comandos sejam enviados também em minúsculas. Vamos manter o padrão.

Os valores dos campos <DATA> e <SUFFIX> dependem do tipo de comando, dos quais existem quatro:

Type Suffix Role
Ler ? Configurar um modem
Configurar = Configurar um modem configuração
Executar Nenhum Acionar uma operação de modem
Teste =? Verifica se um modem suporta o comando nomeado – mas note que AT+COPS=? funciona ligeiramente diferente, como veremos em breve

Veremos como estes tipos afectam o uso de comandos AT num momento, mas primeiro vamos ver como o modem responde aos comandos.

Resposta a comandos AT

Quando um comando AT é emitido, dependendo do comando enviado, o modem pode ou não retornar dados, ou seja, fazer o que é chamado de ‘resposta de informação’. De qualquer forma, a operação do comando sempre termina com o modem retornando um ‘código de resultado’.

Por exemplo, suponhamos que pedimos o nome do fabricante do modem usando o seguinte comando:

AT+CGMI

Isto irá gerar a seguinte resposta quando chamado em um modem u-blox:

u-bloxOK

Cada unidade da resposta – a informação (linha superior) e o código do resultado (linha inferior) – são agrupados pelos caracteres Carriage Return e Line Feed (códigos Ascii 0x0D e 0x0A, respectivamente), daí a linha vazia antes do OK.

OK é um código de retorno; o outro é ERROR – você cometeu um erro. Talvez o modem não responda ao comando AT que você enviou, ou você o digitou erroneamente. Talvez você tenha fornecido muito poucos ou muitos valores de dados ou parâmetros de comando. Por padrão, os modems podem não fornecer muitas explicações. Felizmente, alguns deles podem ser configurados para retornar informações de erro estendidas; novamente, você precisará enviar um comando AT para aplicar essa configuração: AT+CMEE=2.

É importante entender que você também pode receber ERROR de um comando AT perfeitamente válido. Quando isto acontece, é uma indicação de que o modem está em estado que é incompatível com o comando. Por exemplo, se você tentar alterar o Nome do Ponto de Acesso (APN) de um modem enquanto ele estiver ativo, isto normalmente retornará ERROR. O remédio é desativar o modem, fazer a alteração do APN, e então reativá-lo.

AT tipos de comando e teste

Você pode mitigar o problema de comandos aparentemente corretos lançando erros fazendo uso do sufixo de comando teste (=?), que é usado para perguntar ao modem se ele suporta o comando dado. Se não suportar, você receberá um código de retorno ERROR; você sabe que não deve emitir este comando. Se o modem suportar o comando, você receberá uma resposta de informação indicando os parâmetros do comando, se tiver algum, seguido de OK.

O exemplo acima pode ser usado para demonstrar o teste do comando. Podemos perguntar ao modem se ele suporta o comando +CGMI comando:

AT+CGMI=?

e ele retornará OK porque ele suporta este comando. Entretanto, como o fabricante do modem é fixo, tentar alterá-lo sempre resultará em ERROR. Como podemos ter tentado alterar o seu valor? Com um sufixo de comando definido (=):

AT+CGMI="Fintlewoodlewix"ERROR

Note como os dados da string são colocados dentro de aspas duplas – este também é um requisito de comando AT.

Deixe um comentário